| 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 4914 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4925 } else { | 4925 } else { |
| 4926 DCHECK_EQ(inner_scope, function_scope); | 4926 DCHECK_EQ(inner_scope, function_scope); |
| 4927 if (is_sloppy(function_scope->language_mode())) { | 4927 if (is_sloppy(function_scope->language_mode())) { |
| 4928 InsertSloppyBlockFunctionVarBindings(function_scope, nullptr, CHECK_OK); | 4928 InsertSloppyBlockFunctionVarBindings(function_scope, nullptr, CHECK_OK); |
| 4929 } | 4929 } |
| 4930 } | 4930 } |
| 4931 | 4931 |
| 4932 if (function_type == FunctionLiteral::kNamedExpression) { | 4932 if (function_type == FunctionLiteral::kNamedExpression) { |
| 4933 // Now that we know the language mode, we can create the const assignment | 4933 // Now that we know the language mode, we can create the const assignment |
| 4934 // in the previously reserved spot. | 4934 // in the previously reserved spot. |
| 4935 // NOTE: We create a proxy and resolve it here so that in the | |
| 4936 // future we can change the AST to only refer to VariableProxies | |
| 4937 // instead of Variables and Proxies as is the case now. | |
| 4938 DCHECK_EQ(function_scope, scope()); | 4935 DCHECK_EQ(function_scope, scope()); |
| 4939 VariableMode fvar_mode = is_strict(language_mode()) ? CONST : CONST_LEGACY; | 4936 Variable* fvar = function_scope->DeclareFunctionVar(function_name); |
| 4940 Variable* fvar = new (zone()) | |
| 4941 Variable(scope(), function_name, fvar_mode, Variable::NORMAL, | |
| 4942 kCreatedInitialized, kNotAssigned); | |
| 4943 VariableProxy* proxy = factory()->NewVariableProxy(fvar); | |
| 4944 VariableDeclaration* fvar_declaration = | |
| 4945 factory()->NewVariableDeclaration(proxy, scope(), kNoSourcePosition); | |
| 4946 function_scope->DeclareFunctionVar(fvar_declaration); | |
| 4947 | |
| 4948 VariableProxy* fproxy = factory()->NewVariableProxy(fvar); | 4937 VariableProxy* fproxy = factory()->NewVariableProxy(fvar); |
| 4949 result->Set(kFunctionNameAssignmentIndex, | 4938 result->Set(kFunctionNameAssignmentIndex, |
| 4950 factory()->NewExpressionStatement( | 4939 factory()->NewExpressionStatement( |
| 4951 factory()->NewAssignment(Token::INIT, fproxy, | 4940 factory()->NewAssignment(Token::INIT, fproxy, |
| 4952 factory()->NewThisFunction(pos), | 4941 factory()->NewThisFunction(pos), |
| 4953 kNoSourcePosition), | 4942 kNoSourcePosition), |
| 4954 kNoSourcePosition)); | 4943 kNoSourcePosition)); |
| 4955 } | 4944 } |
| 4956 | 4945 |
| 4957 MarkCollectedTailCallExpressions(); | 4946 MarkCollectedTailCallExpressions(); |
| (...skipping 2136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7094 node->Print(Isolate::Current()); | 7083 node->Print(Isolate::Current()); |
| 7095 } | 7084 } |
| 7096 #endif // DEBUG | 7085 #endif // DEBUG |
| 7097 | 7086 |
| 7098 #undef CHECK_OK | 7087 #undef CHECK_OK |
| 7099 #undef CHECK_OK_VOID | 7088 #undef CHECK_OK_VOID |
| 7100 #undef CHECK_FAILED | 7089 #undef CHECK_FAILED |
| 7101 | 7090 |
| 7102 } // namespace internal | 7091 } // namespace internal |
| 7103 } // namespace v8 | 7092 } // namespace v8 |
| OLD | NEW |