summaryrefslogtreecommitdiff
path: root/src/wasm-s-parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-s-parser.h')
-rw-r--r--src/wasm-s-parser.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h
index 9fb9d4389..6ccc7c36c 100644
--- a/src/wasm-s-parser.h
+++ b/src/wasm-s-parser.h
@@ -137,6 +137,14 @@ class SExpressionWasmBuilder {
std::map<Name, Signature> functionSignatures;
std::unordered_map<cashew::IString, Index> debugInfoFileIndices;
+ // Maps type indexes to a mapping of field index => name. This is not the same
+ // as the field names stored on the wasm object, as that maps types after
+ // their canonicalization. Canonicalization loses information, which means
+ // that structurally identical types cannot have different names. However,
+ // while parsing the text format we keep this mapping of type indexes to names
+ // which does allow reading such content.
+ std::unordered_map<size_t, std::unordered_map<Index, Name>> fieldNames;
+
public:
// Assumes control of and modifies the input.
SExpressionWasmBuilder(Module& wasm, Element& module, IRProfile profile);
@@ -272,7 +280,7 @@ private:
Expression* makeRttCanon(Element& s);
Expression* makeRttSub(Element& s);
Expression* makeStructNew(Element& s, bool default_);
- Index getStructIndex(const HeapType& type, Element& s);
+ Index getStructIndex(Element& type, Element& field);
Expression* makeStructGet(Element& s, bool signed_ = false);
Expression* makeStructSet(Element& s);
Expression* makeArrayNew(Element& s, bool default_);