Skip to content

Commit 5d3fcff

Browse files
authored
wasm2js: emit quoted properties for the exports, to support closure compiler (#2043)
1 parent 7c5a789 commit 5d3fcff

Some content is hidden

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

59 files changed

+1021
-1006
lines changed

src/emscripten-optimizer/simple_ast.h

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1318,9 +1318,18 @@ struct JSPrinter {
13181318
pretty ? emit(", ") : emit(',');
13191319
newline();
13201320
}
1321-
const char *str = args[i][0]->getCString();
1322-
const char *check = str;
13231321
bool needQuote = false;
1322+
const char *str;
1323+
if (args[i][0]->isArray()) {
1324+
assert(args[i][0][0] == STRING);
1325+
// A quoted string.
1326+
needQuote = true;
1327+
str = args[i][0][1]->getCString();
1328+
} else {
1329+
// Just a raw string, no quotes.
1330+
str = args[i][0]->getCString();
1331+
}
1332+
const char *check = str;
13241333
while (*check) {
13251334
if (!isalnum(*check) && *check != '_' && *check != '$') {
13261335
needQuote = true;
@@ -1644,6 +1653,12 @@ class ValueBuilder {
16441653
.push_back(value));
16451654
}
16461655

1656+
static void appendToObjectWithQuotes(Ref array, IString key, Ref value) {
1657+
assert(array[0] == OBJECT);
1658+
array[1]->push_back(&makeRawArray(2)->push_back(makeString(key))
1659+
.push_back(value));
1660+
}
1661+
16471662
static Ref makeSub(Ref obj, Ref index) {
16481663
return &makeRawArray(2)->push_back(makeRawString(SUB))
16491664
.push_back(obj)

src/wasm2js.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ void Wasm2JSBuilder::addExports(Ref ast, Module* wasm) {
531531
Ref exports = ValueBuilder::makeObject();
532532
for (auto& export_ : wasm->exports) {
533533
if (export_->kind == ExternalKind::Function) {
534-
ValueBuilder::appendToObject(
534+
ValueBuilder::appendToObjectWithQuotes(
535535
exports,
536536
fromName(export_->name, NameScope::Top),
537537
ValueBuilder::makeName(fromName(export_->value, NameScope::Top))
@@ -540,11 +540,11 @@ void Wasm2JSBuilder::addExports(Ref ast, Module* wasm) {
540540
if (export_->kind == ExternalKind::Memory) {
541541
Ref descs = ValueBuilder::makeObject();
542542
Ref growDesc = ValueBuilder::makeObject();
543-
ValueBuilder::appendToObject(
543+
ValueBuilder::appendToObjectWithQuotes(
544544
descs,
545545
IString("grow"),
546546
growDesc);
547-
ValueBuilder::appendToObject(
547+
ValueBuilder::appendToObjectWithQuotes(
548548
growDesc,
549549
IString("value"),
550550
ValueBuilder::makeName(WASM_GROW_MEMORY));
@@ -553,11 +553,11 @@ void Wasm2JSBuilder::addExports(Ref ast, Module* wasm) {
553553
bufferGetter[3]->push_back(ValueBuilder::makeReturn(
554554
ValueBuilder::makeName(BUFFER)
555555
));
556-
ValueBuilder::appendToObject(
556+
ValueBuilder::appendToObjectWithQuotes(
557557
bufferDesc,
558558
IString("get"),
559559
bufferGetter);
560-
ValueBuilder::appendToObject(
560+
ValueBuilder::appendToObjectWithQuotes(
561561
descs,
562562
IString("buffer"),
563563
bufferDesc);
@@ -567,7 +567,7 @@ void Wasm2JSBuilder::addExports(Ref ast, Module* wasm) {
567567
ValueBuilder::appendToCall(
568568
memory,
569569
descs);
570-
ValueBuilder::appendToObject(
570+
ValueBuilder::appendToObjectWithQuotes(
571571
exports,
572572
fromName(export_->name, NameScope::Top),
573573
memory);

test/wasm2js.asserts.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ function asmFunc0(global, env, buffer) {
7070

7171
var FUNCTION_TABLE = [];
7272
return {
73-
empty: $0,
74-
add: $1,
75-
div_s: $2
73+
"empty": $0,
74+
"add": $1,
75+
"div_s": $2
7676
};
7777
}
7878

test/wasm2js.traps.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ function asmFunc0(global, env, buffer) {
7070

7171
var FUNCTION_TABLE = [];
7272
return {
73-
empty: $0,
74-
add: $1,
75-
div_s: $2
73+
"empty": $0,
74+
"add": $1,
75+
"div_s": $2
7676
};
7777
}
7878

test/wasm2js/address.2asm.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ function asmFunc(global, env, buffer) {
7575
}
7676

7777
return {
78-
good: $0,
79-
bad: $1
78+
"good": $0,
79+
"bad": $1
8080
};
8181
}
8282

test/wasm2js/block.2asm.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -172,20 +172,20 @@ function asmFunc(global, env, buffer) {
172172

173173
var FUNCTION_TABLE = [];
174174
return {
175-
empty: $1,
176-
singular: $2,
177-
multi: $3,
178-
nested: $4,
179-
deep: $5,
180-
as_unary_operand: $6,
181-
as_binary_operand: $7,
182-
as_test_operand: $8,
183-
as_compare_operand: $9,
184-
break_bare: $10,
185-
break_value: $11,
186-
break_repeated: $12,
187-
break_inner: $13,
188-
effects: $14
175+
"empty": $1,
176+
"singular": $2,
177+
"multi": $3,
178+
"nested": $4,
179+
"deep": $5,
180+
"as_unary_operand": $6,
181+
"as_binary_operand": $7,
182+
"as_test_operand": $8,
183+
"as_compare_operand": $9,
184+
"break_bare": $10,
185+
"break_value": $11,
186+
"break_repeated": $12,
187+
"break_inner": $13,
188+
"effects": $14
189189
};
190190
}
191191

test/wasm2js/br.2asm.js

Lines changed: 57 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -669,63 +669,63 @@ function asmFunc(global, env, buffer) {
669669

670670
var FUNCTION_TABLE = [];
671671
return {
672-
type_i32: $1,
673-
type_i64: $2,
674-
type_f32: $3,
675-
type_f64: $4,
676-
type_i32_value: $5,
677-
type_i64_value: legalstub$6,
678-
type_f32_value: legalstub$7,
679-
type_f64_value: $8,
680-
as_block_first: $9,
681-
as_block_mid: $10,
682-
as_block_last: $11,
683-
as_block_value: $12,
684-
as_loop_first: $13,
685-
as_loop_mid: $14,
686-
as_loop_last: $15,
687-
as_br_value: $16,
688-
as_br_if_cond: $17,
689-
as_br_if_value: $18,
690-
as_br_if_value_cond: $19,
691-
as_br_table_index: $20,
692-
as_br_table_value: $21,
693-
as_br_table_value_index: $22,
694-
as_return_value: legalstub$23,
695-
as_if_cond: $24,
696-
as_if_then: $25,
697-
as_if_else: $26,
698-
as_select_first: $27,
699-
as_select_second: $28,
700-
as_select_cond: $29,
701-
as_call_first: $31,
702-
as_call_mid: $32,
703-
as_call_last: $33,
704-
as_call_indirect_func: $34,
705-
as_call_indirect_first: $35,
706-
as_call_indirect_mid: $36,
707-
as_call_indirect_last: $37,
708-
as_local_set_value: $38,
709-
as_load_address: legalstub$39,
710-
as_loadN_address: legalstub$40,
711-
as_store_address: $41,
712-
as_store_value: $42,
713-
as_storeN_address: $43,
714-
as_storeN_value: $44,
715-
as_unary_operand: legalstub$45,
716-
as_binary_left: $46,
717-
as_binary_right: legalstub$47,
718-
as_test_operand: $48,
719-
as_compare_left: $49,
720-
as_compare_right: $50,
721-
as_convert_operand: $51,
722-
as_grow_memory_size: $52,
723-
nested_block_value: $53,
724-
nested_br_value: $54,
725-
nested_br_if_value: $55,
726-
nested_br_if_value_cond: $56,
727-
nested_br_table_value: $57,
728-
nested_br_table_value_index: $58
672+
"type_i32": $1,
673+
"type_i64": $2,
674+
"type_f32": $3,
675+
"type_f64": $4,
676+
"type_i32_value": $5,
677+
"type_i64_value": legalstub$6,
678+
"type_f32_value": legalstub$7,
679+
"type_f64_value": $8,
680+
"as_block_first": $9,
681+
"as_block_mid": $10,
682+
"as_block_last": $11,
683+
"as_block_value": $12,
684+
"as_loop_first": $13,
685+
"as_loop_mid": $14,
686+
"as_loop_last": $15,
687+
"as_br_value": $16,
688+
"as_br_if_cond": $17,
689+
"as_br_if_value": $18,
690+
"as_br_if_value_cond": $19,
691+
"as_br_table_index": $20,
692+
"as_br_table_value": $21,
693+
"as_br_table_value_index": $22,
694+
"as_return_value": legalstub$23,
695+
"as_if_cond": $24,
696+
"as_if_then": $25,
697+
"as_if_else": $26,
698+
"as_select_first": $27,
699+
"as_select_second": $28,
700+
"as_select_cond": $29,
701+
"as_call_first": $31,
702+
"as_call_mid": $32,
703+
"as_call_last": $33,
704+
"as_call_indirect_func": $34,
705+
"as_call_indirect_first": $35,
706+
"as_call_indirect_mid": $36,
707+
"as_call_indirect_last": $37,
708+
"as_local_set_value": $38,
709+
"as_load_address": legalstub$39,
710+
"as_loadN_address": legalstub$40,
711+
"as_store_address": $41,
712+
"as_store_value": $42,
713+
"as_storeN_address": $43,
714+
"as_storeN_value": $44,
715+
"as_unary_operand": legalstub$45,
716+
"as_binary_left": $46,
717+
"as_binary_right": legalstub$47,
718+
"as_test_operand": $48,
719+
"as_compare_left": $49,
720+
"as_compare_right": $50,
721+
"as_convert_operand": $51,
722+
"as_grow_memory_size": $52,
723+
"nested_block_value": $53,
724+
"nested_br_value": $54,
725+
"nested_br_if_value": $55,
726+
"nested_br_if_value_cond": $56,
727+
"nested_br_table_value": $57,
728+
"nested_br_table_value_index": $58
729729
};
730730
}
731731

test/wasm2js/br_if.2asm.js

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -258,23 +258,23 @@ function asmFunc(global, env, buffer) {
258258

259259
var FUNCTION_TABLE = [];
260260
return {
261-
as_block_first: $1,
262-
as_block_mid: $2,
263-
as_block_last: $3,
264-
as_block_first_value: $4,
265-
as_block_mid_value: $5,
266-
as_block_last_value: $6,
267-
as_loop_first: $7,
268-
as_loop_mid: $8,
269-
as_loop_last: $9,
270-
as_if_then: $10,
271-
as_if_else: $11,
272-
nested_block_value: $12,
273-
nested_br_value: $13,
274-
nested_br_if_value: $14,
275-
nested_br_if_value_cond: $15,
276-
nested_br_table_value: $16,
277-
nested_br_table_value_index: $17
261+
"as_block_first": $1,
262+
"as_block_mid": $2,
263+
"as_block_last": $3,
264+
"as_block_first_value": $4,
265+
"as_block_mid_value": $5,
266+
"as_block_last_value": $6,
267+
"as_loop_first": $7,
268+
"as_loop_mid": $8,
269+
"as_loop_last": $9,
270+
"as_if_then": $10,
271+
"as_if_else": $11,
272+
"nested_block_value": $12,
273+
"nested_br_value": $13,
274+
"nested_br_if_value": $14,
275+
"nested_br_if_value_cond": $15,
276+
"nested_br_table_value": $16,
277+
"nested_br_table_value_index": $17
278278
};
279279
}
280280

0 commit comments

Comments
 (0)