X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2F3rdparty%2Fv8%2Fsrc%2Fcompiler.h;h=09583c020c3b773c6c123677b63ebb6e3b258158;hb=83b51177e547a9e012a17294c8cefb05836ab00a;hp=bedf5eebb9469d59278bbb4d311f84c7ac7ac9d4;hpb=6ea7510e6eb4d425c0b639cb3f95556324342f89;p=profile%2Fivi%2Fqtjsbackend.git diff --git a/src/3rdparty/v8/src/compiler.h b/src/3rdparty/v8/src/compiler.h index bedf5ee..09583c0 100644 --- a/src/3rdparty/v8/src/compiler.h +++ b/src/3rdparty/v8/src/compiler.h @@ -1,4 +1,4 @@ -// Copyright 2011 the V8 project authors. All rights reserved. +// Copyright 2012 the V8 project authors. All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: @@ -52,13 +52,16 @@ class CompilationInfo BASE_EMBEDDED { bool is_lazy() const { return IsLazy::decode(flags_); } bool is_eval() const { return IsEval::decode(flags_); } bool is_global() const { return IsGlobal::decode(flags_); } - bool is_strict_mode() const { return strict_mode_flag() == kStrictMode; } - StrictModeFlag strict_mode_flag() const { - return StrictModeFlagField::decode(flags_); + bool is_classic_mode() const { return language_mode() == CLASSIC_MODE; } + bool is_extended_mode() const { return language_mode() == EXTENDED_MODE; } + LanguageMode language_mode() const { + return LanguageModeField::decode(flags_); } bool is_in_loop() const { return IsInLoop::decode(flags_); } + bool is_qml_mode() const { return IsQmlMode::decode(flags_); } FunctionLiteral* function() const { return function_; } Scope* scope() const { return scope_; } + Scope* global_scope() const { return global_scope_; } Handle code() const { return code_; } Handle closure() const { return closure_; } Handle shared_info() const { return shared_info_; } @@ -76,15 +79,19 @@ class CompilationInfo BASE_EMBEDDED { ASSERT(!is_lazy()); flags_ |= IsGlobal::encode(true); } - void SetStrictModeFlag(StrictModeFlag strict_mode_flag) { - ASSERT(StrictModeFlagField::decode(flags_) == kNonStrictMode || - StrictModeFlagField::decode(flags_) == strict_mode_flag); - flags_ = StrictModeFlagField::update(flags_, strict_mode_flag); + void SetLanguageMode(LanguageMode language_mode) { + ASSERT(this->language_mode() == CLASSIC_MODE || + this->language_mode() == language_mode || + language_mode == EXTENDED_MODE); + flags_ = LanguageModeField::update(flags_, language_mode); } void MarkAsInLoop() { ASSERT(is_lazy()); flags_ |= IsInLoop::encode(true); } + void MarkAsQmlMode() { + flags_ |= IsQmlMode::encode(true); + } void MarkAsNative() { flags_ |= IsNative::encode(true); } @@ -99,6 +106,10 @@ class CompilationInfo BASE_EMBEDDED { ASSERT(scope_ == NULL); scope_ = scope; } + void SetGlobalScope(Scope* global_scope) { + ASSERT(global_scope_ == NULL); + global_scope_ = global_scope; + } void SetCode(Handle code) { code_ = code; } void SetExtension(v8::Extension* extension) { ASSERT(!is_lazy()); @@ -156,10 +167,8 @@ class CompilationInfo BASE_EMBEDDED { flags_ |= SupportsDeoptimization::encode(true); } - // Determine whether or not we can adaptively optimize. - bool AllowOptimize() { - return V8::UseCrankshaft() && !closure_.is_null(); - } + // Determines whether or not to insert a self-optimization header. + bool ShouldSelfOptimize(); // Disable all optimization attempts of this info for the rest of the // current compilation pipeline. @@ -171,9 +180,8 @@ class CompilationInfo BASE_EMBEDDED { // Compilation mode. // BASE is generated by the full codegen, optionally prepared for bailouts. // OPTIMIZE is optimized code generated by the Hydrogen-based backend. - // NONOPT is generated by the full codegen or the classic backend - // and is not prepared for recompilation/bailouts. These functions - // are never recompiled. + // NONOPT is generated by the full codegen and is not prepared for + // recompilation/bailouts. These functions are never recompiled. enum Mode { BASE, OPTIMIZE, @@ -189,8 +197,11 @@ class CompilationInfo BASE_EMBEDDED { MarkAsNative(); } if (!shared_info_.is_null()) { - ASSERT(strict_mode_flag() == kNonStrictMode); - SetStrictModeFlag(shared_info_->strict_mode_flag()); + ASSERT(language_mode() == CLASSIC_MODE); + SetLanguageMode(shared_info_->language_mode()); + } + if (!shared_info_.is_null() && shared_info_->qml_mode()) { + MarkAsQmlMode(); } } @@ -210,7 +221,7 @@ class CompilationInfo BASE_EMBEDDED { // Flags that can be set for lazy compilation. class IsInLoop: public BitField {}; // Strict mode - used in eager compilation. - class StrictModeFlagField: public BitField {}; + class LanguageModeField: public BitField {}; // Is this a function from our natives. class IsNative: public BitField {}; // Is this code being compiled with support for deoptimization.. @@ -218,7 +229,8 @@ class CompilationInfo BASE_EMBEDDED { // If compiling for debugging produce just full code matching the // initial mode setting. class IsCompilingForDebugging: public BitField {}; - + // Qml mode + class IsQmlMode: public BitField {}; unsigned flags_; @@ -228,6 +240,8 @@ class CompilationInfo BASE_EMBEDDED { // The scope of the function literal as a convenience. Set to indicate // that scopes have been analyzed. Scope* scope_; + // The global scope provided as a convenience. + Scope* global_scope_; // The compiled code. Handle code_; @@ -271,6 +285,9 @@ class Compiler : public AllStatic { static const int kMaxInliningLevels = 3; + // Call count before primitive functions trigger their own optimization. + static const int kCallsUntilPrimitiveOpt = 200; + // All routines return a SharedFunctionInfo. // If an error occurs an exception is raised and the return handle // contains NULL. @@ -283,13 +300,16 @@ class Compiler : public AllStatic { v8::Extension* extension, ScriptDataImpl* pre_data, Handle script_data, - NativesFlag is_natives_code); + NativesFlag is_natives_code, + v8::Script::CompileFlags = v8::Script::Default); // Compile a String source within a context for Eval. static Handle CompileEval(Handle source, Handle context, bool is_global, - StrictModeFlag strict_mode); + LanguageMode language_mode, + int scope_position, + bool qml_mode); // Compile from function info (used for lazy compilation). Returns true on // success and false if the compilation resulted in a stack overflow.