diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2012-12-04 12:00:23 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@digia.com> | 2012-12-04 18:56:56 +0100 |
commit | 955f5f03afd9915b7f43ff07ce4b624a86c58a1a (patch) | |
tree | 90eeb1d31ec3b976c38ec615a4dd28bed188f441 /qv4codegen.cpp | |
parent | 070e0d07d821342bfbe7a409a51c4c53185c62c7 (diff) |
Allow only the ExecutionEngine's StringPool to create Strings.
Strings are the only non-Object Values living on the heap. So by
tracking creation, we can help the future GC a lot.
Change-Id: I5d5044f9ff10da42aeb75dd4a556d6ab3d839b1a
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'qv4codegen.cpp')
-rw-r--r-- | qv4codegen.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/qv4codegen.cpp b/qv4codegen.cpp index 893bbb175c..34c785d634 100644 --- a/qv4codegen.cpp +++ b/qv4codegen.cpp @@ -371,10 +371,11 @@ Codegen::Codegen(VM::ExecutionContext *context) { } -IR::Function *Codegen::operator()(Program *node, IR::Module *module, Mode mode) +IR::Function *Codegen::operator()(const QString &fileName, Program *node, IR::Module *module, Mode mode) { assert(node); + _fileName = fileName; _module = module; _env = 0; @@ -399,8 +400,9 @@ IR::Function *Codegen::operator()(Program *node, IR::Module *module, Mode mode) return globalCode; } -IR::Function *Codegen::operator()(AST::FunctionExpression *ast, IR::Module *module) +IR::Function *Codegen::operator()(const QString &fileName, AST::FunctionExpression *ast, IR::Module *module) { + _fileName = fileName; _module = module; _env = 0; @@ -2270,9 +2272,10 @@ bool Codegen::visit(UiSourceElement *) void Codegen::throwSyntaxError(const SourceLocation &loc, const QString &detail) { VM::DiagnosticMessage *msg = new VM::DiagnosticMessage; + msg->fileName = _fileName; msg->offset = loc.begin(); msg->startLine = loc.startLine; msg->startColumn = loc.startColumn; - msg->message = new VM::String(detail); + msg->message = detail; _context->throwSyntaxError(msg); } |