| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 virtual ~CompilationInfo(); | 59 virtual ~CompilationInfo(); |
| 60 | 60 |
| 61 Isolate* isolate() const { | 61 Isolate* isolate() const { |
| 62 return isolate_; | 62 return isolate_; |
| 63 } | 63 } |
| 64 Zone* zone() { return zone_; } | 64 Zone* zone() { return zone_; } |
| 65 bool is_osr() const { return !osr_ast_id_.IsNone(); } | 65 bool is_osr() const { return !osr_ast_id_.IsNone(); } |
| 66 bool is_lazy() const { return IsLazy::decode(flags_); } | 66 bool is_lazy() const { return IsLazy::decode(flags_); } |
| 67 bool is_eval() const { return IsEval::decode(flags_); } | 67 bool is_eval() const { return IsEval::decode(flags_); } |
| 68 bool is_global() const { return IsGlobal::decode(flags_); } | 68 bool is_global() const { return IsGlobal::decode(flags_); } |
| 69 bool is_sloppy_mode() const { return language_mode() == SLOPPY_MODE; } | 69 StrictMode strict_mode() const { return StrictModeField::decode(flags_); } |
| 70 bool is_extended_mode() const { return language_mode() == EXTENDED_MODE; } | |
| 71 LanguageMode language_mode() const { | |
| 72 return LanguageModeField::decode(flags_); | |
| 73 } | |
| 74 bool is_in_loop() const { return IsInLoop::decode(flags_); } | 70 bool is_in_loop() const { return IsInLoop::decode(flags_); } |
| 75 FunctionLiteral* function() const { return function_; } | 71 FunctionLiteral* function() const { return function_; } |
| 76 Scope* scope() const { return scope_; } | 72 Scope* scope() const { return scope_; } |
| 77 Scope* global_scope() const { return global_scope_; } | 73 Scope* global_scope() const { return global_scope_; } |
| 78 Handle<Code> code() const { return code_; } | 74 Handle<Code> code() const { return code_; } |
| 79 Handle<JSFunction> closure() const { return closure_; } | 75 Handle<JSFunction> closure() const { return closure_; } |
| 80 Handle<SharedFunctionInfo> shared_info() const { return shared_info_; } | 76 Handle<SharedFunctionInfo> shared_info() const { return shared_info_; } |
| 81 Handle<Script> script() const { return script_; } | 77 Handle<Script> script() const { return script_; } |
| 82 HydrogenCodeStub* code_stub() const {return code_stub_; } | 78 HydrogenCodeStub* code_stub() const {return code_stub_; } |
| 83 v8::Extension* extension() const { return extension_; } | 79 v8::Extension* extension() const { return extension_; } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 102 ASSERT(IsStub()); | 98 ASSERT(IsStub()); |
| 103 parameter_count_ = parameter_count; | 99 parameter_count_ = parameter_count; |
| 104 } | 100 } |
| 105 | 101 |
| 106 void set_this_has_uses(bool has_no_uses) { | 102 void set_this_has_uses(bool has_no_uses) { |
| 107 this_has_uses_ = has_no_uses; | 103 this_has_uses_ = has_no_uses; |
| 108 } | 104 } |
| 109 bool this_has_uses() { | 105 bool this_has_uses() { |
| 110 return this_has_uses_; | 106 return this_has_uses_; |
| 111 } | 107 } |
| 112 void SetLanguageMode(LanguageMode language_mode) { | 108 void SetStrictMode(StrictMode strict_mode) { |
| 113 ASSERT(this->language_mode() == SLOPPY_MODE || | 109 ASSERT(this->strict_mode() == SLOPPY || this->strict_mode() == strict_mode); |
| 114 this->language_mode() == language_mode || | 110 flags_ = StrictModeField::update(flags_, strict_mode); |
| 115 language_mode == EXTENDED_MODE); | |
| 116 flags_ = LanguageModeField::update(flags_, language_mode); | |
| 117 } | 111 } |
| 118 void MarkAsInLoop() { | 112 void MarkAsInLoop() { |
| 119 ASSERT(is_lazy()); | 113 ASSERT(is_lazy()); |
| 120 flags_ |= IsInLoop::encode(true); | 114 flags_ |= IsInLoop::encode(true); |
| 121 } | 115 } |
| 122 void MarkAsNative() { | 116 void MarkAsNative() { |
| 123 flags_ |= IsNative::encode(true); | 117 flags_ |= IsNative::encode(true); |
| 124 } | 118 } |
| 125 | 119 |
| 126 bool is_native() const { | 120 bool is_native() const { |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 // false by default. | 347 // false by default. |
| 354 // | 348 // |
| 355 // Compilation is either eager or lazy. | 349 // Compilation is either eager or lazy. |
| 356 class IsLazy: public BitField<bool, 0, 1> {}; | 350 class IsLazy: public BitField<bool, 0, 1> {}; |
| 357 // Flags that can be set for eager compilation. | 351 // Flags that can be set for eager compilation. |
| 358 class IsEval: public BitField<bool, 1, 1> {}; | 352 class IsEval: public BitField<bool, 1, 1> {}; |
| 359 class IsGlobal: public BitField<bool, 2, 1> {}; | 353 class IsGlobal: public BitField<bool, 2, 1> {}; |
| 360 // Flags that can be set for lazy compilation. | 354 // Flags that can be set for lazy compilation. |
| 361 class IsInLoop: public BitField<bool, 3, 1> {}; | 355 class IsInLoop: public BitField<bool, 3, 1> {}; |
| 362 // Strict mode - used in eager compilation. | 356 // Strict mode - used in eager compilation. |
| 363 class LanguageModeField: public BitField<LanguageMode, 4, 2> {}; | 357 class StrictModeField: public BitField<StrictMode, 4, 1> {}; |
| 364 // Is this a function from our natives. | 358 // Is this a function from our natives. |
| 365 class IsNative: public BitField<bool, 6, 1> {}; | 359 class IsNative: public BitField<bool, 5, 1> {}; |
| 366 // Is this code being compiled with support for deoptimization.. | 360 // Is this code being compiled with support for deoptimization.. |
| 367 class SupportsDeoptimization: public BitField<bool, 7, 1> {}; | 361 class SupportsDeoptimization: public BitField<bool, 6, 1> {}; |
| 368 // If compiling for debugging produce just full code matching the | 362 // If compiling for debugging produce just full code matching the |
| 369 // initial mode setting. | 363 // initial mode setting. |
| 370 class IsCompilingForDebugging: public BitField<bool, 8, 1> {}; | 364 class IsCompilingForDebugging: public BitField<bool, 7, 1> {}; |
| 371 // If the compiled code contains calls that require building a frame | 365 // If the compiled code contains calls that require building a frame |
| 372 class IsCalling: public BitField<bool, 9, 1> {}; | 366 class IsCalling: public BitField<bool, 8, 1> {}; |
| 373 // If the compiled code contains calls that require building a frame | 367 // If the compiled code contains calls that require building a frame |
| 374 class IsDeferredCalling: public BitField<bool, 10, 1> {}; | 368 class IsDeferredCalling: public BitField<bool, 9, 1> {}; |
| 375 // If the compiled code contains calls that require building a frame | 369 // If the compiled code contains calls that require building a frame |
| 376 class IsNonDeferredCalling: public BitField<bool, 11, 1> {}; | 370 class IsNonDeferredCalling: public BitField<bool, 10, 1> {}; |
| 377 // If the compiled code saves double caller registers that it clobbers. | 371 // If the compiled code saves double caller registers that it clobbers. |
| 378 class SavesCallerDoubles: public BitField<bool, 12, 1> {}; | 372 class SavesCallerDoubles: public BitField<bool, 11, 1> {}; |
| 379 // If the set of valid statements is restricted. | 373 // If the set of valid statements is restricted. |
| 380 class ParseRestricitonField: public BitField<ParseRestriction, 13, 1> {}; | 374 class ParseRestricitonField: public BitField<ParseRestriction, 12, 1> {}; |
| 381 // If the function requires a frame (for unspecified reasons) | 375 // If the function requires a frame (for unspecified reasons) |
| 382 class RequiresFrame: public BitField<bool, 14, 1> {}; | 376 class RequiresFrame: public BitField<bool, 13, 1> {}; |
| 383 | 377 |
| 384 unsigned flags_; | 378 unsigned flags_; |
| 385 | 379 |
| 386 // Fields filled in by the compilation pipeline. | 380 // Fields filled in by the compilation pipeline. |
| 387 // AST filled in by the parser. | 381 // AST filled in by the parser. |
| 388 FunctionLiteral* function_; | 382 FunctionLiteral* function_; |
| 389 // The scope of the function literal as a convenience. Set to indicate | 383 // The scope of the function literal as a convenience. Set to indicate |
| 390 // that scopes have been analyzed. | 384 // that scopes have been analyzed. |
| 391 Scope* scope_; | 385 Scope* scope_; |
| 392 // The global scope provided as a convenience. | 386 // The global scope provided as a convenience. |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 611 ClearExceptionFlag flag); | 605 ClearExceptionFlag flag); |
| 612 static Handle<Code> GetCodeForDebugging(Handle<JSFunction> function); | 606 static Handle<Code> GetCodeForDebugging(Handle<JSFunction> function); |
| 613 | 607 |
| 614 #ifdef ENABLE_DEBUGGER_SUPPORT | 608 #ifdef ENABLE_DEBUGGER_SUPPORT |
| 615 static void CompileForLiveEdit(Handle<Script> script); | 609 static void CompileForLiveEdit(Handle<Script> script); |
| 616 #endif | 610 #endif |
| 617 | 611 |
| 618 // Compile a String source within a context for eval. | 612 // Compile a String source within a context for eval. |
| 619 static Handle<JSFunction> GetFunctionFromEval(Handle<String> source, | 613 static Handle<JSFunction> GetFunctionFromEval(Handle<String> source, |
| 620 Handle<Context> context, | 614 Handle<Context> context, |
| 621 LanguageMode language_mode, | 615 StrictMode strict_mode, |
| 622 ParseRestriction restriction, | 616 ParseRestriction restriction, |
| 623 int scope_position); | 617 int scope_position); |
| 624 | 618 |
| 625 // Compile a String source within a context. | 619 // Compile a String source within a context. |
| 626 static Handle<SharedFunctionInfo> CompileScript(Handle<String> source, | 620 static Handle<SharedFunctionInfo> CompileScript(Handle<String> source, |
| 627 Handle<Object> script_name, | 621 Handle<Object> script_name, |
| 628 int line_offset, | 622 int line_offset, |
| 629 int column_offset, | 623 int column_offset, |
| 630 bool is_shared_cross_origin, | 624 bool is_shared_cross_origin, |
| 631 Handle<Context> context, | 625 Handle<Context> context, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 679 unsigned info_zone_start_allocation_size_; | 673 unsigned info_zone_start_allocation_size_; |
| 680 ElapsedTimer timer_; | 674 ElapsedTimer timer_; |
| 681 | 675 |
| 682 DISALLOW_COPY_AND_ASSIGN(CompilationPhase); | 676 DISALLOW_COPY_AND_ASSIGN(CompilationPhase); |
| 683 }; | 677 }; |
| 684 | 678 |
| 685 | 679 |
| 686 } } // namespace v8::internal | 680 } } // namespace v8::internal |
| 687 | 681 |
| 688 #endif // V8_COMPILER_H_ | 682 #endif // V8_COMPILER_H_ |
| OLD | NEW |