aboutsummaryrefslogtreecommitdiffstats
path: root/qv4isel_llvm.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2012-06-06 15:58:21 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2012-06-06 15:58:21 +0200
commit80188db9d87bc4f31826b8652f8e9a39cc29d5d5 (patch)
tree0e9df86c0f3eb23ecaf9cafc1ba6ded313fccda0 /qv4isel_llvm.cpp
parentcee0095e2062285dc1702578fad2ecbe3050b0be (diff)
Generate LLVM code for the `this-expression'.
Diffstat (limited to 'qv4isel_llvm.cpp')
-rw-r--r--qv4isel_llvm.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/qv4isel_llvm.cpp b/qv4isel_llvm.cpp
index d7829bf034..0f882e0a3b 100644
--- a/qv4isel_llvm.cpp
+++ b/qv4isel_llvm.cpp
@@ -356,9 +356,15 @@ void LLVMInstructionSelection::visitString(IR::String *e)
void LLVMInstructionSelection::visitName(IR::Name *e)
{
llvm::Value *result = newLLVMTemp(_valueTy);
- llvm::Value *name = getIdentifier(*e->id);
- CreateCall3(_llvmModule->getFunction("__qmljs_get_activation_property"),
- _llvmFunction->arg_begin(), result, name);
+
+ if (e->id == QStringLiteral("this")) {
+ CreateCall2(_llvmModule->getFunction("__qmljs_llvm_get_this_object"),
+ _llvmFunction->arg_begin(), result);
+ } else {
+ llvm::Value *name = getIdentifier(*e->id);
+ CreateCall3(_llvmModule->getFunction("__qmljs_get_activation_property"),
+ _llvmFunction->arg_begin(), result, name);
+ }
_llvmValue = CreateLoad(result);
}