Skip to content

Commit 11b45e1

Browse files
committed
new export syntax in spec repo
1 parent c558ec2 commit 11b45e1

34 files changed

+307
-288
lines changed

src/passes/Print.cpp

+23-16
Original file line numberDiff line numberDiff line change
@@ -546,19 +546,21 @@ struct PrintSExpression : public Visitor<PrintSExpression> {
546546
}
547547
void visitExport(Export *curr) {
548548
printOpening(o, "export ");
549-
printText(o, curr->name.str) << ' ';
549+
printText(o, curr->name.str) << " (";
550550
switch (curr->kind) {
551-
case Export::Function: printName(curr->value); break;
552-
case Export::Table: o << "table"; break;
553-
case Export::Memory: o << "memory"; break;
554-
case Export::Global: o << "global "; printName(curr->value); break;
551+
case Export::Function: o << "func"; break;
552+
case Export::Table: o << "table"; break;
553+
case Export::Memory: o << "memory"; break;
554+
case Export::Global: o << "global"; break;
555555
default: WASM_UNREACHABLE();
556556
}
557-
o << ')';
557+
o << ' ';
558+
printName(curr->value) << "))";
558559
}
559560
void visitGlobal(Global *curr) {
560561
printOpening(o, "global ");
561-
printName(curr->name) << ' ' << printWasmType(curr->type) << ' ';
562+
printName(curr->name) << ' ';
563+
o << printWasmType(curr->type) << ' ';
562564
visit(curr->init);
563565
o << ')';
564566
}
@@ -598,7 +600,8 @@ struct PrintSExpression : public Visitor<PrintSExpression> {
598600
decIndent();
599601
}
600602
void visitTable(Table *curr) {
601-
printOpening(o, "table") << ' ' << curr->initial;
603+
printOpening(o, "table") << ' ';
604+
o << curr->initial;
602605
if (curr->max && curr->max != Table::kMaxSize) o << ' ' << curr->max;
603606
o << " anyfunc)\n";
604607
doIndent(o, indent);
@@ -612,15 +615,12 @@ struct PrintSExpression : public Visitor<PrintSExpression> {
612615
o << ')';
613616
}
614617
}
615-
void visitModule(Module *curr) {
616-
currModule = curr;
617-
printOpening(o, "module", true);
618-
incIndent();
619-
doIndent(o, indent);
620-
printOpening(o, "memory") << ' ' << curr->memory.initial;
621-
if (curr->memory.max && curr->memory.max != Memory::kMaxSize) o << ' ' << curr->memory.max;
618+
void visitMemory(Memory* curr) {
619+
printOpening(o, "memory") << ' ';
620+
o << curr->initial;
621+
if (curr->max && curr->max != Memory::kMaxSize) o << ' ' << curr->max;
622622
o << ")\n";
623-
for (auto segment : curr->memory.segments) {
623+
for (auto segment : curr->segments) {
624624
doIndent(o, indent);
625625
printOpening(o, "data ", true);
626626
visit(segment.offset);
@@ -647,6 +647,13 @@ struct PrintSExpression : public Visitor<PrintSExpression> {
647647
}
648648
o << "\")\n";
649649
}
650+
}
651+
void visitModule(Module *curr) {
652+
currModule = curr;
653+
printOpening(o, "module", true);
654+
incIndent();
655+
doIndent(o, indent);
656+
visitMemory(&curr->memory);
650657
if (curr->start.is()) {
651658
doIndent(o, indent);
652659
printOpening(o, "start") << ' ' << curr->start << ')';

src/wasm-s-parser.h

+6
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,12 @@ class SExpressionWasmBuilder {
305305
void preParseFunctionType(Element& s) {
306306
IString id = s[0]->str();
307307
if (id == TYPE) return parseType(s);
308+
/*
309+
if (id == EXPORT && s.size() == 3 && s[2]->isList() && (*s[2])[0]->str() == FUNC) {
310+
preParseFunctionType(*s[2]);
311+
return;
312+
}
313+
*/
308314
if (id != FUNC) return;
309315
size_t i = 1;
310316
Name name, exportName;

src/wasm.h

+10-4
Original file line numberDiff line numberDiff line change
@@ -1454,7 +1454,7 @@ class Export {
14541454
Global = 3,
14551455
};
14561456

1457-
Name name; // exported name
1457+
Name name; // exported name - note that this is the key, as the internal name is non-unique (can have multiple exports for an internal, also over kinds)
14581458
Name value; // internal name
14591459
Kind kind;
14601460
};
@@ -1474,10 +1474,13 @@ class Table {
14741474
}
14751475
};
14761476

1477+
Name name;
14771478
Address initial, max;
14781479
std::vector<Segment> segments;
14791480

1480-
Table() : initial(0), max(kMaxSize) {}
1481+
Table() : initial(0), max(kMaxSize) {
1482+
name = Name::fromInt(0);
1483+
}
14811484
};
14821485

14831486
class Memory {
@@ -1499,10 +1502,13 @@ class Memory {
14991502
}
15001503
};
15011504

1505+
Name name;
15021506
Address initial, max; // sizes are in pages
15031507
std::vector<Segment> segments;
15041508

1505-
Memory() : initial(0), max(kMaxSize) {}
1509+
Memory() : initial(0), max(kMaxSize) {
1510+
name = Name::fromInt(0);
1511+
}
15061512
};
15071513

15081514
class Global {
@@ -1531,7 +1537,7 @@ class Module {
15311537
// TODO: add a build option where Names are just indices, and then these methods are not needed
15321538
std::map<Name, FunctionType*> functionTypesMap;
15331539
std::map<Name, Import*> importsMap;
1534-
std::map<Name, Export*> exportsMap;
1540+
std::map<Name, Export*> exportsMap; // exports map is by the *exported* name, which is unique
15351541
std::map<Name, Function*> functionsMap;
15361542
std::map<Name, Global*> globalsMap;
15371543

test/emcc_O2_hello_world.fromasm

+18-18
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,24 @@
3434
(import "env" "table" (table $table))
3535
(import "env" "memoryBase" (global $memoryBase i32))
3636
(import "env" "tableBase" (global $tableBase i32))
37-
(export "_free" $_free)
38-
(export "_main" $_main)
39-
(export "_memset" $_memset)
40-
(export "_malloc" $_malloc)
41-
(export "_memcpy" $_memcpy)
42-
(export "_fflush" $_fflush)
43-
(export "___errno_location" $___errno_location)
44-
(export "runPostSets" $runPostSets)
45-
(export "stackAlloc" $stackAlloc)
46-
(export "stackSave" $stackSave)
47-
(export "stackRestore" $stackRestore)
48-
(export "establishStackSpace" $establishStackSpace)
49-
(export "setThrew" $setThrew)
50-
(export "setTempRet0" $setTempRet0)
51-
(export "getTempRet0" $getTempRet0)
52-
(export "dynCall_ii" $dynCall_ii)
53-
(export "dynCall_iiii" $dynCall_iiii)
54-
(export "dynCall_vi" $dynCall_vi)
37+
(export "_free" (func $_free))
38+
(export "_main" (func $_main))
39+
(export "_memset" (func $_memset))
40+
(export "_malloc" (func $_malloc))
41+
(export "_memcpy" (func $_memcpy))
42+
(export "_fflush" (func $_fflush))
43+
(export "___errno_location" (func $___errno_location))
44+
(export "runPostSets" (func $runPostSets))
45+
(export "stackAlloc" (func $stackAlloc))
46+
(export "stackSave" (func $stackSave))
47+
(export "stackRestore" (func $stackRestore))
48+
(export "establishStackSpace" (func $establishStackSpace))
49+
(export "setThrew" (func $setThrew))
50+
(export "setTempRet0" (func $setTempRet0))
51+
(export "getTempRet0" (func $getTempRet0))
52+
(export "dynCall_ii" (func $dynCall_ii))
53+
(export "dynCall_iiii" (func $dynCall_iiii))
54+
(export "dynCall_vi" (func $dynCall_vi))
5555
(global $__THREW__ i32 (i32.const 0))
5656
(global $threwValue i32 (i32.const 0))
5757
(global $setjmpId i32 (i32.const 0))

test/emcc_O2_hello_world.fromasm.imprecise

+18-18
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,24 @@
3232
(import "env" "table" (table $table))
3333
(import "env" "memoryBase" (global $memoryBase i32))
3434
(import "env" "tableBase" (global $tableBase i32))
35-
(export "_free" $_free)
36-
(export "_main" $_main)
37-
(export "_memset" $_memset)
38-
(export "_malloc" $_malloc)
39-
(export "_memcpy" $_memcpy)
40-
(export "_fflush" $_fflush)
41-
(export "___errno_location" $___errno_location)
42-
(export "runPostSets" $runPostSets)
43-
(export "stackAlloc" $stackAlloc)
44-
(export "stackSave" $stackSave)
45-
(export "stackRestore" $stackRestore)
46-
(export "establishStackSpace" $establishStackSpace)
47-
(export "setThrew" $setThrew)
48-
(export "setTempRet0" $setTempRet0)
49-
(export "getTempRet0" $getTempRet0)
50-
(export "dynCall_ii" $dynCall_ii)
51-
(export "dynCall_iiii" $dynCall_iiii)
52-
(export "dynCall_vi" $dynCall_vi)
35+
(export "_free" (func $_free))
36+
(export "_main" (func $_main))
37+
(export "_memset" (func $_memset))
38+
(export "_malloc" (func $_malloc))
39+
(export "_memcpy" (func $_memcpy))
40+
(export "_fflush" (func $_fflush))
41+
(export "___errno_location" (func $___errno_location))
42+
(export "runPostSets" (func $runPostSets))
43+
(export "stackAlloc" (func $stackAlloc))
44+
(export "stackSave" (func $stackSave))
45+
(export "stackRestore" (func $stackRestore))
46+
(export "establishStackSpace" (func $establishStackSpace))
47+
(export "setThrew" (func $setThrew))
48+
(export "setTempRet0" (func $setTempRet0))
49+
(export "getTempRet0" (func $getTempRet0))
50+
(export "dynCall_ii" (func $dynCall_ii))
51+
(export "dynCall_iiii" (func $dynCall_iiii))
52+
(export "dynCall_vi" (func $dynCall_vi))
5353
(global $__THREW__ i32 (i32.const 0))
5454
(global $threwValue i32 (i32.const 0))
5555
(global $setjmpId i32 (i32.const 0))

test/emcc_O2_hello_world.fromasm.imprecise.no-opts

+18-18
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,24 @@
3232
(import "env" "table" (table $table))
3333
(import "env" "memoryBase" (global $memoryBase i32))
3434
(import "env" "tableBase" (global $tableBase i32))
35-
(export "_free" $_free)
36-
(export "_main" $_main)
37-
(export "_memset" $_memset)
38-
(export "_malloc" $_malloc)
39-
(export "_memcpy" $_memcpy)
40-
(export "_fflush" $_fflush)
41-
(export "___errno_location" $___errno_location)
42-
(export "runPostSets" $runPostSets)
43-
(export "stackAlloc" $stackAlloc)
44-
(export "stackSave" $stackSave)
45-
(export "stackRestore" $stackRestore)
46-
(export "establishStackSpace" $establishStackSpace)
47-
(export "setThrew" $setThrew)
48-
(export "setTempRet0" $setTempRet0)
49-
(export "getTempRet0" $getTempRet0)
50-
(export "dynCall_ii" $dynCall_ii)
51-
(export "dynCall_iiii" $dynCall_iiii)
52-
(export "dynCall_vi" $dynCall_vi)
35+
(export "_free" (func $_free))
36+
(export "_main" (func $_main))
37+
(export "_memset" (func $_memset))
38+
(export "_malloc" (func $_malloc))
39+
(export "_memcpy" (func $_memcpy))
40+
(export "_fflush" (func $_fflush))
41+
(export "___errno_location" (func $___errno_location))
42+
(export "runPostSets" (func $runPostSets))
43+
(export "stackAlloc" (func $stackAlloc))
44+
(export "stackSave" (func $stackSave))
45+
(export "stackRestore" (func $stackRestore))
46+
(export "establishStackSpace" (func $establishStackSpace))
47+
(export "setThrew" (func $setThrew))
48+
(export "setTempRet0" (func $setTempRet0))
49+
(export "getTempRet0" (func $getTempRet0))
50+
(export "dynCall_ii" (func $dynCall_ii))
51+
(export "dynCall_iiii" (func $dynCall_iiii))
52+
(export "dynCall_vi" (func $dynCall_vi))
5353
(global $__THREW__ i32 (i32.const 0))
5454
(global $threwValue i32 (i32.const 0))
5555
(global $setjmpId i32 (i32.const 0))

test/emcc_O2_hello_world.fromasm.no-opts

+18-18
Original file line numberDiff line numberDiff line change
@@ -33,24 +33,24 @@
3333
(import "env" "table" (table $table))
3434
(import "env" "memoryBase" (global $memoryBase i32))
3535
(import "env" "tableBase" (global $tableBase i32))
36-
(export "_free" $_free)
37-
(export "_main" $_main)
38-
(export "_memset" $_memset)
39-
(export "_malloc" $_malloc)
40-
(export "_memcpy" $_memcpy)
41-
(export "_fflush" $_fflush)
42-
(export "___errno_location" $___errno_location)
43-
(export "runPostSets" $runPostSets)
44-
(export "stackAlloc" $stackAlloc)
45-
(export "stackSave" $stackSave)
46-
(export "stackRestore" $stackRestore)
47-
(export "establishStackSpace" $establishStackSpace)
48-
(export "setThrew" $setThrew)
49-
(export "setTempRet0" $setTempRet0)
50-
(export "getTempRet0" $getTempRet0)
51-
(export "dynCall_ii" $dynCall_ii)
52-
(export "dynCall_iiii" $dynCall_iiii)
53-
(export "dynCall_vi" $dynCall_vi)
36+
(export "_free" (func $_free))
37+
(export "_main" (func $_main))
38+
(export "_memset" (func $_memset))
39+
(export "_malloc" (func $_malloc))
40+
(export "_memcpy" (func $_memcpy))
41+
(export "_fflush" (func $_fflush))
42+
(export "___errno_location" (func $___errno_location))
43+
(export "runPostSets" (func $runPostSets))
44+
(export "stackAlloc" (func $stackAlloc))
45+
(export "stackSave" (func $stackSave))
46+
(export "stackRestore" (func $stackRestore))
47+
(export "establishStackSpace" (func $establishStackSpace))
48+
(export "setThrew" (func $setThrew))
49+
(export "setTempRet0" (func $setTempRet0))
50+
(export "getTempRet0" (func $getTempRet0))
51+
(export "dynCall_ii" (func $dynCall_ii))
52+
(export "dynCall_iiii" (func $dynCall_iiii))
53+
(export "dynCall_vi" (func $dynCall_vi))
5454
(global $__THREW__ i32 (i32.const 0))
5555
(global $threwValue i32 (i32.const 0))
5656
(global $setjmpId i32 (i32.const 0))

test/emcc_hello_world.fromasm

+23-23
Original file line numberDiff line numberDiff line change
@@ -43,29 +43,29 @@
4343
(import "env" "table" (table $table))
4444
(import "env" "memoryBase" (global $memoryBase i32))
4545
(import "env" "tableBase" (global $tableBase i32))
46-
(export "_i64Subtract" $_i64Subtract)
47-
(export "_free" $_free)
48-
(export "_main" $_main)
49-
(export "_i64Add" $_i64Add)
50-
(export "_memset" $_memset)
51-
(export "_malloc" $_malloc)
52-
(export "_memcpy" $_memcpy)
53-
(export "_bitshift64Lshr" $_bitshift64Lshr)
54-
(export "_fflush" $_fflush)
55-
(export "___errno_location" $___errno_location)
56-
(export "_bitshift64Shl" $_bitshift64Shl)
57-
(export "runPostSets" $runPostSets)
58-
(export "stackAlloc" $stackAlloc)
59-
(export "stackSave" $stackSave)
60-
(export "stackRestore" $stackRestore)
61-
(export "establishStackSpace" $establishStackSpace)
62-
(export "setThrew" $setThrew)
63-
(export "setTempRet0" $setTempRet0)
64-
(export "getTempRet0" $getTempRet0)
65-
(export "dynCall_ii" $dynCall_ii)
66-
(export "dynCall_iiii" $dynCall_iiii)
67-
(export "dynCall_vi" $dynCall_vi)
68-
(export "___udivmoddi4" $___udivmoddi4)
46+
(export "_i64Subtract" (func $_i64Subtract))
47+
(export "_free" (func $_free))
48+
(export "_main" (func $_main))
49+
(export "_i64Add" (func $_i64Add))
50+
(export "_memset" (func $_memset))
51+
(export "_malloc" (func $_malloc))
52+
(export "_memcpy" (func $_memcpy))
53+
(export "_bitshift64Lshr" (func $_bitshift64Lshr))
54+
(export "_fflush" (func $_fflush))
55+
(export "___errno_location" (func $___errno_location))
56+
(export "_bitshift64Shl" (func $_bitshift64Shl))
57+
(export "runPostSets" (func $runPostSets))
58+
(export "stackAlloc" (func $stackAlloc))
59+
(export "stackSave" (func $stackSave))
60+
(export "stackRestore" (func $stackRestore))
61+
(export "establishStackSpace" (func $establishStackSpace))
62+
(export "setThrew" (func $setThrew))
63+
(export "setTempRet0" (func $setTempRet0))
64+
(export "getTempRet0" (func $getTempRet0))
65+
(export "dynCall_ii" (func $dynCall_ii))
66+
(export "dynCall_iiii" (func $dynCall_iiii))
67+
(export "dynCall_vi" (func $dynCall_vi))
68+
(export "___udivmoddi4" (func $___udivmoddi4))
6969
(global $__THREW__ i32 (i32.const 0))
7070
(global $threwValue i32 (i32.const 0))
7171
(global $setjmpId i32 (i32.const 0))

0 commit comments

Comments
 (0)