aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qv4codegen.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2017-06-13 23:12:16 +0200
committerLars Knoll <lars.knoll@qt.io>2017-06-20 09:47:00 +0000
commitcae5d019d69f0553f80f53217f6705770d4a4f0c (patch)
tree55098d5358b30617f81f42de2cb5aa3252753296 /src/qml/compiler/qv4codegen.cpp
parent4e44c6e82d257f59ea3d58606e7a0f633cd9562e (diff)
Smaller fixes
Change-Id: I65f8307b717f365bff6d3d99b67601f000631b58 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/qml/compiler/qv4codegen.cpp')
-rw-r--r--src/qml/compiler/qv4codegen.cpp24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/qml/compiler/qv4codegen.cpp b/src/qml/compiler/qv4codegen.cpp
index 1fac608194..cfe23d56e6 100644
--- a/src/qml/compiler/qv4codegen.cpp
+++ b/src/qml/compiler/qv4codegen.cpp
@@ -2236,7 +2236,13 @@ bool Codegen::visit(ThisExpression *ast)
if (hasError)
return false;
- _expr.code = _block->NAME(QStringLiteral("this"), ast->thisToken.startLine, ast->thisToken.startColumn);
+ Reference r = Reference::fromTemp(this, bytecodeGenerator->newTemp());
+
+ Moth::Instruction::LoadThis loadThis;
+ loadThis.result = r.asLValue();
+ bytecodeGenerator->addInstruction(loadThis);
+
+ _expr.result = r;
return false;
}
@@ -2300,7 +2306,7 @@ bool Codegen::visit(VoidExpression *ast)
TempScope scope(_function);
statement(ast->expression);
- _expr.code = _block->CONST(IR::UndefinedType, 0);
+ _expr.result = Reference::fromConst(this, Encode::undefined());
return false;
}
@@ -2311,8 +2317,11 @@ bool Codegen::visit(FunctionDeclaration * ast)
TempScope scope(_function);
- if (_variableEnvironment->compilationMode == QmlBinding)
- move(_block->TEMP(_returnAddress), _block->NAME(ast->name.toString(), 0, 0));
+ if (_variableEnvironment->compilationMode == QmlBinding) {
+ Reference source = Reference::fromName(this, ast->name.toString());
+ Reference target = Reference::fromTemp(this, _returnAddress);
+ target.store(source);
+ }
_expr.accept(nx);
return false;
}
@@ -2633,9 +2642,9 @@ bool Codegen::visit(ExpressionStatement *ast)
TempScope scope(_function);
if (_variableEnvironment->compilationMode == EvalCode || _variableEnvironment->compilationMode == QmlBinding) {
- Result e = expression(ast->expression);
- if (*e)
- move(_block->TEMP(_returnAddress), *e);
+ Reference e = expression(ast->expression);
+ Reference retVal = Reference::fromTemp(this, _returnAddress);
+ retVal.store(e);
} else {
statement(ast->expression);
}
@@ -2843,6 +2852,7 @@ bool Codegen::visit(LocalForStatement *ast)
IR::BasicBlock *forend = _function->newBasicBlock(exceptionHandler());
variableDeclarationList(ast->declarations);
+
_block->JUMP(forcond);
enterLoop(ast, forend, forstep);