Index: src/wasm/wasm-module.cc |
diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc |
index 3a4ac2dbef552e48cb2562ed785b3c3120a403b5..97b8295b8f2d49b69d401665a7cf94e0256f3cc8 100644 |
--- a/src/wasm/wasm-module.cc |
+++ b/src/wasm/wasm-module.cc |
@@ -785,6 +785,8 @@ const char* SectionName(WasmSectionCode code) { |
return "Data"; |
case kNameSectionCode: |
return "Name"; |
+ case kAsmOffsetsSectionCode: |
+ return "AsmOffsets"; |
default: |
return "<unknown>"; |
} |
@@ -2002,6 +2004,27 @@ bool IsWasmObject(Object* object) { |
return true; |
} |
+bool WasmIsAsm(Object* wasm, Isolate* isolate) { |
+ if (wasm->IsUndefined(isolate)) return false; |
+ DCHECK(IsWasmObject(wasm)); |
+ Object* compiled_module = |
+ JSObject::cast(wasm)->GetInternalField(kWasmCompiledModule); |
+ return WasmCompiledModule::cast(compiled_module)->has_asm_js_script(); |
+} |
+ |
+Handle<Script> GetAsmWasmScript(Handle<JSObject> wasm) { |
+ DCHECK(IsWasmObject(*wasm)); |
+ Object* compiled_module = |
+ JSObject::cast(*wasm)->GetInternalField(kWasmCompiledModule); |
+ return WasmCompiledModule::cast(compiled_module)->asm_js_script(); |
+} |
+ |
+int GetAsmWasmSourcePosition(Handle<JSObject> wasm, int func_index, |
+ int byte_offset) { |
+ return WasmDebugInfo::GetAsmJsSourcePosition(GetDebugInfo(wasm), func_index, |
+ byte_offset); |
+} |
+ |
Handle<SeqOneByteString> GetWasmBytes(Handle<JSObject> wasm) { |
DCHECK(IsWasmObject(*wasm)); |
Object* compiled_module = wasm->GetInternalField(kWasmCompiledModule); |
@@ -2119,11 +2142,10 @@ Handle<JSObject> CreateCompiledModuleObject( |
return module_obj; |
} |
-MaybeHandle<JSObject> CreateModuleObjectFromBytes(Isolate* isolate, |
- const byte* start, |
- const byte* end, |
- ErrorThrower* thrower, |
- ModuleOrigin origin) { |
+// TODO(clemensh): origin can be inferred from asm_js_script; remove it. |
+MaybeHandle<JSObject> CreateModuleObjectFromBytes( |
+ Isolate* isolate, const byte* start, const byte* end, ErrorThrower* thrower, |
+ ModuleOrigin origin, Handle<Script> asm_js_script) { |
MaybeHandle<JSObject> nothing; |
Zone zone(isolate->allocator()); |
ModuleResult result = |
@@ -2133,12 +2155,19 @@ MaybeHandle<JSObject> CreateModuleObjectFromBytes(Isolate* isolate, |
thrower->Failed("Wasm decoding failed", result); |
return nothing; |
} |
- MaybeHandle<WasmCompiledModule> compiled_module = |
+ MaybeHandle<WasmCompiledModule> maybe_compiled_module = |
decoded_module->CompileFunctions(isolate, thrower); |
- if (compiled_module.is_null()) return nothing; |
+ if (maybe_compiled_module.is_null()) return nothing; |
+ Handle<WasmCompiledModule> compiled_module = |
+ maybe_compiled_module.ToHandleChecked(); |
+ |
+ DCHECK_EQ(origin == kAsmJsOrigin, !asm_js_script.is_null()); |
+ DCHECK(!compiled_module->has_asm_js_script()); |
+ if (origin == kAsmJsOrigin) { |
+ compiled_module->set_asm_js_script(asm_js_script); |
+ } |
- return CreateCompiledModuleObject(isolate, compiled_module.ToHandleChecked(), |
- origin); |
+ return CreateCompiledModuleObject(isolate, compiled_module, origin); |
} |
bool ValidateModuleBytes(Isolate* isolate, const byte* start, const byte* end, |