aboutsummaryrefslogtreecommitdiffstats
path: root/qv4codegen.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2012-12-04 12:00:23 +0100
committerLars Knoll <lars.knoll@digia.com>2012-12-04 18:56:56 +0100
commit955f5f03afd9915b7f43ff07ce4b624a86c58a1a (patch)
tree90eeb1d31ec3b976c38ec615a4dd28bed188f441 /qv4codegen.cpp
parent070e0d07d821342bfbe7a409a51c4c53185c62c7 (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.cpp9
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);
}