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

Side by Side Diff: src/objects.cc

Issue 2375793002: Reland: [modules] Properly initialize declared variables. (Closed)
Patch Set: 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
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 19886 matching lines...) Expand 10 before | Expand all | Expand 10 after
19897 if (ResolveExport(module, Handle<String>::cast(name), true, &resolve_set) 19897 if (ResolveExport(module, Handle<String>::cast(name), true, &resolve_set)
19898 .is_null()) { 19898 .is_null()) {
19899 return false; 19899 return false;
19900 } 19900 }
19901 } 19901 }
19902 19902
19903 return true; 19903 return true;
19904 } 19904 }
19905 19905
19906 MaybeHandle<Object> Module::Evaluate(Handle<Module> module) { 19906 MaybeHandle<Object> Module::Evaluate(Handle<Module> module) {
19907 DCHECK(module->code()->IsJSFunction()); 19907 DCHECK(module->code()->IsJSFunction()); // Instantiated.
19908 19908
19909 Isolate* isolate = module->GetIsolate(); 19909 Isolate* isolate = module->GetIsolate();
19910 19910
19911 // Each module can only be evaluated once. 19911 // Each module can only be evaluated once.
19912 if (module->evaluated()) return isolate->factory()->undefined_value(); 19912 if (module->evaluated()) return isolate->factory()->undefined_value();
19913 module->set_evaluated(true); 19913 module->set_evaluated(true);
19914 19914
19915 // Initialization.
19916 Handle<JSFunction> function(JSFunction::cast(module->code()), isolate);
19917 DCHECK_EQ(MODULE_SCOPE, function->shared()->scope_info()->scope_type());
19918 Handle<Object> receiver = isolate->factory()->undefined_value();
19919 Handle<Object> argv[] = {module};
19920 Handle<Object> generator;
19921 ASSIGN_RETURN_ON_EXCEPTION(
19922 isolate, generator,
19923 Execution::Call(isolate, function, receiver, arraysize(argv), argv),
19924 Object);
19925
19926 // Recursion.
19915 Handle<FixedArray> requested_modules(module->requested_modules(), isolate); 19927 Handle<FixedArray> requested_modules(module->requested_modules(), isolate);
19916 for (int i = 0, length = requested_modules->length(); i < length; ++i) { 19928 for (int i = 0, length = requested_modules->length(); i < length; ++i) {
19917 Handle<Module> import(Module::cast(requested_modules->get(i)), isolate); 19929 Handle<Module> import(Module::cast(requested_modules->get(i)), isolate);
19918 RETURN_ON_EXCEPTION(isolate, Evaluate(import), Object); 19930 RETURN_ON_EXCEPTION(isolate, Evaluate(import), Object);
19919 } 19931 }
19920 19932
19921 Handle<JSFunction> function(JSFunction::cast(module->code()), isolate); 19933 // Evaluation of module body.
19922 DCHECK_EQ(MODULE_SCOPE, function->shared()->scope_info()->scope_type()); 19934 Handle<JSFunction> resume(
19923 Handle<Object> receiver = isolate->factory()->undefined_value(); 19935 isolate->native_context()->generator_prototype_next(), isolate);
19924 Handle<Object> argv[] = {module}; 19936 return Execution::Call(isolate, resume, generator, 0, nullptr);
19925 return Execution::Call(isolate, function, receiver, arraysize(argv), argv);
19926 } 19937 }
19927 19938
19928 } // namespace internal 19939 } // namespace internal
19929 } // namespace v8 19940 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698