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

Side by Side Diff: src/wasm/wasm-module.cc

Issue 2771803005: Hide WasmModule.origin field behind readable accessors. (Closed)
Patch Set: Use boolean accessors instead of get_origin. Created 3 years, 9 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/wasm/wasm-module.h ('k') | src/wasm/wasm-objects.cc » ('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 <memory> 5 #include <memory>
6 6
7 #include "src/assembler-inl.h" 7 #include "src/assembler-inl.h"
8 #include "src/base/adapters.h" 8 #include "src/base/adapters.h"
9 #include "src/base/atomic-utils.h" 9 #include "src/base/atomic-utils.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 } 283 }
284 DCHECK_LE(this_idx + 2, deopt_data->length()); 284 DCHECK_LE(this_idx + 2, deopt_data->length());
285 DCHECK(deopt_data->get(this_idx)->IsUndefined(isolate)); 285 DCHECK(deopt_data->get(this_idx)->IsUndefined(isolate));
286 DCHECK(deopt_data->get(this_idx + 1)->IsUndefined(isolate)); 286 DCHECK(deopt_data->get(this_idx + 1)->IsUndefined(isolate));
287 deopt_data->set(this_idx, *export_table); 287 deopt_data->set(this_idx, *export_table);
288 deopt_data->set(this_idx + 1, Smi::FromInt(export_index)); 288 deopt_data->set(this_idx + 1, Smi::FromInt(export_index));
289 return code; 289 return code;
290 } 290 }
291 291
292 bool compile_lazy(const WasmModule* module) { 292 bool compile_lazy(const WasmModule* module) {
293 return FLAG_wasm_lazy_compilation || (FLAG_asm_wasm_lazy_compilation && 293 return FLAG_wasm_lazy_compilation ||
294 module->origin == wasm::kAsmJsOrigin); 294 (FLAG_asm_wasm_lazy_compilation && module->is_asm_js());
295 } 295 }
296 296
297 // A helper for compiling an entire module. 297 // A helper for compiling an entire module.
298 class CompilationHelper { 298 class CompilationHelper {
299 public: 299 public:
300 CompilationHelper(Isolate* isolate, WasmModule* module) 300 CompilationHelper(Isolate* isolate, WasmModule* module)
301 : isolate_(isolate), module_(module) {} 301 : isolate_(isolate), module_(module) {}
302 302
303 // The actual runnable task that performs compilations in the background. 303 // The actual runnable task that performs compilations in the background.
304 class CompilationTask : public CancelableTask { 304 class CompilationTask : public CancelableTask {
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 Handle<FixedArray> signature_tables = 507 Handle<FixedArray> signature_tables =
508 factory->NewFixedArray(function_table_count, TENURED); 508 factory->NewFixedArray(function_table_count, TENURED);
509 for (int i = 0; i < function_table_count; ++i) { 509 for (int i = 0; i < function_table_count; ++i) {
510 temp_instance.function_tables[i] = factory->NewFixedArray(1, TENURED); 510 temp_instance.function_tables[i] = factory->NewFixedArray(1, TENURED);
511 temp_instance.signature_tables[i] = factory->NewFixedArray(1, TENURED); 511 temp_instance.signature_tables[i] = factory->NewFixedArray(1, TENURED);
512 function_tables->set(i, *temp_instance.function_tables[i]); 512 function_tables->set(i, *temp_instance.function_tables[i]);
513 signature_tables->set(i, *temp_instance.signature_tables[i]); 513 signature_tables->set(i, *temp_instance.signature_tables[i]);
514 } 514 }
515 515
516 HistogramTimerScope wasm_compile_module_time_scope( 516 HistogramTimerScope wasm_compile_module_time_scope(
517 module_->origin == ModuleOrigin::kWasmOrigin 517 module_->is_wasm()
518 ? isolate_->counters()->wasm_compile_wasm_module_time() 518 ? isolate_->counters()->wasm_compile_wasm_module_time()
519 : isolate_->counters()->wasm_compile_asm_module_time()); 519 : isolate_->counters()->wasm_compile_asm_module_time());
520 520
521 ModuleBytesEnv module_env(module_, &temp_instance, wire_bytes); 521 ModuleBytesEnv module_env(module_, &temp_instance, wire_bytes);
522 522
523 // The {code_table} array contains import wrappers and functions (which 523 // The {code_table} array contains import wrappers and functions (which
524 // are both included in {functions.size()}, and export wrappers. 524 // are both included in {functions.size()}, and export wrappers.
525 int code_table_size = static_cast<int>(module_->functions.size() + 525 int code_table_size = static_cast<int>(module_->functions.size() +
526 module_->num_exported_functions); 526 module_->num_exported_functions);
527 Handle<FixedArray> code_table = 527 Handle<FixedArray> code_table =
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after
1150 // Check that an imports argument was provided, if the module requires it. 1150 // Check that an imports argument was provided, if the module requires it.
1151 // No point in continuing otherwise. 1151 // No point in continuing otherwise.
1152 if (!module_->import_table.empty() && ffi_.is_null()) { 1152 if (!module_->import_table.empty() && ffi_.is_null()) {
1153 thrower_->TypeError( 1153 thrower_->TypeError(
1154 "Imports argument must be present and must be an object"); 1154 "Imports argument must be present and must be an object");
1155 return {}; 1155 return {};
1156 } 1156 }
1157 1157
1158 // Record build time into correct bucket, then build instance. 1158 // Record build time into correct bucket, then build instance.
1159 HistogramTimerScope wasm_instantiate_module_time_scope( 1159 HistogramTimerScope wasm_instantiate_module_time_scope(
1160 module_->origin == ModuleOrigin::kWasmOrigin 1160 module_->is_wasm()
1161 ? isolate_->counters()->wasm_instantiate_wasm_module_time() 1161 ? isolate_->counters()->wasm_instantiate_wasm_module_time()
1162 : isolate_->counters()->wasm_instantiate_asm_module_time()); 1162 : isolate_->counters()->wasm_instantiate_asm_module_time());
1163 Factory* factory = isolate_->factory(); 1163 Factory* factory = isolate_->factory();
1164 1164
1165 //-------------------------------------------------------------------------- 1165 //--------------------------------------------------------------------------
1166 // Reuse the compiled module (if no owner), otherwise clone. 1166 // Reuse the compiled module (if no owner), otherwise clone.
1167 //-------------------------------------------------------------------------- 1167 //--------------------------------------------------------------------------
1168 Handle<FixedArray> code_table; 1168 Handle<FixedArray> code_table;
1169 Handle<FixedArray> old_code_table; 1169 Handle<FixedArray> old_code_table;
1170 MaybeHandle<WasmInstanceObject> owner; 1170 MaybeHandle<WasmInstanceObject> owner;
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1312 //-------------------------------------------------------------------------- 1312 //--------------------------------------------------------------------------
1313 MaybeHandle<JSArrayBuffer> old_memory; 1313 MaybeHandle<JSArrayBuffer> old_memory;
1314 1314
1315 uint32_t min_mem_pages = module_->min_mem_pages; 1315 uint32_t min_mem_pages = module_->min_mem_pages;
1316 isolate_->counters()->wasm_min_mem_pages_count()->AddSample(min_mem_pages); 1316 isolate_->counters()->wasm_min_mem_pages_count()->AddSample(min_mem_pages);
1317 1317
1318 if (!memory_.is_null()) { 1318 if (!memory_.is_null()) {
1319 // Set externally passed ArrayBuffer non neuterable. 1319 // Set externally passed ArrayBuffer non neuterable.
1320 memory_->set_is_neuterable(false); 1320 memory_->set_is_neuterable(false);
1321 1321
1322 DCHECK_IMPLIES(EnableGuardRegions(), module_->origin == kAsmJsOrigin || 1322 DCHECK_IMPLIES(EnableGuardRegions(),
1323 memory_->has_guard_region()); 1323 module_->is_asm_js() || memory_->has_guard_region());
1324 } else if (min_mem_pages > 0) { 1324 } else if (min_mem_pages > 0) {
1325 memory_ = AllocateMemory(min_mem_pages); 1325 memory_ = AllocateMemory(min_mem_pages);
1326 if (memory_.is_null()) return {}; // failed to allocate memory 1326 if (memory_.is_null()) return {}; // failed to allocate memory
1327 } 1327 }
1328 1328
1329 //-------------------------------------------------------------------------- 1329 //--------------------------------------------------------------------------
1330 // Check that indirect function table segments are within bounds. 1330 // Check that indirect function table segments are within bounds.
1331 //-------------------------------------------------------------------------- 1331 //--------------------------------------------------------------------------
1332 for (WasmTableInit& table_init : module_->table_inits) { 1332 for (WasmTableInit& table_init : module_->table_inits) {
1333 DCHECK(table_init.table_index < table_instances_.size()); 1333 DCHECK(table_init.table_index < table_instances_.size());
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
1699 // Function imports must be callable. 1699 // Function imports must be callable.
1700 if (!value->IsCallable()) { 1700 if (!value->IsCallable()) {
1701 ReportLinkError("function import requires a callable", index, 1701 ReportLinkError("function import requires a callable", index,
1702 module_name, import_name); 1702 module_name, import_name);
1703 return -1; 1703 return -1;
1704 } 1704 }
1705 1705
1706 Handle<Code> import_wrapper = CompileImportWrapper( 1706 Handle<Code> import_wrapper = CompileImportWrapper(
1707 isolate_, index, module_->functions[import.index].sig, 1707 isolate_, index, module_->functions[import.index].sig,
1708 Handle<JSReceiver>::cast(value), module_name, import_name, 1708 Handle<JSReceiver>::cast(value), module_name, import_name,
1709 module_->origin); 1709 module_->get_origin());
1710 if (import_wrapper.is_null()) { 1710 if (import_wrapper.is_null()) {
1711 ReportLinkError( 1711 ReportLinkError(
1712 "imported function does not match the expected type", index, 1712 "imported function does not match the expected type", index,
1713 module_name, import_name); 1713 module_name, import_name);
1714 return -1; 1714 return -1;
1715 } 1715 }
1716 code_table->set(num_imported_functions, *import_wrapper); 1716 code_table->set(num_imported_functions, *import_wrapper);
1717 RecordStats(isolate_, *import_wrapper); 1717 RecordStats(isolate_, *import_wrapper);
1718 num_imported_functions++; 1718 num_imported_functions++;
1719 break; 1719 break;
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
1933 void ProcessExports(Handle<FixedArray> code_table, 1933 void ProcessExports(Handle<FixedArray> code_table,
1934 Handle<WasmInstanceObject> instance, 1934 Handle<WasmInstanceObject> instance,
1935 Handle<WasmCompiledModule> compiled_module) { 1935 Handle<WasmCompiledModule> compiled_module) {
1936 if (NeedsWrappers()) { 1936 if (NeedsWrappers()) {
1937 // Fill the table to cache the exported JSFunction wrappers. 1937 // Fill the table to cache the exported JSFunction wrappers.
1938 js_wrappers_.insert(js_wrappers_.begin(), module_->functions.size(), 1938 js_wrappers_.insert(js_wrappers_.begin(), module_->functions.size(),
1939 Handle<JSFunction>::null()); 1939 Handle<JSFunction>::null());
1940 } 1940 }
1941 1941
1942 Handle<JSObject> exports_object; 1942 Handle<JSObject> exports_object;
1943 if (module_->origin == kWasmOrigin) { 1943 if (module_->is_wasm()) {
1944 // Create the "exports" object. 1944 // Create the "exports" object.
1945 exports_object = isolate_->factory()->NewJSObjectWithNullProto(); 1945 exports_object = isolate_->factory()->NewJSObjectWithNullProto();
1946 } else if (module_->origin == kAsmJsOrigin) { 1946 } else if (module_->is_asm_js()) {
1947 Handle<JSFunction> object_function = Handle<JSFunction>( 1947 Handle<JSFunction> object_function = Handle<JSFunction>(
1948 isolate_->native_context()->object_function(), isolate_); 1948 isolate_->native_context()->object_function(), isolate_);
1949 exports_object = isolate_->factory()->NewJSObject(object_function); 1949 exports_object = isolate_->factory()->NewJSObject(object_function);
1950 } else { 1950 } else {
1951 UNREACHABLE(); 1951 UNREACHABLE();
1952 } 1952 }
1953 Handle<String> exports_name = 1953 Handle<String> exports_name =
1954 isolate_->factory()->InternalizeUtf8String("exports"); 1954 isolate_->factory()->InternalizeUtf8String("exports");
1955 JSObject::AddProperty(instance, exports_name, exports_object, NONE); 1955 JSObject::AddProperty(instance, exports_name, exports_object, NONE);
1956 1956
1957 Handle<String> foreign_init_name = 1957 Handle<String> foreign_init_name =
1958 isolate_->factory()->InternalizeUtf8String( 1958 isolate_->factory()->InternalizeUtf8String(
1959 wasm::AsmWasmBuilder::foreign_init_name); 1959 wasm::AsmWasmBuilder::foreign_init_name);
1960 Handle<String> single_function_name = 1960 Handle<String> single_function_name =
1961 isolate_->factory()->InternalizeUtf8String( 1961 isolate_->factory()->InternalizeUtf8String(
1962 wasm::AsmWasmBuilder::single_function_name); 1962 wasm::AsmWasmBuilder::single_function_name);
1963 1963
1964 PropertyDescriptor desc; 1964 PropertyDescriptor desc;
1965 desc.set_writable(module_->origin == kAsmJsOrigin); 1965 desc.set_writable(module_->is_asm_js());
1966 desc.set_enumerable(true); 1966 desc.set_enumerable(true);
1967 1967
1968 // Count up export indexes. 1968 // Count up export indexes.
1969 int export_index = 0; 1969 int export_index = 0;
1970 for (auto exp : module_->export_table) { 1970 for (auto exp : module_->export_table) {
1971 if (exp.kind == kExternalFunction) { 1971 if (exp.kind == kExternalFunction) {
1972 ++export_index; 1972 ++export_index;
1973 } 1973 }
1974 } 1974 }
1975 1975
1976 // Store weak references to all exported functions. 1976 // Store weak references to all exported functions.
1977 Handle<FixedArray> weak_exported_functions; 1977 Handle<FixedArray> weak_exported_functions;
1978 if (compiled_module->has_weak_exported_functions()) { 1978 if (compiled_module->has_weak_exported_functions()) {
1979 weak_exported_functions = compiled_module->weak_exported_functions(); 1979 weak_exported_functions = compiled_module->weak_exported_functions();
1980 } else { 1980 } else {
1981 weak_exported_functions = 1981 weak_exported_functions =
1982 isolate_->factory()->NewFixedArray(export_index); 1982 isolate_->factory()->NewFixedArray(export_index);
1983 compiled_module->set_weak_exported_functions(weak_exported_functions); 1983 compiled_module->set_weak_exported_functions(weak_exported_functions);
1984 } 1984 }
1985 DCHECK_EQ(export_index, weak_exported_functions->length()); 1985 DCHECK_EQ(export_index, weak_exported_functions->length());
1986 1986
1987 // Process each export in the export table (go in reverse so asm.js 1987 // Process each export in the export table (go in reverse so asm.js
1988 // can skip duplicates). 1988 // can skip duplicates).
1989 for (auto exp : base::Reversed(module_->export_table)) { 1989 for (auto exp : base::Reversed(module_->export_table)) {
1990 Handle<String> name = 1990 Handle<String> name =
1991 WasmCompiledModule::ExtractUtf8StringFromModuleBytes( 1991 WasmCompiledModule::ExtractUtf8StringFromModuleBytes(
1992 isolate_, compiled_module_, exp.name_offset, exp.name_length) 1992 isolate_, compiled_module_, exp.name_offset, exp.name_length)
1993 .ToHandleChecked(); 1993 .ToHandleChecked();
1994 Handle<JSObject> export_to; 1994 Handle<JSObject> export_to;
1995 if (module_->origin == kAsmJsOrigin && exp.kind == kExternalFunction && 1995 if (module_->is_asm_js() && exp.kind == kExternalFunction &&
1996 (String::Equals(name, foreign_init_name) || 1996 (String::Equals(name, foreign_init_name) ||
1997 String::Equals(name, single_function_name))) { 1997 String::Equals(name, single_function_name))) {
1998 export_to = instance; 1998 export_to = instance;
1999 } else { 1999 } else {
2000 export_to = exports_object; 2000 export_to = exports_object;
2001 } 2001 }
2002 2002
2003 switch (exp.kind) { 2003 switch (exp.kind) {
2004 case kExternalFunction: { 2004 case kExternalFunction: {
2005 // Wrap and export the code as a JSFunction. 2005 // Wrap and export the code as a JSFunction.
2006 WasmFunction& function = module_->functions[exp.index]; 2006 WasmFunction& function = module_->functions[exp.index];
2007 int func_index = 2007 int func_index =
2008 static_cast<int>(module_->functions.size() + --export_index); 2008 static_cast<int>(module_->functions.size() + --export_index);
2009 Handle<JSFunction> js_function = js_wrappers_[exp.index]; 2009 Handle<JSFunction> js_function = js_wrappers_[exp.index];
2010 if (js_function.is_null()) { 2010 if (js_function.is_null()) {
2011 // Wrap the exported code as a JSFunction. 2011 // Wrap the exported code as a JSFunction.
2012 Handle<Code> export_code = 2012 Handle<Code> export_code =
2013 code_table->GetValueChecked<Code>(isolate_, func_index); 2013 code_table->GetValueChecked<Code>(isolate_, func_index);
2014 MaybeHandle<String> func_name; 2014 MaybeHandle<String> func_name;
2015 if (module_->origin == kAsmJsOrigin) { 2015 if (module_->is_asm_js()) {
2016 // For modules arising from asm.js, honor the names section. 2016 // For modules arising from asm.js, honor the names section.
2017 func_name = WasmCompiledModule::ExtractUtf8StringFromModuleBytes( 2017 func_name = WasmCompiledModule::ExtractUtf8StringFromModuleBytes(
2018 isolate_, compiled_module_, function.name_offset, 2018 isolate_, compiled_module_, function.name_offset,
2019 function.name_length) 2019 function.name_length)
2020 .ToHandleChecked(); 2020 .ToHandleChecked();
2021 } 2021 }
2022 js_function = WasmExportedFunction::New( 2022 js_function = WasmExportedFunction::New(
2023 isolate_, instance, func_name, function.func_index, 2023 isolate_, instance, func_name, function.func_index,
2024 static_cast<int>(function.sig->parameter_count()), export_code); 2024 static_cast<int>(function.sig->parameter_count()), export_code);
2025 js_wrappers_[exp.index] = js_function; 2025 js_wrappers_[exp.index] = js_function;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
2088 } 2088 }
2089 desc.set_value(isolate_->factory()->NewNumber(num)); 2089 desc.set_value(isolate_->factory()->NewNumber(num));
2090 break; 2090 break;
2091 } 2091 }
2092 default: 2092 default:
2093 UNREACHABLE(); 2093 UNREACHABLE();
2094 break; 2094 break;
2095 } 2095 }
2096 2096
2097 // Skip duplicates for asm.js. 2097 // Skip duplicates for asm.js.
2098 if (module_->origin == kAsmJsOrigin) { 2098 if (module_->is_asm_js()) {
2099 v8::Maybe<bool> status = JSReceiver::HasOwnProperty(export_to, name); 2099 v8::Maybe<bool> status = JSReceiver::HasOwnProperty(export_to, name);
2100 if (status.FromMaybe(false)) { 2100 if (status.FromMaybe(false)) {
2101 continue; 2101 continue;
2102 } 2102 }
2103 } 2103 }
2104 v8::Maybe<bool> status = JSReceiver::DefineOwnProperty( 2104 v8::Maybe<bool> status = JSReceiver::DefineOwnProperty(
2105 isolate_, export_to, name, &desc, Object::THROW_ON_ERROR); 2105 isolate_, export_to, name, &desc, Object::THROW_ON_ERROR);
2106 if (!status.IsJust()) { 2106 if (!status.IsJust()) {
2107 thrower_->LinkError("export of %.*s failed.", name->length(), 2107 thrower_->LinkError("export of %.*s failed.", name->length(),
2108 name->ToCString().get()); 2108 name->ToCString().get());
2109 return; 2109 return;
2110 } 2110 }
2111 } 2111 }
2112 2112
2113 if (module_->origin == kWasmOrigin) { 2113 if (module_->is_wasm()) {
2114 v8::Maybe<bool> success = JSReceiver::SetIntegrityLevel( 2114 v8::Maybe<bool> success = JSReceiver::SetIntegrityLevel(
2115 exports_object, FROZEN, Object::DONT_THROW); 2115 exports_object, FROZEN, Object::DONT_THROW);
2116 DCHECK(success.FromMaybe(false)); 2116 DCHECK(success.FromMaybe(false));
2117 USE(success); 2117 USE(success);
2118 } 2118 }
2119 } 2119 }
2120 2120
2121 void InitializeTables(Handle<FixedArray> code_table, 2121 void InitializeTables(Handle<FixedArray> code_table,
2122 Handle<WasmInstanceObject> instance, 2122 Handle<WasmInstanceObject> instance,
2123 CodeSpecialization* code_specialization) { 2123 CodeSpecialization* code_specialization) {
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
2238 if (js_wrappers_[func_index].is_null()) { 2238 if (js_wrappers_[func_index].is_null()) {
2239 // No JSFunction entry yet exists for this function. Create one. 2239 // No JSFunction entry yet exists for this function. Create one.
2240 // TODO(titzer): We compile JS->WASM wrappers for functions are 2240 // TODO(titzer): We compile JS->WASM wrappers for functions are
2241 // not exported but are in an exported table. This should be done 2241 // not exported but are in an exported table. This should be done
2242 // at module compile time and cached instead. 2242 // at module compile time and cached instead.
2243 2243
2244 Handle<Code> wrapper_code = 2244 Handle<Code> wrapper_code =
2245 js_to_wasm_cache_.CloneOrCompileJSToWasmWrapper( 2245 js_to_wasm_cache_.CloneOrCompileJSToWasmWrapper(
2246 isolate_, module_, wasm_code, func_index); 2246 isolate_, module_, wasm_code, func_index);
2247 MaybeHandle<String> func_name; 2247 MaybeHandle<String> func_name;
2248 if (module_->origin == kAsmJsOrigin) { 2248 if (module_->is_asm_js()) {
2249 // For modules arising from asm.js, honor the names section. 2249 // For modules arising from asm.js, honor the names section.
2250 func_name = 2250 func_name =
2251 WasmCompiledModule::ExtractUtf8StringFromModuleBytes( 2251 WasmCompiledModule::ExtractUtf8StringFromModuleBytes(
2252 isolate_, compiled_module_, function->name_offset, 2252 isolate_, compiled_module_, function->name_offset,
2253 function->name_length) 2253 function->name_length)
2254 .ToHandleChecked(); 2254 .ToHandleChecked();
2255 } 2255 }
2256 Handle<WasmExportedFunction> js_function = 2256 Handle<WasmExportedFunction> js_function =
2257 WasmExportedFunction::New( 2257 WasmExportedFunction::New(
2258 isolate_, instance, func_name, func_index, 2258 isolate_, instance, func_name, func_index,
(...skipping 950 matching lines...) Expand 10 before | Expand all | Expand 10 after
3209 callee_compiled->instruction_start()); 3209 callee_compiled->instruction_start());
3210 } 3210 }
3211 DCHECK_EQ(non_compiled_functions.size(), idx); 3211 DCHECK_EQ(non_compiled_functions.size(), idx);
3212 } 3212 }
3213 3213
3214 Code* ret = 3214 Code* ret =
3215 Code::cast(compiled_module->code_table()->get(func_to_return_idx)); 3215 Code::cast(compiled_module->code_table()->get(func_to_return_idx));
3216 DCHECK_EQ(Code::WASM_FUNCTION, ret->kind()); 3216 DCHECK_EQ(Code::WASM_FUNCTION, ret->kind());
3217 return handle(ret, isolate); 3217 return handle(ret, isolate);
3218 } 3218 }
OLDNEW
« no previous file with comments | « src/wasm/wasm-module.h ('k') | src/wasm/wasm-objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698