Changeset 187677 in webkit
- Timestamp:
- Jul 31, 2015 1:34:50 PM (9 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 5 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/CMakeLists.txt
r187575 r187677 412 412 413 413 wasm/JSWASMModule.cpp 414 wasm/WASMModuleParser.cpp 415 wasm/WASMReader.cpp 414 416 415 417 yarr/RegularExpression.cpp -
trunk/Source/JavaScriptCore/ChangeLog
r187591 r187677 1 2015-07-31 Sukolsak Sakshuwong <sukolsak@gmail.com> 2 3 Implement WebAssembly module parser 4 https://bugs.webkit.org/show_bug.cgi?id=147293 5 6 Reviewed by Mark Lam. 7 8 Re-landing after fix for the "..\..\jsc.cpp(46): fatal error C1083: Cannot open 9 include file: 'JSWASMModule.h'" issue on Windows. 10 11 Implement WebAssembly module parser for WebAssembly files produced by pack-asmjs 12 <https://github.com/WebAssembly/polyfill-prototype-1>. This patch only checks 13 the magic number at the beginning of the files. Parsing of the rest will be 14 implemented in a subsequent patch. 15 16 * CMakeLists.txt: 17 * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: 18 * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: 19 * JavaScriptCore.xcodeproj/project.pbxproj: 20 * jsc.cpp: 21 (GlobalObject::finishCreation): 22 (functionLoadWebAssembly): 23 * parser/SourceProvider.h: 24 (JSC::WebAssemblySourceProvider::create): 25 (JSC::WebAssemblySourceProvider::data): 26 (JSC::WebAssemblySourceProvider::WebAssemblySourceProvider): 27 * runtime/JSGlobalObject.cpp: 28 (JSC::JSGlobalObject::init): 29 (JSC::JSGlobalObject::visitChildren): 30 * runtime/JSGlobalObject.h: 31 (JSC::JSGlobalObject::wasmModuleStructure): 32 * wasm/WASMMagicNumber.h: Added. 33 * wasm/WASMModuleParser.cpp: Added. 34 (JSC::WASMModuleParser::WASMModuleParser): 35 (JSC::WASMModuleParser::parse): 36 (JSC::WASMModuleParser::parseModule): 37 (JSC::parseWebAssembly): 38 * wasm/WASMModuleParser.h: Added. 39 * wasm/WASMReader.cpp: Added. 40 (JSC::WASMReader::readUnsignedInt32): 41 (JSC::WASMReader::readFloat): 42 (JSC::WASMReader::readDouble): 43 * wasm/WASMReader.h: Added. 44 (JSC::WASMReader::WASMReader): 45 1 46 2015-07-30 Sukolsak Sakshuwong <sukolsak@gmail.com> 2 47 -
trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj
r187575 r187677 878 878 <ClCompile Include="..\tools\JSDollarVMPrototype.cpp" /> 879 879 <ClCompile Include="..\wasm\JSWASMModule.cpp" /> 880 <ClCompile Include="..\wasm\WASMModuleParser.cpp" /> 881 <ClCompile Include="..\wasm\WASMReader.cpp" /> 880 882 <ClCompile Include="..\yarr\RegularExpression.cpp" /> 881 883 <ClCompile Include="..\yarr\YarrCanonicalizeUCS2.cpp" /> … … 1753 1755 <ClInclude Include="..\tools\TieredMMapArray.h" /> 1754 1756 <ClInclude Include="..\wasm\JSWASMModule.h" /> 1757 <ClInclude Include="..\wasm\WASMMagicNumber.h" /> 1758 <ClInclude Include="..\wasm\WASMModuleParser.h" /> 1759 <ClInclude Include="..\wasm\WASMReader.h" /> 1755 1760 <ClInclude Include="..\yarr\RegularExpression.h" /> 1756 1761 <ClInclude Include="..\yarr\Yarr.h" /> -
trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters
r187575 r187677 1825 1825 <Filter>wasm</Filter> 1826 1826 </ClCompile> 1827 <ClCompile Include="..\wasm\WASMModuleParser.cpp"> 1828 <Filter>wasm</Filter> 1829 </ClCompile> 1830 <ClCompile Include="..\wasm\WASMReader.cpp"> 1831 <Filter>wasm</Filter> 1832 </ClCompile> 1827 1833 </ItemGroup> 1828 1834 <ItemGroup> … … 4356 4362 <Filter>wasm</Filter> 4357 4363 </ClInclude> 4364 <ClInclude Include="..\wasm\WASMMagicNumber.h"> 4365 <Filter>wasm</Filter> 4366 </ClInclude> 4367 <ClInclude Include="..\wasm\WASMModuleParser.h"> 4368 <Filter>wasm</Filter> 4369 </ClInclude> 4370 <ClInclude Include="..\wasm\WASMReader.h"> 4371 <Filter>wasm</Filter> 4372 </ClInclude> 4358 4373 </ItemGroup> 4359 4374 <ItemGroup> -
trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r187575 r187677 1022 1022 79EE0BFF1B4AFB85000385C9 /* VariableEnvironment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79EE0BFD1B4AFB85000385C9 /* VariableEnvironment.cpp */; }; 1023 1023 79EE0C001B4AFB85000385C9 /* VariableEnvironment.h in Headers */ = {isa = PBXBuildFile; fileRef = 79EE0BFE1B4AFB85000385C9 /* VariableEnvironment.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1024 7B39F76D1B62DE2E00360FB4 /* WASMModuleParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B39F7691B62DE2200360FB4 /* WASMModuleParser.cpp */; }; 1025 7B39F76E1B62DE3200360FB4 /* WASMModuleParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B39F76A1B62DE2200360FB4 /* WASMModuleParser.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1026 7B39F7701B62DE3200360FB4 /* WASMReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B39F76C1B62DE2200360FB4 /* WASMReader.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1027 7B39F7721B63574D00360FB4 /* WASMReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B39F7711B63574B00360FB4 /* WASMReader.cpp */; }; 1028 7B7A5E271B68288C0027CAD0 /* WASMMagicNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B7A5E261B6828840027CAD0 /* WASMMagicNumber.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1024 1029 7B98D1361B60CD5F0023B1A4 /* JSWASMModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B98D1341B60CD5A0023B1A4 /* JSWASMModule.cpp */; }; 1025 1030 7B98D1371B60CD620023B1A4 /* JSWASMModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B98D1351B60CD5A0023B1A4 /* JSWASMModule.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 2794 2799 79EE0BFD1B4AFB85000385C9 /* VariableEnvironment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VariableEnvironment.cpp; sourceTree = "<group>"; }; 2795 2800 79EE0BFE1B4AFB85000385C9 /* VariableEnvironment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VariableEnvironment.h; sourceTree = "<group>"; }; 2801 7B39F7691B62DE2200360FB4 /* WASMModuleParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WASMModuleParser.cpp; sourceTree = "<group>"; }; 2802 7B39F76A1B62DE2200360FB4 /* WASMModuleParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WASMModuleParser.h; sourceTree = "<group>"; }; 2803 7B39F76C1B62DE2200360FB4 /* WASMReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WASMReader.h; sourceTree = "<group>"; }; 2804 7B39F7711B63574B00360FB4 /* WASMReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WASMReader.cpp; sourceTree = "<group>"; }; 2805 7B7A5E261B6828840027CAD0 /* WASMMagicNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WASMMagicNumber.h; sourceTree = "<group>"; }; 2796 2806 7B98D1341B60CD5A0023B1A4 /* JSWASMModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWASMModule.cpp; sourceTree = "<group>"; }; 2797 2807 7B98D1351B60CD5A0023B1A4 /* JSWASMModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWASMModule.h; sourceTree = "<group>"; }; … … 4362 4372 7B98D1341B60CD5A0023B1A4 /* JSWASMModule.cpp */, 4363 4373 7B98D1351B60CD5A0023B1A4 /* JSWASMModule.h */, 4374 7B7A5E261B6828840027CAD0 /* WASMMagicNumber.h */, 4375 7B39F7691B62DE2200360FB4 /* WASMModuleParser.cpp */, 4376 7B39F76A1B62DE2200360FB4 /* WASMModuleParser.h */, 4377 7B39F7711B63574B00360FB4 /* WASMReader.cpp */, 4378 7B39F76C1B62DE2200360FB4 /* WASMReader.h */, 4364 4379 ); 4365 4380 path = wasm; … … 6296 6311 0F2B66F517B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototype.h in Headers */, 6297 6312 0F2B66F617B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototypeInlines.h in Headers */, 6313 7B39F76E1B62DE3200360FB4 /* WASMModuleParser.h in Headers */, 6298 6314 BC18C4210E16F5CD00B34460 /* JSGlobalObject.h in Headers */, 6299 6315 A5FD0086189B1B7E00633231 /* JSGlobalObjectConsoleAgent.h in Headers */, … … 6510 6526 0FF7168C15A3B235008F5DAA /* PropertyOffset.h in Headers */, 6511 6527 A785F6BC18C553FE00F10626 /* SpillRegistersMode.h in Headers */, 6528 7B7A5E271B68288C0027CAD0 /* WASMMagicNumber.h in Headers */, 6512 6529 BC18C4550E16F5CD00B34460 /* PropertySlot.h in Headers */, 6513 6530 0FB7F39C15ED8E4600F167B2 /* PropertyStorage.h in Headers */, … … 6645 6662 0F2E892C16D028AD009E4FD2 /* UnusedPointer.h in Headers */, 6646 6663 A1587D6E1B4DC14100D69849 /* IntlDateTimeFormat.h in Headers */, 6664 7B39F7701B62DE3200360FB4 /* WASMReader.h in Headers */, 6647 6665 0F963B3813FC6FE90002D9B2 /* ValueProfile.h in Headers */, 6648 6666 0F426A481460CBB300131F8F /* ValueRecovery.h in Headers */, … … 7281 7299 0F9D36941AE9CC33000D4DFB /* DFGCleanUpPhase.cpp in Sources */, 7282 7300 A7D89CF717A0B8CC00773AD8 /* DFGFlushFormat.cpp in Sources */, 7301 7B39F76D1B62DE2E00360FB4 /* WASMModuleParser.cpp in Sources */, 7283 7302 0F3A1BF91A9ECB7D000DE01A /* DFGPutStackSinkingPhase.cpp in Sources */, 7284 7303 86EC9DC71328DF82002B2AD7 /* DFGGraph.cpp in Sources */, … … 7700 7719 62D2D38F1ADF103F000206C1 /* FunctionRareData.cpp in Sources */, 7701 7720 0F7700921402FF3C0078EB39 /* SamplingCounter.cpp in Sources */, 7721 7B39F7721B63574D00360FB4 /* WASMReader.cpp in Sources */, 7702 7722 1429D8850ED21C3D00B89619 /* SamplingTool.cpp in Sources */, 7703 7723 70EC0EC61AA0D7DA00B6AAFA /* StringIteratorPrototype.cpp in Sources */, -
trunk/Source/JavaScriptCore/jsc.cpp
r187560 r187677 44 44 #include "JSProxy.h" 45 45 #include "JSString.h" 46 #include "JSWASMModule.h" 46 47 #include "ProfilerDatabase.h" 47 48 #include "SamplingTool.h" … … 51 52 #include "TestRunnerUtils.h" 52 53 #include "TypeProfilerLog.h" 54 #include "WASMModuleParser.h" 53 55 #include <math.h> 54 56 #include <stdio.h> … … 493 495 static EncodedJSValue JSC_HOST_CALL functionHasBasicBlockExecuted(ExecState*); 494 496 static EncodedJSValue JSC_HOST_CALL functionEnableExceptionFuzz(ExecState*); 497 #if ENABLE(WEBASSEMBLY) 498 static EncodedJSValue JSC_HOST_CALL functionLoadWebAssembly(ExecState*); 499 #endif 495 500 496 501 #if ENABLE(SAMPLING_FLAGS) … … 656 661 addFunction(vm, "enableExceptionFuzz", functionEnableExceptionFuzz, 0); 657 662 663 #if ENABLE(WEBASSEMBLY) 664 addFunction(vm, "loadWebAssembly", functionLoadWebAssembly, 1); 665 #endif 666 658 667 JSArray* array = constructEmptyArray(globalExec(), 0); 659 668 for (size_t i = 0; i < arguments.size(); ++i) … … 1183 1192 return JSValue::encode(jsUndefined()); 1184 1193 } 1194 1195 #if ENABLE(WEBASSEMBLY) 1196 EncodedJSValue JSC_HOST_CALL functionLoadWebAssembly(ExecState* exec) 1197 { 1198 String fileName = exec->argument(0).toString(exec)->value(exec); 1199 Vector<char> buffer; 1200 if (!fillBufferWithContentsOfFile(fileName, buffer)) 1201 return JSValue::encode(exec->vm().throwException(exec, createError(exec, ASCIILiteral("Could not open file.")))); 1202 RefPtr<WebAssemblySourceProvider> sourceProvider = WebAssemblySourceProvider::create(reinterpret_cast<Vector<uint8_t>&>(buffer), fileName); 1203 SourceCode source(sourceProvider); 1204 String errorMessage; 1205 JSWASMModule* module = parseWebAssembly(exec, source, errorMessage); 1206 if (!module) 1207 return JSValue::encode(exec->vm().throwException(exec, createSyntaxError(exec, errorMessage))); 1208 return JSValue::encode(module); 1209 } 1210 #endif 1185 1211 1186 1212 // Use SEH for Release builds only to get rid of the crash report dialog -
trunk/Source/JavaScriptCore/parser/SourceProvider.h
r187560 r187677 95 95 }; 96 96 97 #if ENABLE(WEBASSEMBLY) 98 class WebAssemblySourceProvider : public SourceProvider { 99 public: 100 static Ref<WebAssemblySourceProvider> create(const Vector<uint8_t>& data, const String& url) 101 { 102 return adoptRef(*new WebAssemblySourceProvider(data, url)); 103 } 104 105 virtual const String& source() const override 106 { 107 return m_source; 108 } 109 110 const Vector<uint8_t>& data() const 111 { 112 return m_data; 113 } 114 115 private: 116 WebAssemblySourceProvider(const Vector<uint8_t>& data, const String& url) 117 : SourceProvider(url, TextPosition::minimumPosition()) 118 , m_source("[WebAssembly source]") 119 , m_data(data) 120 { 121 } 122 123 String m_source; 124 Vector<uint8_t> m_data; 125 }; 126 #endif 127 97 128 } // namespace JSC 98 129 -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
r187575 r187677 93 93 #include "JSTypedArrayPrototypes.h" 94 94 #include "JSTypedArrays.h" 95 #include "JSWASMModule.h" 95 96 #include "JSWeakMap.h" 96 97 #include "JSWeakSet.h" … … 341 342 m_promiseStructure.set(vm, this, JSPromise::createStructure(vm, this, m_promisePrototype.get())); 342 343 344 #if ENABLE(WEBASSEMBLY) 345 m_wasmModuleStructure.set(vm, this, JSWASMModule::createStructure(vm, this)); 346 #endif 347 343 348 m_parseIntFunction.set(vm, this, JSFunction::create(vm, this, 2, vm.propertyNames->parseInt.string(), globalFuncParseInt, NoIntrinsic)); 344 349 putDirectWithoutTransition(vm, vm.propertyNames->parseInt, m_parseIntFunction.get(), DontEnum | Function); … … 802 807 visitor.append(&thisObject->m_internalFunctionStructure); 803 808 visitor.append(&thisObject->m_promiseStructure); 809 #if ENABLE(WEBASSEMBLY) 810 visitor.append(&thisObject->m_wasmModuleStructure); 811 #endif 804 812 805 813 #define VISIT_SIMPLE_TYPE(CapitalName, lowerName, properName, instanceType, jsName) \ -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h
r187560 r187677 244 244 WriteBarrier<Structure> m_regExpMatchesArrayStructure; 245 245 WriteBarrier<Structure> m_promiseStructure; 246 #if ENABLE(WEBASSEMBLY) 247 WriteBarrier<Structure> m_wasmModuleStructure; 248 #endif 246 249 247 250 #define DEFINE_STORAGE_FOR_SIMPLE_TYPE(capitalName, lowerName, properName, instanceType, jsName) \ … … 476 479 Structure* regExpMatchesArrayStructure() const { return m_regExpMatchesArrayStructure.get(); } 477 480 Structure* promiseStructure() const { return m_promiseStructure.get(); } 481 #if ENABLE(WEBASSEMBLY) 482 Structure* wasmModuleStructure() const { return m_wasmModuleStructure.get(); } 483 #endif 478 484 479 485 JS_EXPORT_PRIVATE void setRemoteDebuggingEnabled(bool);
Note: See TracChangeset
for help on using the changeset viewer.