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" | 10 #include "src/ast/ast.h" |
(...skipping 1317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1328 // eval code will be used within the eval code, so lazy parsing is | 1328 // eval code will be used within the eval code, so lazy parsing is |
1329 // probably not a win. | 1329 // probably not a win. |
1330 if (this->scope()->is_eval_scope()) mode_ = PARSE_EAGERLY; | 1330 if (this->scope()->is_eval_scope()) mode_ = PARSE_EAGERLY; |
1331 } else if (literal->raw_value()->AsString() == | 1331 } else if (literal->raw_value()->AsString() == |
1332 ast_value_factory()->use_asm_string() && | 1332 ast_value_factory()->use_asm_string() && |
1333 token_loc.end_pos - token_loc.beg_pos == | 1333 token_loc.end_pos - token_loc.beg_pos == |
1334 ast_value_factory()->use_asm_string()->length() + 2) { | 1334 ast_value_factory()->use_asm_string()->length() + 2) { |
1335 // Store the usage count; The actual use counter on the isolate is | 1335 // Store the usage count; The actual use counter on the isolate is |
1336 // incremented after parsing is done. | 1336 // incremented after parsing is done. |
1337 ++use_counts_[v8::Isolate::kUseAsm]; | 1337 ++use_counts_[v8::Isolate::kUseAsm]; |
1338 this->scope()->SetAsmModule(); | 1338 DCHECK(this->scope()->is_function_scope()); |
titzer
2016/08/19 09:38:55
Is it possible that some yahoo would do "use asm"
Toon Verwaest
2016/08/19 11:04:45
As far as I know directives are only processed at
| |
1339 this->scope()->AsDeclarationScope()->set_asm_module(); | |
1339 } else { | 1340 } else { |
1340 // Should not change mode, but will increment UseCounter | 1341 // Should not change mode, but will increment UseCounter |
1341 // if appropriate. Ditto usages below. | 1342 // if appropriate. Ditto usages below. |
1342 RaiseLanguageMode(SLOPPY); | 1343 RaiseLanguageMode(SLOPPY); |
1343 } | 1344 } |
1344 } else { | 1345 } else { |
1345 // End of the directive prologue. | 1346 // End of the directive prologue. |
1346 directive_prologue = false; | 1347 directive_prologue = false; |
1347 RaiseLanguageMode(SLOPPY); | 1348 RaiseLanguageMode(SLOPPY); |
1348 } | 1349 } |
(...skipping 2975 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4324 // FunctionExpression; even without enclosing parentheses it might be | 4325 // FunctionExpression; even without enclosing parentheses it might be |
4325 // immediately invoked. | 4326 // immediately invoked. |
4326 // - The function literal shouldn't be hinted to eagerly compile. | 4327 // - The function literal shouldn't be hinted to eagerly compile. |
4327 // - For asm.js functions the body needs to be available when module | 4328 // - For asm.js functions the body needs to be available when module |
4328 // validation is active, because we examine the entire module at once. | 4329 // validation is active, because we examine the entire module at once. |
4329 bool use_temp_zone = | 4330 bool use_temp_zone = |
4330 !is_lazily_parsed && FLAG_lazy && !allow_natives() && | 4331 !is_lazily_parsed && FLAG_lazy && !allow_natives() && |
4331 extension_ == NULL && allow_lazy() && | 4332 extension_ == NULL && allow_lazy() && |
4332 function_type == FunctionLiteral::kDeclaration && | 4333 function_type == FunctionLiteral::kDeclaration && |
4333 eager_compile_hint != FunctionLiteral::kShouldEagerCompile && | 4334 eager_compile_hint != FunctionLiteral::kShouldEagerCompile && |
4334 !(FLAG_validate_asm && scope()->asm_module()); | 4335 !(FLAG_validate_asm && scope()->IsAsmModule()); |
4335 | 4336 |
4336 DeclarationScope* main_scope = nullptr; | 4337 DeclarationScope* main_scope = nullptr; |
4337 if (use_temp_zone) { | 4338 if (use_temp_zone) { |
4338 // This Scope lives in the main Zone; we'll migrate data into it later. | 4339 // This Scope lives in the main Zone; we'll migrate data into it later. |
4339 main_scope = NewFunctionScope(kind); | 4340 main_scope = NewFunctionScope(kind); |
4340 } | 4341 } |
4341 | 4342 |
4342 ZoneList<Statement*>* body = nullptr; | 4343 ZoneList<Statement*>* body = nullptr; |
4343 int arity = -1; | 4344 int arity = -1; |
4344 int materialized_literal_count = -1; | 4345 int materialized_literal_count = -1; |
(...skipping 2742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7087 node->Print(Isolate::Current()); | 7088 node->Print(Isolate::Current()); |
7088 } | 7089 } |
7089 #endif // DEBUG | 7090 #endif // DEBUG |
7090 | 7091 |
7091 #undef CHECK_OK | 7092 #undef CHECK_OK |
7092 #undef CHECK_OK_VOID | 7093 #undef CHECK_OK_VOID |
7093 #undef CHECK_FAILED | 7094 #undef CHECK_FAILED |
7094 | 7095 |
7095 } // namespace internal | 7096 } // namespace internal |
7096 } // namespace v8 | 7097 } // namespace v8 |
OLD | NEW |