Skip to content

Commit c558ec2

Browse files
committed
new import syntax in spec repo
1 parent 75ff2e3 commit c558ec2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+515
-506
lines changed

src/passes/Print.cpp

+13-23
Original file line numberDiff line numberDiff line change
@@ -514,11 +514,9 @@ struct PrintSExpression : public Visitor<PrintSExpression> {
514514
printMinorOpening(o, "unreachable") << ')';
515515
}
516516
// Module-level visitors
517-
void visitFunctionType(FunctionType *curr, bool full=false) {
518-
if (full) {
519-
printOpening(o, "type") << ' ';
520-
printName(curr->name) << " (func";
521-
}
517+
void visitFunctionType(FunctionType *curr, Name* internalName = nullptr) {
518+
o << "(func";
519+
if (internalName) o << ' ' << *internalName;
522520
if (curr->params.size() > 0) {
523521
o << maybeSpace;
524522
printMinorOpening(o, "param");
@@ -531,27 +529,17 @@ struct PrintSExpression : public Visitor<PrintSExpression> {
531529
o << maybeSpace;
532530
printMinorOpening(o, "result ") << printWasmType(curr->result) << ')';
533531
}
534-
if (full) {
535-
o << "))";
536-
}
532+
o << ")";
537533
}
538534
void visitImport(Import *curr) {
539535
printOpening(o, "import ");
540-
printName(curr->name) << ' ';
541-
switch (curr->kind) {
542-
case Export::Function: break;
543-
case Export::Table: o << "table "; break;
544-
case Export::Memory: o << "memory "; break;
545-
case Export::Global: o << "global "; break;
546-
default: WASM_UNREACHABLE();
547-
}
548536
printText(o, curr->module.str) << ' ';
549-
printText(o, curr->base.str);
537+
printText(o, curr->base.str) << ' ';
550538
switch (curr->kind) {
551-
case Export::Function: if (curr->functionType) visitFunctionType(curr->functionType); break;
552-
case Export::Table: break;
553-
case Export::Memory: break;
554-
case Export::Global: o << ' ' << printWasmType(curr->globalType); break;
539+
case Export::Function: if (curr->functionType) visitFunctionType(curr->functionType, &curr->name); break;
540+
case Export::Table: o << "(table " << curr->name << ")"; break;
541+
case Export::Memory: o << "(memory " << curr->name << ")"; break;
542+
case Export::Global: o << "(global " << curr->name << ' ' << printWasmType(curr->globalType) << ")"; break;
555543
default: WASM_UNREACHABLE();
556544
}
557545
o << ')';
@@ -666,8 +654,10 @@ struct PrintSExpression : public Visitor<PrintSExpression> {
666654
}
667655
for (auto& child : curr->functionTypes) {
668656
doIndent(o, indent);
669-
visitFunctionType(child.get(), true);
670-
o << maybeNewLine;
657+
printOpening(o, "type") << ' ';
658+
printName(child->name) << ' ';
659+
visitFunctionType(child.get());
660+
o << ")" << maybeNewLine;
671661
}
672662
for (auto& child : curr->imports) {
673663
doIndent(o, indent);

src/wasm-s-parser.h

+27-8
Original file line numberDiff line numberDiff line change
@@ -1429,33 +1429,52 @@ class SExpressionWasmBuilder {
14291429
void parseImport(Element& s) {
14301430
std::unique_ptr<Import> im = make_unique<Import>();
14311431
size_t i = 1;
1432+
bool newStyle = s.size() == 4 && s[3]->isList(); // (import "env" "STACKTOP" (global $stackTop i32))
1433+
if (newStyle) {
1434+
if ((*s[3])[0]->str() == FUNC) {
1435+
im->kind = Import::Function;
1436+
} else if ((*s[3])[0]->str() == MEMORY) {
1437+
im->kind = Import::Memory;
1438+
} else if ((*s[3])[0]->str() == TABLE) {
1439+
im->kind = Import::Table;
1440+
} else if ((*s[3])[0]->str() == GLOBAL) {
1441+
im->kind = Import::Global;
1442+
} else {
1443+
newStyle = false; // either (param..) or (result..)
1444+
}
1445+
}
14321446
if (s.size() > 3 && s[3]->isStr()) {
14331447
im->name = s[i++]->str();
1448+
} else if (newStyle) {
1449+
im->name = (*s[3])[1]->str();
14341450
} else {
14351451
im->name = Name::fromInt(importCounter);
14361452
}
14371453
importCounter++;
14381454
if (!s[i]->quoted()) {
14391455
if (s[i]->str() == MEMORY) {
14401456
im->kind = Import::Memory;
1441-
} else if (s[2]->str() == TABLE) {
1457+
} else if (s[i]->str() == TABLE) {
14421458
im->kind = Import::Table;
1443-
} else if (s[2]->str() == GLOBAL) {
1459+
} else if (s[i]->str() == GLOBAL) {
14441460
im->kind = Import::Global;
14451461
} else {
14461462
WASM_UNREACHABLE();
14471463
}
14481464
i++;
1449-
} else {
1465+
} else if (!newStyle) {
14501466
im->kind = Import::Function;
14511467
}
14521468
im->module = s[i++]->str();
14531469
if (!s[i]->isStr()) throw ParseException("no name for import");
14541470
im->base = s[i++]->str();
1471+
// parse internals
1472+
Element& inner = newStyle ? *s[3] : s;
1473+
Index j = newStyle ? 2 : i;
14551474
if (im->kind == Import::Function) {
14561475
std::unique_ptr<FunctionType> type = make_unique<FunctionType>();
1457-
if (s.size() > i) {
1458-
Element& params = *s[i];
1476+
if (inner.size() > j) {
1477+
Element& params = *inner[j];
14591478
IString id = params[0]->str();
14601479
if (id == PARAM) {
14611480
for (size_t i = 1; i < params.size(); i++) {
@@ -1470,15 +1489,15 @@ class SExpressionWasmBuilder {
14701489
} else {
14711490
throw ParseException("bad import element");
14721491
}
1473-
if (s.size() > i+1) {
1474-
Element& result = *s[i+1];
1492+
if (inner.size() > j+1) {
1493+
Element& result = *inner[j+1];
14751494
assert(result[0]->str() == RESULT);
14761495
type->result = stringToWasmType(result[1]->str());
14771496
}
14781497
}
14791498
im->functionType = ensureFunctionType(getSig(type.get()), &wasm);
14801499
} else if (im->kind == Import::Global) {
1481-
im->globalType = stringToWasmType(s[i]->str());
1500+
im->globalType = stringToWasmType(inner[j]->str());
14821501
}
14831502
wasm.addImport(im.release());
14841503
}

test/emcc_O2_hello_world.fromasm

+26-26
Original file line numberDiff line numberDiff line change
@@ -8,32 +8,32 @@
88
(type $FUNCSIG$i (func (result i32)))
99
(type $FUNCSIG$v (func))
1010
(type $FUNCSIG$vii (func (param i32 i32)))
11-
(import $STACKTOP global "env" "STACKTOP" i32)
12-
(import $STACK_MAX global "env" "STACK_MAX" i32)
13-
(import $tempDoublePtr global "env" "tempDoublePtr" i32)
14-
(import $ABORT global "env" "ABORT" i32)
15-
(import $nan global "global" "NaN" f64)
16-
(import $inf global "global" "Infinity" f64)
17-
(import $abort "env" "abort" (param i32))
18-
(import $_pthread_cleanup_pop "env" "_pthread_cleanup_pop" (param i32))
19-
(import $_pthread_self "env" "_pthread_self" (result i32))
20-
(import $_sysconf "env" "_sysconf" (param i32) (result i32))
21-
(import $___lock "env" "___lock" (param i32))
22-
(import $___syscall6 "env" "___syscall6" (param i32 i32) (result i32))
23-
(import $_abort "env" "_abort")
24-
(import $_sbrk "env" "_sbrk" (param i32) (result i32))
25-
(import $_time "env" "_time" (param i32) (result i32))
26-
(import $_pthread_cleanup_push "env" "_pthread_cleanup_push" (param i32 i32))
27-
(import $_emscripten_memcpy_big "env" "_emscripten_memcpy_big" (param i32 i32 i32) (result i32))
28-
(import $___syscall54 "env" "___syscall54" (param i32 i32) (result i32))
29-
(import $___unlock "env" "___unlock" (param i32))
30-
(import $___syscall140 "env" "___syscall140" (param i32 i32) (result i32))
31-
(import $___syscall146 "env" "___syscall146" (param i32 i32) (result i32))
32-
(import $i32u-div "asm2wasm" "i32u-div" (param i32 i32) (result i32))
33-
(import $memory memory "env" "memory")
34-
(import $table table "env" "table")
35-
(import $memoryBase global "env" "memoryBase" i32)
36-
(import $tableBase global "env" "tableBase" i32)
11+
(import "env" "STACKTOP" (global $STACKTOP i32))
12+
(import "env" "STACK_MAX" (global $STACK_MAX i32))
13+
(import "env" "tempDoublePtr" (global $tempDoublePtr i32))
14+
(import "env" "ABORT" (global $ABORT i32))
15+
(import "global" "NaN" (global $nan f64))
16+
(import "global" "Infinity" (global $inf f64))
17+
(import "env" "abort" (func $abort (param i32)))
18+
(import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32)))
19+
(import "env" "_pthread_self" (func $_pthread_self (result i32)))
20+
(import "env" "_sysconf" (func $_sysconf (param i32) (result i32)))
21+
(import "env" "___lock" (func $___lock (param i32)))
22+
(import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32)))
23+
(import "env" "_abort" (func $_abort))
24+
(import "env" "_sbrk" (func $_sbrk (param i32) (result i32)))
25+
(import "env" "_time" (func $_time (param i32) (result i32)))
26+
(import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32)))
27+
(import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32)))
28+
(import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32)))
29+
(import "env" "___unlock" (func $___unlock (param i32)))
30+
(import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32)))
31+
(import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32)))
32+
(import "asm2wasm" "i32u-div" (func $i32u-div (param i32 i32) (result i32)))
33+
(import "env" "memory" (memory $memory))
34+
(import "env" "table" (table $table))
35+
(import "env" "memoryBase" (global $memoryBase i32))
36+
(import "env" "tableBase" (global $tableBase i32))
3737
(export "_free" $_free)
3838
(export "_main" $_main)
3939
(export "_memset" $_memset)

test/emcc_O2_hello_world.fromasm.imprecise

+25-25
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,31 @@
77
(type $FUNCSIG$iii (func (param i32 i32) (result i32)))
88
(type $FUNCSIG$v (func))
99
(type $FUNCSIG$vii (func (param i32 i32)))
10-
(import $STACKTOP global "env" "STACKTOP" i32)
11-
(import $STACK_MAX global "env" "STACK_MAX" i32)
12-
(import $tempDoublePtr global "env" "tempDoublePtr" i32)
13-
(import $ABORT global "env" "ABORT" i32)
14-
(import $nan global "global" "NaN" f64)
15-
(import $inf global "global" "Infinity" f64)
16-
(import $abort "env" "abort" (param i32))
17-
(import $_pthread_cleanup_pop "env" "_pthread_cleanup_pop" (param i32))
18-
(import $_pthread_self "env" "_pthread_self" (result i32))
19-
(import $_sysconf "env" "_sysconf" (param i32) (result i32))
20-
(import $___lock "env" "___lock" (param i32))
21-
(import $___syscall6 "env" "___syscall6" (param i32 i32) (result i32))
22-
(import $_abort "env" "_abort")
23-
(import $_sbrk "env" "_sbrk" (param i32) (result i32))
24-
(import $_time "env" "_time" (param i32) (result i32))
25-
(import $_pthread_cleanup_push "env" "_pthread_cleanup_push" (param i32 i32))
26-
(import $_emscripten_memcpy_big "env" "_emscripten_memcpy_big" (param i32 i32 i32) (result i32))
27-
(import $___syscall54 "env" "___syscall54" (param i32 i32) (result i32))
28-
(import $___unlock "env" "___unlock" (param i32))
29-
(import $___syscall140 "env" "___syscall140" (param i32 i32) (result i32))
30-
(import $___syscall146 "env" "___syscall146" (param i32 i32) (result i32))
31-
(import $memory memory "env" "memory")
32-
(import $table table "env" "table")
33-
(import $memoryBase global "env" "memoryBase" i32)
34-
(import $tableBase global "env" "tableBase" i32)
10+
(import "env" "STACKTOP" (global $STACKTOP i32))
11+
(import "env" "STACK_MAX" (global $STACK_MAX i32))
12+
(import "env" "tempDoublePtr" (global $tempDoublePtr i32))
13+
(import "env" "ABORT" (global $ABORT i32))
14+
(import "global" "NaN" (global $nan f64))
15+
(import "global" "Infinity" (global $inf f64))
16+
(import "env" "abort" (func $abort (param i32)))
17+
(import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32)))
18+
(import "env" "_pthread_self" (func $_pthread_self (result i32)))
19+
(import "env" "_sysconf" (func $_sysconf (param i32) (result i32)))
20+
(import "env" "___lock" (func $___lock (param i32)))
21+
(import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32)))
22+
(import "env" "_abort" (func $_abort))
23+
(import "env" "_sbrk" (func $_sbrk (param i32) (result i32)))
24+
(import "env" "_time" (func $_time (param i32) (result i32)))
25+
(import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32)))
26+
(import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32)))
27+
(import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32)))
28+
(import "env" "___unlock" (func $___unlock (param i32)))
29+
(import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32)))
30+
(import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32)))
31+
(import "env" "memory" (memory $memory))
32+
(import "env" "table" (table $table))
33+
(import "env" "memoryBase" (global $memoryBase i32))
34+
(import "env" "tableBase" (global $tableBase i32))
3535
(export "_free" $_free)
3636
(export "_main" $_main)
3737
(export "_memset" $_memset)

test/emcc_O2_hello_world.fromasm.imprecise.no-opts

+25-25
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,31 @@
77
(type $FUNCSIG$iii (func (param i32 i32) (result i32)))
88
(type $FUNCSIG$v (func))
99
(type $FUNCSIG$vii (func (param i32 i32)))
10-
(import $STACKTOP global "env" "STACKTOP" i32)
11-
(import $STACK_MAX global "env" "STACK_MAX" i32)
12-
(import $tempDoublePtr global "env" "tempDoublePtr" i32)
13-
(import $ABORT global "env" "ABORT" i32)
14-
(import $nan global "global" "NaN" f64)
15-
(import $inf global "global" "Infinity" f64)
16-
(import $abort "env" "abort" (param i32))
17-
(import $_pthread_cleanup_pop "env" "_pthread_cleanup_pop" (param i32))
18-
(import $_pthread_self "env" "_pthread_self" (result i32))
19-
(import $_sysconf "env" "_sysconf" (param i32) (result i32))
20-
(import $___lock "env" "___lock" (param i32))
21-
(import $___syscall6 "env" "___syscall6" (param i32 i32) (result i32))
22-
(import $_abort "env" "_abort")
23-
(import $_sbrk "env" "_sbrk" (param i32) (result i32))
24-
(import $_time "env" "_time" (param i32) (result i32))
25-
(import $_pthread_cleanup_push "env" "_pthread_cleanup_push" (param i32 i32))
26-
(import $_emscripten_memcpy_big "env" "_emscripten_memcpy_big" (param i32 i32 i32) (result i32))
27-
(import $___syscall54 "env" "___syscall54" (param i32 i32) (result i32))
28-
(import $___unlock "env" "___unlock" (param i32))
29-
(import $___syscall140 "env" "___syscall140" (param i32 i32) (result i32))
30-
(import $___syscall146 "env" "___syscall146" (param i32 i32) (result i32))
31-
(import $memory memory "env" "memory")
32-
(import $table table "env" "table")
33-
(import $memoryBase global "env" "memoryBase" i32)
34-
(import $tableBase global "env" "tableBase" i32)
10+
(import "env" "STACKTOP" (global $STACKTOP i32))
11+
(import "env" "STACK_MAX" (global $STACK_MAX i32))
12+
(import "env" "tempDoublePtr" (global $tempDoublePtr i32))
13+
(import "env" "ABORT" (global $ABORT i32))
14+
(import "global" "NaN" (global $nan f64))
15+
(import "global" "Infinity" (global $inf f64))
16+
(import "env" "abort" (func $abort (param i32)))
17+
(import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32)))
18+
(import "env" "_pthread_self" (func $_pthread_self (result i32)))
19+
(import "env" "_sysconf" (func $_sysconf (param i32) (result i32)))
20+
(import "env" "___lock" (func $___lock (param i32)))
21+
(import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32)))
22+
(import "env" "_abort" (func $_abort))
23+
(import "env" "_sbrk" (func $_sbrk (param i32) (result i32)))
24+
(import "env" "_time" (func $_time (param i32) (result i32)))
25+
(import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32)))
26+
(import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32)))
27+
(import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32)))
28+
(import "env" "___unlock" (func $___unlock (param i32)))
29+
(import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32)))
30+
(import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32)))
31+
(import "env" "memory" (memory $memory))
32+
(import "env" "table" (table $table))
33+
(import "env" "memoryBase" (global $memoryBase i32))
34+
(import "env" "tableBase" (global $tableBase i32))
3535
(export "_free" $_free)
3636
(export "_main" $_main)
3737
(export "_memset" $_memset)

test/emcc_O2_hello_world.fromasm.no-opts

+26-26
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,32 @@
77
(type $FUNCSIG$i (func (result i32)))
88
(type $FUNCSIG$v (func))
99
(type $FUNCSIG$vii (func (param i32 i32)))
10-
(import $STACKTOP global "env" "STACKTOP" i32)
11-
(import $STACK_MAX global "env" "STACK_MAX" i32)
12-
(import $tempDoublePtr global "env" "tempDoublePtr" i32)
13-
(import $ABORT global "env" "ABORT" i32)
14-
(import $nan global "global" "NaN" f64)
15-
(import $inf global "global" "Infinity" f64)
16-
(import $abort "env" "abort" (param i32))
17-
(import $_pthread_cleanup_pop "env" "_pthread_cleanup_pop" (param i32))
18-
(import $_pthread_self "env" "_pthread_self" (result i32))
19-
(import $_sysconf "env" "_sysconf" (param i32) (result i32))
20-
(import $___lock "env" "___lock" (param i32))
21-
(import $___syscall6 "env" "___syscall6" (param i32 i32) (result i32))
22-
(import $_abort "env" "_abort")
23-
(import $_sbrk "env" "_sbrk" (param i32) (result i32))
24-
(import $_time "env" "_time" (param i32) (result i32))
25-
(import $_pthread_cleanup_push "env" "_pthread_cleanup_push" (param i32 i32))
26-
(import $_emscripten_memcpy_big "env" "_emscripten_memcpy_big" (param i32 i32 i32) (result i32))
27-
(import $___syscall54 "env" "___syscall54" (param i32 i32) (result i32))
28-
(import $___unlock "env" "___unlock" (param i32))
29-
(import $___syscall140 "env" "___syscall140" (param i32 i32) (result i32))
30-
(import $___syscall146 "env" "___syscall146" (param i32 i32) (result i32))
31-
(import $i32u-div "asm2wasm" "i32u-div" (param i32 i32) (result i32))
32-
(import $memory memory "env" "memory")
33-
(import $table table "env" "table")
34-
(import $memoryBase global "env" "memoryBase" i32)
35-
(import $tableBase global "env" "tableBase" i32)
10+
(import "env" "STACKTOP" (global $STACKTOP i32))
11+
(import "env" "STACK_MAX" (global $STACK_MAX i32))
12+
(import "env" "tempDoublePtr" (global $tempDoublePtr i32))
13+
(import "env" "ABORT" (global $ABORT i32))
14+
(import "global" "NaN" (global $nan f64))
15+
(import "global" "Infinity" (global $inf f64))
16+
(import "env" "abort" (func $abort (param i32)))
17+
(import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32)))
18+
(import "env" "_pthread_self" (func $_pthread_self (result i32)))
19+
(import "env" "_sysconf" (func $_sysconf (param i32) (result i32)))
20+
(import "env" "___lock" (func $___lock (param i32)))
21+
(import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32)))
22+
(import "env" "_abort" (func $_abort))
23+
(import "env" "_sbrk" (func $_sbrk (param i32) (result i32)))
24+
(import "env" "_time" (func $_time (param i32) (result i32)))
25+
(import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32)))
26+
(import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32)))
27+
(import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32)))
28+
(import "env" "___unlock" (func $___unlock (param i32)))
29+
(import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32)))
30+
(import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32)))
31+
(import "asm2wasm" "i32u-div" (func $i32u-div (param i32 i32) (result i32)))
32+
(import "env" "memory" (memory $memory))
33+
(import "env" "table" (table $table))
34+
(import "env" "memoryBase" (global $memoryBase i32))
35+
(import "env" "tableBase" (global $tableBase i32))
3636
(export "_free" $_free)
3737
(export "_main" $_main)
3838
(export "_memset" $_memset)

0 commit comments

Comments
 (0)