summaryrefslogtreecommitdiff
path: root/src/wasm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm.h')
-rw-r--r--src/wasm.h27
1 files changed, 1 insertions, 26 deletions
diff --git a/src/wasm.h b/src/wasm.h
index 4ad0870cc..21f7b420e 100644
--- a/src/wasm.h
+++ b/src/wasm.h
@@ -58,36 +58,11 @@
#include "mixed_arena.h"
#include "pretty_printing.h"
#include "support/bits.h"
+#include "support/name.h"
#include "support/utilities.h"
namespace wasm {
-// We use a Name for all of the identifiers. These are IStrings, so they are
-// all interned - comparisons etc are just pointer comparisons, so there is no
-// perf loss. Having names everywhere makes using the AST much nicer (for
-// example, block names are strings and not offsets, which makes composition
-// - adding blocks, removing blocks - easy). One exception is local variables,
-// where we do use indices, as they are a large proportion of the AST,
-// perf matters a lot there, and compositionality is not a problem.
-// TODO: as an optimization, IString values < some threshold could be considered
-// numerical indices directly.
-
-struct Name : public cashew::IString {
- Name() : cashew::IString() {}
- Name(const char* str) : cashew::IString(str, false) {}
- Name(cashew::IString str) : cashew::IString(str) {}
- Name(const std::string& str) : cashew::IString(str.c_str(), false) {}
-
- friend std::ostream& operator<<(std::ostream& o, Name name) {
- assert(name.str);
- return o << '$' << name.str; // reference interpreter requires we prefix all names
- }
-
- static Name fromInt(size_t i) {
- return cashew::IString(std::to_string(i).c_str(), false);
- }
-};
-
// An index in a wasm module
typedef uint32_t Index;