| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/parsing/parser.h" | 5 #include "src/parsing/parser.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "src/api.h" | 9 #include "src/api.h" |
| 10 #include "src/ast/ast.h" | |
| 11 #include "src/ast/ast-expression-rewriter.h" | 10 #include "src/ast/ast-expression-rewriter.h" |
| 12 #include "src/ast/ast-literal-reindexer.h" | 11 #include "src/ast/ast-literal-reindexer.h" |
| 13 #include "src/ast/ast-traversal-visitor.h" | 12 #include "src/ast/ast-traversal-visitor.h" |
| 13 #include "src/ast/ast.h" |
| 14 #include "src/bailout-reason.h" | 14 #include "src/bailout-reason.h" |
| 15 #include "src/base/platform/platform.h" | 15 #include "src/base/platform/platform.h" |
| 16 #include "src/bootstrapper.h" | |
| 17 #include "src/char-predicates-inl.h" | 16 #include "src/char-predicates-inl.h" |
| 18 #include "src/codegen.h" | |
| 19 #include "src/compiler.h" | |
| 20 #include "src/messages.h" | 17 #include "src/messages.h" |
| 21 #include "src/parsing/parameter-initializer-rewriter.h" | 18 #include "src/parsing/parameter-initializer-rewriter.h" |
| 22 #include "src/parsing/parser-base.h" | 19 #include "src/parsing/parse-info.h" |
| 23 #include "src/parsing/rewriter.h" | 20 #include "src/parsing/rewriter.h" |
| 24 #include "src/parsing/scanner-character-streams.h" | 21 #include "src/parsing/scanner-character-streams.h" |
| 25 #include "src/runtime/runtime.h" | 22 #include "src/runtime/runtime.h" |
| 26 #include "src/string-stream.h" | 23 #include "src/string-stream.h" |
| 27 #include "src/tracing/trace-event.h" | 24 #include "src/tracing/trace-event.h" |
| 28 | 25 |
| 29 namespace v8 { | 26 namespace v8 { |
| 30 namespace internal { | 27 namespace internal { |
| 31 | 28 |
| 32 ScriptData::ScriptData(const byte* data, int length) | 29 ScriptData::ScriptData(const byte* data, int length) |
| 33 : owns_data_(false), rejected_(false), data_(data), length_(length) { | 30 : owns_data_(false), rejected_(false), data_(data), length_(length) { |
| 34 if (!IsAligned(reinterpret_cast<intptr_t>(data), kPointerAlignment)) { | 31 if (!IsAligned(reinterpret_cast<intptr_t>(data), kPointerAlignment)) { |
| 35 byte* copy = NewArray<byte>(length); | 32 byte* copy = NewArray<byte>(length); |
| 36 DCHECK(IsAligned(reinterpret_cast<intptr_t>(copy), kPointerAlignment)); | 33 DCHECK(IsAligned(reinterpret_cast<intptr_t>(copy), kPointerAlignment)); |
| 37 CopyBytes(copy, data, length); | 34 CopyBytes(copy, data, length); |
| 38 data_ = copy; | 35 data_ = copy; |
| 39 AcquireDataOwnership(); | 36 AcquireDataOwnership(); |
| 40 } | 37 } |
| 41 } | 38 } |
| 42 | 39 |
| 43 ParseInfo::ParseInfo(Zone* zone) | |
| 44 : zone_(zone), | |
| 45 flags_(0), | |
| 46 source_stream_(nullptr), | |
| 47 source_stream_encoding_(ScriptCompiler::StreamedSource::ONE_BYTE), | |
| 48 character_stream_(nullptr), | |
| 49 extension_(nullptr), | |
| 50 compile_options_(ScriptCompiler::kNoCompileOptions), | |
| 51 script_scope_(nullptr), | |
| 52 unicode_cache_(nullptr), | |
| 53 stack_limit_(0), | |
| 54 hash_seed_(0), | |
| 55 compiler_hints_(0), | |
| 56 start_position_(0), | |
| 57 end_position_(0), | |
| 58 isolate_(nullptr), | |
| 59 cached_data_(nullptr), | |
| 60 ast_value_factory_(nullptr), | |
| 61 function_name_(nullptr), | |
| 62 literal_(nullptr) {} | |
| 63 | |
| 64 ParseInfo::ParseInfo(Zone* zone, Handle<JSFunction> function) | |
| 65 : ParseInfo(zone, Handle<SharedFunctionInfo>(function->shared())) { | |
| 66 set_context(Handle<Context>(function->context())); | |
| 67 } | |
| 68 | |
| 69 | |
| 70 ParseInfo::ParseInfo(Zone* zone, Handle<SharedFunctionInfo> shared) | |
| 71 : ParseInfo(zone) { | |
| 72 isolate_ = shared->GetIsolate(); | |
| 73 | |
| 74 set_lazy(); | |
| 75 set_hash_seed(isolate_->heap()->HashSeed()); | |
| 76 set_is_named_expression(shared->is_named_expression()); | |
| 77 set_calls_eval(shared->scope_info()->CallsEval()); | |
| 78 set_compiler_hints(shared->compiler_hints()); | |
| 79 set_start_position(shared->start_position()); | |
| 80 set_end_position(shared->end_position()); | |
| 81 set_stack_limit(isolate_->stack_guard()->real_climit()); | |
| 82 set_unicode_cache(isolate_->unicode_cache()); | |
| 83 set_language_mode(shared->language_mode()); | |
| 84 set_shared_info(shared); | |
| 85 | |
| 86 Handle<Script> script(Script::cast(shared->script())); | |
| 87 set_script(script); | |
| 88 if (!script.is_null() && script->type() == Script::TYPE_NATIVE) { | |
| 89 set_native(); | |
| 90 } | |
| 91 } | |
| 92 | |
| 93 | |
| 94 ParseInfo::ParseInfo(Zone* zone, Handle<Script> script) : ParseInfo(zone) { | |
| 95 isolate_ = script->GetIsolate(); | |
| 96 | |
| 97 set_hash_seed(isolate_->heap()->HashSeed()); | |
| 98 set_stack_limit(isolate_->stack_guard()->real_climit()); | |
| 99 set_unicode_cache(isolate_->unicode_cache()); | |
| 100 set_script(script); | |
| 101 | |
| 102 if (script->type() == Script::TYPE_NATIVE) { | |
| 103 set_native(); | |
| 104 } | |
| 105 } | |
| 106 | |
| 107 bool ParseInfo::is_declaration() const { | |
| 108 return (compiler_hints_ & (1 << SharedFunctionInfo::kIsDeclaration)) != 0; | |
| 109 } | |
| 110 | |
| 111 bool ParseInfo::is_arrow() const { | |
| 112 return (compiler_hints_ & (1 << SharedFunctionInfo::kIsArrow)) != 0; | |
| 113 } | |
| 114 | |
| 115 bool ParseInfo::is_async() const { | |
| 116 return (compiler_hints_ & (1 << SharedFunctionInfo::kIsAsyncFunction)) != 0; | |
| 117 } | |
| 118 | |
| 119 bool ParseInfo::is_default_constructor() const { | |
| 120 return (compiler_hints_ & (1 << SharedFunctionInfo::kIsDefaultConstructor)) != | |
| 121 0; | |
| 122 } | |
| 123 | |
| 124 FunctionKind ParseInfo::function_kind() const { | |
| 125 return SharedFunctionInfo::FunctionKindBits::decode(compiler_hints_); | |
| 126 } | |
| 127 | |
| 128 FunctionEntry ParseData::GetFunctionEntry(int start) { | 40 FunctionEntry ParseData::GetFunctionEntry(int start) { |
| 129 // The current pre-data entry must be a FunctionEntry with the given | 41 // The current pre-data entry must be a FunctionEntry with the given |
| 130 // start position. | 42 // start position. |
| 131 if ((function_index_ + FunctionEntry::kSize <= Length()) && | 43 if ((function_index_ + FunctionEntry::kSize <= Length()) && |
| 132 (static_cast<int>(Data()[function_index_]) == start)) { | 44 (static_cast<int>(Data()[function_index_]) == start)) { |
| 133 int index = function_index_; | 45 int index = function_index_; |
| 134 function_index_ += FunctionEntry::kSize; | 46 function_index_ += FunctionEntry::kSize; |
| 135 Vector<unsigned> subvector(&(Data()[index]), FunctionEntry::kSize); | 47 Vector<unsigned> subvector(&(Data()[index]), FunctionEntry::kSize); |
| 136 return FunctionEntry(subvector); | 48 return FunctionEntry(subvector); |
| 137 } | 49 } |
| (...skipping 6884 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7022 node->Print(Isolate::Current()); | 6934 node->Print(Isolate::Current()); |
| 7023 } | 6935 } |
| 7024 #endif // DEBUG | 6936 #endif // DEBUG |
| 7025 | 6937 |
| 7026 #undef CHECK_OK | 6938 #undef CHECK_OK |
| 7027 #undef CHECK_OK_VOID | 6939 #undef CHECK_OK_VOID |
| 7028 #undef CHECK_FAILED | 6940 #undef CHECK_FAILED |
| 7029 | 6941 |
| 7030 } // namespace internal | 6942 } // namespace internal |
| 7031 } // namespace v8 | 6943 } // namespace v8 |
| OLD | NEW |