diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2011-06-29 17:26:51 +0200 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2011-06-29 17:26:51 +0200 |
commit | 33af2720f26c2b25bc7f75ce7eb454ff99db6d35 (patch) | |
tree | 9a38f0c96420edf503eebd6325dd8d2d8249f653 /deps/v8/src/compiler.h | |
parent | 6afdca885adeeeed9eef8cbb01c3d97af0bc084d (diff) | |
download | node-new-33af2720f26c2b25bc7f75ce7eb454ff99db6d35.tar.gz |
Upgrade V8 to 3.4.8
Diffstat (limited to 'deps/v8/src/compiler.h')
-rw-r--r-- | deps/v8/src/compiler.h | 64 |
1 files changed, 39 insertions, 25 deletions
diff --git a/deps/v8/src/compiler.h b/deps/v8/src/compiler.h index e0a437ac6d..a77fc8ea4a 100644 --- a/deps/v8/src/compiler.h +++ b/deps/v8/src/compiler.h @@ -1,4 +1,4 @@ -// Copyright 2010 the V8 project authors. All rights reserved. +// Copyright 2011 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: @@ -28,9 +28,8 @@ #ifndef V8_COMPILER_H_ #define V8_COMPILER_H_ +#include "allocation.h" #include "ast.h" -#include "frame-element.h" -#include "register-allocator.h" #include "zone.h" namespace v8 { @@ -46,10 +45,14 @@ class CompilationInfo BASE_EMBEDDED { explicit CompilationInfo(Handle<SharedFunctionInfo> shared_info); explicit CompilationInfo(Handle<JSFunction> closure); + Isolate* isolate() { + ASSERT(Isolate::Current() == isolate_); + return isolate_; + } bool is_lazy() const { return (flags_ & IsLazy::mask()) != 0; } bool is_eval() const { return (flags_ & IsEval::mask()) != 0; } bool is_global() const { return (flags_ & IsGlobal::mask()) != 0; } - bool is_strict() const { return (flags_ & IsStrict::mask()) != 0; } + bool is_strict_mode() const { return (flags_ & IsStrictMode::mask()) != 0; } bool is_in_loop() const { return (flags_ & IsInLoop::mask()) != 0; } FunctionLiteral* function() const { return function_; } Scope* scope() const { return scope_; } @@ -70,16 +73,28 @@ class CompilationInfo BASE_EMBEDDED { ASSERT(!is_lazy()); flags_ |= IsGlobal::encode(true); } - void MarkAsStrict() { - flags_ |= IsStrict::encode(true); + void MarkAsStrictMode() { + flags_ |= IsStrictMode::encode(true); } StrictModeFlag StrictMode() { - return is_strict() ? kStrictMode : kNonStrictMode; + return is_strict_mode() ? kStrictMode : kNonStrictMode; } void MarkAsInLoop() { ASSERT(is_lazy()); flags_ |= IsInLoop::encode(true); } + void MarkAsAllowingNativesSyntax() { + flags_ |= IsNativesSyntaxAllowed::encode(true); + } + bool allows_natives_syntax() const { + return IsNativesSyntaxAllowed::decode(flags_); + } + void MarkAsNative() { + flags_ |= IsNative::encode(true); + } + bool is_native() const { + return IsNative::decode(flags_); + } void SetFunction(FunctionLiteral* literal) { ASSERT(function_ == NULL); function_ = literal; @@ -135,7 +150,13 @@ class CompilationInfo BASE_EMBEDDED { return V8::UseCrankshaft() && !closure_.is_null(); } + // Disable all optimization attempts of this info for the rest of the + // current compilation pipeline. + void AbortOptimization(); + private: + Isolate* isolate_; + // Compilation mode. // BASE is generated by the full codegen, optionally prepared for bailouts. // OPTIMIZE is optimized code generated by the Hydrogen-based backend. @@ -152,8 +173,9 @@ class CompilationInfo BASE_EMBEDDED { void Initialize(Mode mode) { mode_ = V8::UseCrankshaft() ? mode : NONOPT; - if (!shared_info_.is_null() && shared_info_->strict_mode()) { - MarkAsStrict(); + if (!shared_info_.is_null()) { + if (shared_info_->strict_mode()) MarkAsStrictMode(); + if (shared_info_->native()) MarkAsNative(); } } @@ -173,7 +195,12 @@ class CompilationInfo BASE_EMBEDDED { // Flags that can be set for lazy compilation. class IsInLoop: public BitField<bool, 3, 1> {}; // Strict mode - used in eager compilation. - class IsStrict: public BitField<bool, 4, 1> {}; + class IsStrictMode: public BitField<bool, 4, 1> {}; + // Native syntax (%-stuff) allowed? + class IsNativesSyntaxAllowed: public BitField<bool, 5, 1> {}; + // Is this a function from our natives. + class IsNative: public BitField<bool, 6, 1> {}; + unsigned flags_; @@ -225,6 +252,8 @@ class Compiler : public AllStatic { // give up. static const int kDefaultMaxOptCount = 10; + static const int kMaxInliningLevels = 3; + // All routines return a SharedFunctionInfo. // If an error occurs an exception is raised and the return handle // contains NULL. @@ -270,21 +299,6 @@ class Compiler : public AllStatic { }; -// During compilation we need a global list of handles to constants -// for frame elements. When the zone gets deleted, we make sure to -// clear this list of handles as well. -class CompilationZoneScope : public ZoneScope { - public: - explicit CompilationZoneScope(ZoneScopeMode mode) : ZoneScope(mode) { } - virtual ~CompilationZoneScope() { - if (ShouldDeleteOnExit()) { - FrameElement::ClearConstantList(); - Result::ClearConstantList(); - } - } -}; - - } } // namespace v8::internal #endif // V8_COMPILER_H_ |