From fd7d475e298e5b63cd6383c78cc900635c82aa38 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Mon, 23 May 2011 18:26:19 +1000 Subject: [PATCH 05/13] Introduce a QML compilation mode In QML mode, there is a second global object - known as the QML global object. During property resolution, if a property is not present on the JS global object, it is resolve on the QML global object. This global object behavior is only enabled if a script is being compiled in QML mode. The object to use as the QML global object is passed as a parameter to the Script::Run() method. Any function closures etc. created during the run will retain a reference to this object, so different objects can be passed in different script runs. --- include/v8.h | 18 ++++++++-- src/api.cc | 52 ++++++++++++++++++++++++----- src/arm/code-stubs-arm.cc | 4 ++ src/arm/full-codegen-arm.cc | 26 ++++++++------ src/arm/lithium-arm.cc | 2 +- src/arm/lithium-arm.h | 6 +++- src/arm/lithium-codegen-arm.cc | 7 ++-- src/arm/macro-assembler-arm.h | 5 +++ src/ast-inl.h | 5 +++ src/ast.h | 1 + src/code-stubs.h | 2 +- src/compiler.cc | 15 +++++++- src/compiler.h | 22 ++++++++++-- src/contexts.cc | 23 +++++++++++++ src/contexts.h | 4 ++ src/execution.cc | 28 +++++++++++++-- src/execution.h | 6 +++ src/full-codegen.cc | 3 +- src/full-codegen.h | 1 + src/heap.cc | 2 + src/hydrogen-instructions.h | 10 ++++- src/hydrogen.cc | 2 + src/ia32/code-stubs-ia32.cc | 7 ++++ src/ia32/full-codegen-ia32.cc | 26 ++++++++------ src/ia32/lithium-codegen-ia32.cc | 7 ++-- src/ia32/lithium-ia32.cc | 2 +- src/ia32/lithium-ia32.h | 6 +++- src/ia32/macro-assembler-ia32.h | 5 +++ src/objects-inl.h | 12 +++++++ src/objects.h | 5 +++ src/parser.cc | 27 +++++++++++++-- src/parser.h | 4 ++- src/prettyprinter.cc | 3 ++ src/runtime.cc | 68 ++++++++++++++++++++++++------------- src/runtime.h | 8 ++-- src/scopes.cc | 10 +++++ src/scopes.h | 7 ++++ src/variables.cc | 3 +- src/variables.h | 5 +++ src/x64/code-stubs-x64.cc | 4 ++ src/x64/full-codegen-x64.cc | 26 ++++++++------ src/x64/lithium-codegen-x64.cc | 7 ++-- src/x64/lithium-x64.cc | 2 +- src/x64/lithium-x64.h | 6 +++ src/x64/macro-assembler-x64.h | 5 +++ 45 files changed, 391 insertions(+), 108 deletions(-) diff --git a/include/v8.h b/include/v8.h index 7f06ae7..a858eae 100644 --- a/include/v8.h +++ b/include/v8.h @@ -577,6 +577,10 @@ class ScriptOrigin { */ class V8EXPORT Script { public: + enum CompileFlags { + Default = 0x00, + QmlMode = 0x01 + }; /** * Compiles the specified script (context-independent). @@ -596,7 +600,8 @@ class V8EXPORT Script { static Local