Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(361)

Side by Side Diff: src/objects.cc

Issue 2375793002: Reland: [modules] Properly initialize declared variables. (Closed)
Patch Set: Update CompilerHints. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/objects.h ('k') | src/parsing/parser.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/objects.h" 5 #include "src/objects.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <iomanip> 8 #include <iomanip>
9 #include <memory> 9 #include <memory>
10 #include <sstream> 10 #include <sstream>
(...skipping 19888 matching lines...) Expand 10 before | Expand all | Expand 10 after
19899 if (ResolveExport(module, Handle<String>::cast(name), true, &resolve_set) 19899 if (ResolveExport(module, Handle<String>::cast(name), true, &resolve_set)
19900 .is_null()) { 19900 .is_null()) {
19901 return false; 19901 return false;
19902 } 19902 }
19903 } 19903 }
19904 19904
19905 return true; 19905 return true;
19906 } 19906 }
19907 19907
19908 MaybeHandle<Object> Module::Evaluate(Handle<Module> module) { 19908 MaybeHandle<Object> Module::Evaluate(Handle<Module> module) {
19909 DCHECK(module->code()->IsJSFunction()); 19909 DCHECK(module->code()->IsJSFunction()); // Instantiated.
19910 19910
19911 Isolate* isolate = module->GetIsolate(); 19911 Isolate* isolate = module->GetIsolate();
19912 19912
19913 // Each module can only be evaluated once. 19913 // Each module can only be evaluated once.
19914 if (module->evaluated()) return isolate->factory()->undefined_value(); 19914 if (module->evaluated()) return isolate->factory()->undefined_value();
19915 module->set_evaluated(true); 19915 module->set_evaluated(true);
19916 19916
19917 // Initialization.
19918 Handle<JSFunction> function(JSFunction::cast(module->code()), isolate);
19919 DCHECK_EQ(MODULE_SCOPE, function->shared()->scope_info()->scope_type());
19920 Handle<Object> receiver = isolate->factory()->undefined_value();
19921 Handle<Object> argv[] = {module};
19922 Handle<Object> generator;
19923 ASSIGN_RETURN_ON_EXCEPTION(
19924 isolate, generator,
19925 Execution::Call(isolate, function, receiver, arraysize(argv), argv),
19926 Object);
19927
19928 // Recursion.
19917 Handle<FixedArray> requested_modules(module->requested_modules(), isolate); 19929 Handle<FixedArray> requested_modules(module->requested_modules(), isolate);
19918 for (int i = 0, length = requested_modules->length(); i < length; ++i) { 19930 for (int i = 0, length = requested_modules->length(); i < length; ++i) {
19919 Handle<Module> import(Module::cast(requested_modules->get(i)), isolate); 19931 Handle<Module> import(Module::cast(requested_modules->get(i)), isolate);
19920 RETURN_ON_EXCEPTION(isolate, Evaluate(import), Object); 19932 RETURN_ON_EXCEPTION(isolate, Evaluate(import), Object);
19921 } 19933 }
19922 19934
19923 Handle<JSFunction> function(JSFunction::cast(module->code()), isolate); 19935 // Evaluation of module body.
19924 DCHECK_EQ(MODULE_SCOPE, function->shared()->scope_info()->scope_type()); 19936 Handle<JSFunction> resume(
19925 Handle<Object> receiver = isolate->factory()->undefined_value(); 19937 isolate->native_context()->generator_next_internal(), isolate);
19926 Handle<Object> argv[] = {module}; 19938 return Execution::Call(isolate, resume, generator, 0, nullptr);
19927 return Execution::Call(isolate, function, receiver, arraysize(argv), argv);
19928 } 19939 }
19929 19940
19930 } // namespace internal 19941 } // namespace internal
19931 } // namespace v8 19942 } // namespace v8
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/parsing/parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698