WebAssembly: support name section
[WebKit-https.git] / Source / JavaScriptCore / wasm / WasmModuleParser.cpp
index ee714c1..4cde165 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 
 #include "IdentifierInlines.h"
 #include "JSWebAssemblyTable.h"
-#include "WasmFormat.h"
 #include "WasmMemoryInformation.h"
+#include "WasmNameSectionParser.h"
 #include "WasmOps.h"
 #include "WasmSections.h"
 
-#include <sys/mman.h>
-
 namespace JSC { namespace Wasm {
 
 ALWAYS_INLINE I32InitExpr makeI32InitExpr(uint8_t opcode, uint32_t bits)
@@ -156,8 +154,8 @@ auto ModuleParser::parseImport() -> PartialResult
     for (uint32_t importNumber = 0; importNumber < importCount; ++importNumber) {
         uint32_t moduleLen;
         uint32_t fieldLen;
-        Vector<LChar> moduleString;
-        Vector<LChar> fieldString;
+        Name moduleString;
+        Name fieldString;
         ExternalKind kind;
         unsigned kindIndex { 0 };
 
@@ -368,7 +366,7 @@ auto ModuleParser::parseExport() -> PartialResult
     HashSet<String> exportNames;
     for (uint32_t exportNumber = 0; exportNumber < exportCount; ++exportNumber) {
         uint32_t fieldLen;
-        Vector<LChar> fieldString;
+        Name fieldString;
         ExternalKind kind;
         unsigned kindIndex;
 
@@ -605,7 +603,14 @@ auto ModuleParser::parseCustom(uint32_t sectionLength) -> PartialResult
         WASM_PARSER_FAIL_IF(!parseUInt8(byte), "can't get ", byteNumber, "th data byte from ", customSectionNumber, "th custom section");
         section.payload.uncheckedAppend(byte);
     }
-    
+
+    Name nameName = { 'n', 'a', 'm', 'e' };
+    if (section.name == nameName) {
+        NameSectionParser nameSectionParser(section.payload.begin(), section.payload.size(), m_info);
+        if (auto nameSection = nameSectionParser.parse())
+            m_info->nameSection = WTFMove(*nameSection);
+    }
+
     m_info->customSections.uncheckedAppend(WTFMove(section));
 
     return { };