goscript 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -5
- package/compiler/compile_stmt.go +13 -20
- package/dist/compliance/tests/for_loop_condition_only/for_loop_condition_only.gs.d.ts +1 -0
- package/dist/compliance/tests/for_loop_condition_only/for_loop_condition_only.gs.js +11 -0
- package/dist/compliance/tests/for_loop_condition_only/for_loop_condition_only.gs.js.map +1 -0
- package/dist/compliance/tests/select_receive_on_closed_channel_no_default/select_receive_on_closed_channel_no_default.gs.js +16 -16
- package/dist/compliance/tests/select_receive_on_closed_channel_no_default/select_receive_on_closed_channel_no_default.gs.js.map +1 -1
- package/dist/compliance/tests/select_send_on_full_buffered_channel_with_default/select_send_on_full_buffered_channel_with_default.gs.js +13 -13
- package/dist/compliance/tests/select_send_on_full_buffered_channel_with_default/select_send_on_full_buffered_channel_with_default.gs.js.map +1 -1
- package/dist/compliance/tests/select_statement/select_statement.gs.js +119 -119
- package/dist/compliance/tests/select_statement/select_statement.gs.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -463,11 +463,19 @@ Code is compiled with `GOARCH=js` and uses a 32-bit environment similar to wasm.
|
|
|
463
463
|
All Go import paths are prefixed with `@go/` and can be imported in TypeScript:
|
|
464
464
|
|
|
465
465
|
```typescript
|
|
466
|
-
import {
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
466
|
+
import { MyAsyncFunction, MyStruct } from '@go/github.com/myorg/mypackage';
|
|
467
|
+
|
|
468
|
+
// Example of importing and using a compiled Go async function
|
|
469
|
+
async function runGoCode() {
|
|
470
|
+
// Call an async function compiled from Go
|
|
471
|
+
const result = await MyAsyncFunction("input data");
|
|
472
|
+
console.log("Result from Go async function:", result);
|
|
473
|
+
|
|
474
|
+
// You can still use synchronous types and functions
|
|
475
|
+
let myThing = new MyStruct();
|
|
476
|
+
myThing.GetMyString();
|
|
477
|
+
runGoCode();
|
|
478
|
+
}
|
|
471
479
|
```
|
|
472
480
|
|
|
473
481
|
## License
|
package/compiler/compile_stmt.go
CHANGED
|
@@ -136,25 +136,22 @@ func (c *GoToTSCompiler) WriteStmtSelect(exp *ast.SelectStmt) error {
|
|
|
136
136
|
// This is our implementation of the select statement, which will use Promise.race
|
|
137
137
|
// to achieve the same semantics as Go's select statement.
|
|
138
138
|
|
|
139
|
-
// Create an array to hold all the select cases
|
|
140
|
-
tempArrayName := c.newTempVar()
|
|
141
|
-
c.tsw.WriteLiterally("const ")
|
|
142
|
-
c.tsw.WriteLiterally(tempArrayName)
|
|
143
|
-
c.tsw.WriteLiterally(": goscript.SelectCase<any>[] = []") // Array of SelectCase objects
|
|
144
|
-
c.tsw.WriteLine("")
|
|
145
|
-
|
|
146
139
|
// Variable to track whether we have a default case
|
|
147
140
|
hasDefault := false
|
|
148
141
|
|
|
149
|
-
//
|
|
142
|
+
// Start the selectStatement call and the array literal
|
|
143
|
+
c.tsw.WriteLiterally("await goscript.selectStatement(")
|
|
144
|
+
c.tsw.WriteLine("[") // Put bracket on new line
|
|
145
|
+
c.tsw.Indent(1)
|
|
146
|
+
|
|
147
|
+
// For each case clause, generate a SelectCase object directly into the array literal
|
|
150
148
|
for i, stmt := range exp.Body.List {
|
|
151
149
|
if commClause, ok := stmt.(*ast.CommClause); ok {
|
|
152
150
|
if commClause.Comm == nil {
|
|
153
151
|
// This is a default case
|
|
154
152
|
hasDefault = true
|
|
155
153
|
// Add a SelectCase object for the default case with a special ID
|
|
156
|
-
c.tsw.WriteLiterally(
|
|
157
|
-
c.tsw.WriteLiterally(".push({")
|
|
154
|
+
c.tsw.WriteLiterally("{") // Start object literal
|
|
158
155
|
c.tsw.Indent(1)
|
|
159
156
|
c.tsw.WriteLine("")
|
|
160
157
|
c.tsw.WriteLiterally("id: -1,") // Special ID for default case
|
|
@@ -175,7 +172,7 @@ func (c *GoToTSCompiler) WriteStmtSelect(exp *ast.SelectStmt) error {
|
|
|
175
172
|
c.tsw.Indent(-1)
|
|
176
173
|
c.tsw.WriteLine("}") // Close onSelected handler
|
|
177
174
|
c.tsw.Indent(-1)
|
|
178
|
-
c.tsw.
|
|
175
|
+
c.tsw.WriteLiterally("},") // Close SelectCase object and add comma
|
|
179
176
|
c.tsw.WriteLine("")
|
|
180
177
|
|
|
181
178
|
continue
|
|
@@ -185,8 +182,7 @@ func (c *GoToTSCompiler) WriteStmtSelect(exp *ast.SelectStmt) error {
|
|
|
185
182
|
caseID := i
|
|
186
183
|
|
|
187
184
|
// Start writing the SelectCase object
|
|
188
|
-
c.tsw.WriteLiterally(
|
|
189
|
-
c.tsw.WriteLiterally(".push({")
|
|
185
|
+
c.tsw.WriteLiterally("{") // Start object literal
|
|
190
186
|
c.tsw.Indent(1)
|
|
191
187
|
c.tsw.WriteLine("")
|
|
192
188
|
c.tsw.WriteLiterally(fmt.Sprintf("id: %d,", caseID))
|
|
@@ -297,7 +293,7 @@ func (c *GoToTSCompiler) WriteStmtSelect(exp *ast.SelectStmt) error {
|
|
|
297
293
|
c.tsw.Indent(-1)
|
|
298
294
|
c.tsw.WriteLine("}") // Close onSelected handler
|
|
299
295
|
c.tsw.Indent(-1)
|
|
300
|
-
c.tsw.
|
|
296
|
+
c.tsw.WriteLiterally("},") // Close SelectCase object and add comma
|
|
301
297
|
c.tsw.WriteLine("")
|
|
302
298
|
|
|
303
299
|
} else {
|
|
@@ -305,12 +301,9 @@ func (c *GoToTSCompiler) WriteStmtSelect(exp *ast.SelectStmt) error {
|
|
|
305
301
|
}
|
|
306
302
|
}
|
|
307
303
|
|
|
308
|
-
//
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
c.tsw.WriteLiterally("await goscript.selectStatement(")
|
|
312
|
-
c.tsw.WriteLiterally(tempArrayName)
|
|
313
|
-
c.tsw.WriteLiterally(", ")
|
|
304
|
+
// Close the array literal and the selectStatement call
|
|
305
|
+
c.tsw.Indent(-1)
|
|
306
|
+
c.tsw.WriteLiterally("], ")
|
|
314
307
|
c.tsw.WriteLiterally(fmt.Sprintf("%t", hasDefault))
|
|
315
308
|
c.tsw.WriteLiterally(")")
|
|
316
309
|
c.tsw.WriteLine("")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function main(): Promise<void>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Generated file based on for_loop_condition_only.go
|
|
2
|
+
// Updated when compliance tests are re-run, DO NOT EDIT!
|
|
3
|
+
export async function main() {
|
|
4
|
+
let i = 0;
|
|
5
|
+
for (; i < 3;) {
|
|
6
|
+
console.log("Current value:", i);
|
|
7
|
+
i = i + 1;
|
|
8
|
+
}
|
|
9
|
+
console.log("Loop finished");
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=for_loop_condition_only.gs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"for_loop_condition_only.gs.js","sourceRoot":"","sources":["../../../../compliance/tests/for_loop_condition_only/for_loop_condition_only.gs.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,yDAAyD;AAIzD,MAAM,CAAC,KAAK,UAAU,IAAI;IACzB,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,CAAC,GAAG,CAAC,GAAI,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAA;QAChC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACV,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;AAC7B,CAAC"}
|
|
@@ -6,22 +6,22 @@ export async function main() {
|
|
|
6
6
|
ch.close();
|
|
7
7
|
// Should not be reached
|
|
8
8
|
// Should be reached
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
9
|
+
await goscript.selectStatement([
|
|
10
|
+
{
|
|
11
|
+
id: 0,
|
|
12
|
+
isSend: false,
|
|
13
|
+
channel: ch,
|
|
14
|
+
onSelected: async (result) => {
|
|
15
|
+
const val = result.value;
|
|
16
|
+
const ok = result.ok;
|
|
17
|
+
if (ok) {
|
|
18
|
+
console.log("Received value with ok==true:", val); // Should not be reached
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
console.log("Received zero value with ok==false:", val); // Should be reached
|
|
22
|
+
}
|
|
19
23
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}),
|
|
25
|
-
await goscript.selectStatement(_tempVar1, false);
|
|
24
|
+
},
|
|
25
|
+
], false);
|
|
26
26
|
}
|
|
27
27
|
//# sourceMappingURL=select_receive_on_closed_channel_no_default.gs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select_receive_on_closed_channel_no_default.gs.js","sourceRoot":"","sources":["../../../../compliance/tests/select_receive_on_closed_channel_no_default/select_receive_on_closed_channel_no_default.gs.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,yDAAyD;AAEzD,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,IAAI;IACzB,IAAI,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAS,CAAC,EAAE,CAAC,CAAC,CAAA,CAAC,aAAa;IACzD,EAAE,CAAC,KAAK,EAAE,CAAA;IAEV,wBAAwB;IAExB,oBAAoB;IACpB,MAAM,
|
|
1
|
+
{"version":3,"file":"select_receive_on_closed_channel_no_default.gs.js","sourceRoot":"","sources":["../../../../compliance/tests/select_receive_on_closed_channel_no_default/select_receive_on_closed_channel_no_default.gs.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,yDAAyD;AAEzD,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,IAAI;IACzB,IAAI,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAS,CAAC,EAAE,CAAC,CAAC,CAAA,CAAC,aAAa;IACzD,EAAE,CAAC,KAAK,EAAE,CAAA;IAEV,wBAAwB;IAExB,oBAAoB;IACpB,MAAM,QAAQ,CAAC,eAAe,CAAC;QAC9B;YACC,EAAE,EAAE,CAAC;YACL,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAA;gBACxB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAA;gBACpB,IAAI,EAAE,EAAE,CAAC;oBACR,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAA,CAAC,wBAAwB;gBAC3E,CAAC;qBAAM,CAAC;oBACP,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAA,CAAC,oBAAoB;gBAC7E,CAAC;YACF,CAAC;SACD;KACD,EAAE,KAAK,CAAC,CAAA;AACV,CAAC"}
|
|
@@ -6,24 +6,24 @@ export async function main() {
|
|
|
6
6
|
await ch.send(1);
|
|
7
7
|
// Should not be reached
|
|
8
8
|
// Should be reached
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
9
|
+
await goscript.selectStatement([
|
|
10
|
+
{
|
|
11
|
+
id: 0,
|
|
12
|
+
isSend: true,
|
|
13
|
+
channel: ch,
|
|
14
|
+
value: 2,
|
|
15
|
+
onSelected: async (result) => {
|
|
16
|
+
console.log("Sent value");
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
20
|
id: -1,
|
|
21
21
|
isSend: false,
|
|
22
22
|
channel: null,
|
|
23
23
|
onSelected: async (result) => {
|
|
24
24
|
console.log("Default case hit");
|
|
25
25
|
}
|
|
26
|
-
}
|
|
27
|
-
|
|
26
|
+
},
|
|
27
|
+
], true);
|
|
28
28
|
}
|
|
29
29
|
//# sourceMappingURL=select_send_on_full_buffered_channel_with_default.gs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select_send_on_full_buffered_channel_with_default.gs.js","sourceRoot":"","sources":["../../../../compliance/tests/select_send_on_full_buffered_channel_with_default/select_send_on_full_buffered_channel_with_default.gs.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,yDAAyD;AAEzD,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,IAAI;IACzB,IAAI,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAS,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3C,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEhB,wBAAwB;IAExB,oBAAoB;IACpB,MAAM,
|
|
1
|
+
{"version":3,"file":"select_send_on_full_buffered_channel_with_default.gs.js","sourceRoot":"","sources":["../../../../compliance/tests/select_send_on_full_buffered_channel_with_default/select_send_on_full_buffered_channel_with_default.gs.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,yDAAyD;AAEzD,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,IAAI;IACzB,IAAI,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAS,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3C,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEhB,wBAAwB;IAExB,oBAAoB;IACpB,MAAM,QAAQ,CAAC,eAAe,CAAC;QAC9B;YACC,EAAE,EAAE,CAAC;YACL,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,CAAC;YACR,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;YAC1B,CAAC;SACD;QACD;YACC,EAAE,EAAE,CAAC,CAAC;YACN,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;YAChC,CAAC;SACD;KACD,EAAE,IAAI,CAAC,CAAA;AACT,CAAC"}
|
|
@@ -6,161 +6,161 @@ export async function main() {
|
|
|
6
6
|
// Create a buffered channel so sends don't block
|
|
7
7
|
let ch1 = goscript.makeChannel(1, "");
|
|
8
8
|
// First test: empty channel, should hit default
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
9
|
+
await goscript.selectStatement([
|
|
10
|
+
{
|
|
11
|
+
id: 0,
|
|
12
|
+
isSend: false,
|
|
13
|
+
channel: ch1,
|
|
14
|
+
onSelected: async (result) => {
|
|
15
|
+
const msg = result.value;
|
|
16
|
+
console.log("TEST1: Received unexpected value:", msg);
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
20
|
id: -1,
|
|
21
21
|
isSend: false,
|
|
22
22
|
channel: null,
|
|
23
23
|
onSelected: async (result) => {
|
|
24
24
|
console.log("TEST1: Default case hit correctly");
|
|
25
25
|
}
|
|
26
|
-
}
|
|
27
|
-
|
|
26
|
+
},
|
|
27
|
+
], true);
|
|
28
28
|
// Now put something in the channel
|
|
29
29
|
await ch1.send("hello");
|
|
30
30
|
// Second test: should read from channel
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
31
|
+
await goscript.selectStatement([
|
|
32
|
+
{
|
|
33
|
+
id: 0,
|
|
34
|
+
isSend: false,
|
|
35
|
+
channel: ch1,
|
|
36
|
+
onSelected: async (result) => {
|
|
37
|
+
const msg = result.value;
|
|
38
|
+
console.log("TEST2: Received expected value:", msg);
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
42
|
id: -1,
|
|
43
43
|
isSend: false,
|
|
44
44
|
channel: null,
|
|
45
45
|
onSelected: async (result) => {
|
|
46
46
|
console.log("TEST2: Default case hit unexpectedly");
|
|
47
47
|
}
|
|
48
|
-
}
|
|
49
|
-
|
|
48
|
+
},
|
|
49
|
+
], true);
|
|
50
50
|
// Test 3: Select with channel closing and ok value
|
|
51
51
|
let ch2 = goscript.makeChannel(1, 0);
|
|
52
52
|
await ch2.send(42);
|
|
53
53
|
ch2.close();
|
|
54
54
|
// First receive gets the buffered value
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
55
|
+
await goscript.selectStatement([
|
|
56
|
+
{
|
|
57
|
+
id: 0,
|
|
58
|
+
isSend: false,
|
|
59
|
+
channel: ch2,
|
|
60
|
+
onSelected: async (result) => {
|
|
61
|
+
const val = result.value;
|
|
62
|
+
const ok = result.ok;
|
|
63
|
+
if (ok) {
|
|
64
|
+
console.log("TEST3: Received buffered value with ok==true:", val);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.log("TEST3: Unexpected ok==false");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
72
|
id: -1,
|
|
73
73
|
isSend: false,
|
|
74
74
|
channel: null,
|
|
75
75
|
onSelected: async (result) => {
|
|
76
76
|
console.log("TEST3: Default hit unexpectedly");
|
|
77
77
|
}
|
|
78
|
-
}
|
|
79
|
-
|
|
78
|
+
},
|
|
79
|
+
], true);
|
|
80
80
|
// Second receive gets the zero value with ok==false
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
81
|
+
await goscript.selectStatement([
|
|
82
|
+
{
|
|
83
|
+
id: 0,
|
|
84
|
+
isSend: false,
|
|
85
|
+
channel: ch2,
|
|
86
|
+
onSelected: async (result) => {
|
|
87
|
+
const val = result.value;
|
|
88
|
+
const ok = result.ok;
|
|
89
|
+
if (ok) {
|
|
90
|
+
console.log("TEST4: Unexpected ok==true:", val);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
console.log("TEST4: Received zero value with ok==false:", val);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
98
|
id: -1,
|
|
99
99
|
isSend: false,
|
|
100
100
|
channel: null,
|
|
101
101
|
onSelected: async (result) => {
|
|
102
102
|
console.log("TEST4: Default hit unexpectedly");
|
|
103
103
|
}
|
|
104
|
-
}
|
|
105
|
-
|
|
104
|
+
},
|
|
105
|
+
], true);
|
|
106
106
|
// Test 5: Send operations
|
|
107
107
|
let ch3 = goscript.makeChannel(1, 0);
|
|
108
108
|
// First send should succeed (buffer not full)
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
109
|
+
await goscript.selectStatement([
|
|
110
|
+
{
|
|
111
|
+
id: 0,
|
|
112
|
+
isSend: true,
|
|
113
|
+
channel: ch3,
|
|
114
|
+
value: 5,
|
|
115
|
+
onSelected: async (result) => {
|
|
116
|
+
console.log("TEST5: Sent value successfully");
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
120
|
id: -1,
|
|
121
121
|
isSend: false,
|
|
122
122
|
channel: null,
|
|
123
123
|
onSelected: async (result) => {
|
|
124
124
|
console.log("TEST5: Default hit unexpectedly");
|
|
125
125
|
}
|
|
126
|
-
}
|
|
127
|
-
|
|
126
|
+
},
|
|
127
|
+
], true);
|
|
128
128
|
// Second send should hit default (buffer full)
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
129
|
+
await goscript.selectStatement([
|
|
130
|
+
{
|
|
131
|
+
id: 0,
|
|
132
|
+
isSend: true,
|
|
133
|
+
channel: ch3,
|
|
134
|
+
value: 10,
|
|
135
|
+
onSelected: async (result) => {
|
|
136
|
+
console.log("TEST6: Sent unexpectedly");
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
140
|
id: -1,
|
|
141
141
|
isSend: false,
|
|
142
142
|
channel: null,
|
|
143
143
|
onSelected: async (result) => {
|
|
144
144
|
console.log("TEST6: Default hit correctly (channel full)");
|
|
145
145
|
}
|
|
146
|
-
}
|
|
147
|
-
|
|
146
|
+
},
|
|
147
|
+
], true);
|
|
148
148
|
// Test 7: Multiple channel select (with known values)
|
|
149
149
|
let ch4 = goscript.makeChannel(1, "");
|
|
150
150
|
let ch5 = goscript.makeChannel(1, "");
|
|
151
151
|
await ch4.send("from ch4");
|
|
152
152
|
// Should select ch4 because it has data, ch5 is empty
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
153
|
+
await goscript.selectStatement([
|
|
154
|
+
{
|
|
155
|
+
id: 0,
|
|
156
|
+
isSend: false,
|
|
157
|
+
channel: ch4,
|
|
158
|
+
onSelected: async (result) => {
|
|
159
|
+
const msg = result.value;
|
|
160
|
+
console.log("TEST7: Selected ch4 correctly:", msg);
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
164
|
id: 1,
|
|
165
165
|
isSend: false,
|
|
166
166
|
channel: ch5,
|
|
@@ -168,22 +168,22 @@ export async function main() {
|
|
|
168
168
|
const msg = result.value;
|
|
169
169
|
console.log("TEST7: Selected ch5 unexpectedly:", msg);
|
|
170
170
|
}
|
|
171
|
-
}
|
|
172
|
-
|
|
171
|
+
},
|
|
172
|
+
], false);
|
|
173
173
|
// Now ch4 is empty and ch5 is empty
|
|
174
174
|
await ch5.send("from ch5");
|
|
175
175
|
// Should select ch5 because it has data, ch4 is empty
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
176
|
+
await goscript.selectStatement([
|
|
177
|
+
{
|
|
178
|
+
id: 0,
|
|
179
|
+
isSend: false,
|
|
180
|
+
channel: ch4,
|
|
181
|
+
onSelected: async (result) => {
|
|
182
|
+
const msg = result.value;
|
|
183
|
+
console.log("TEST8: Selected ch4 unexpectedly:", msg);
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
187
|
id: 1,
|
|
188
188
|
isSend: false,
|
|
189
189
|
channel: ch5,
|
|
@@ -191,14 +191,14 @@ export async function main() {
|
|
|
191
191
|
const msg = result.value;
|
|
192
192
|
console.log("TEST8: Selected ch5 correctly:", msg);
|
|
193
193
|
}
|
|
194
|
-
}
|
|
195
|
-
|
|
194
|
+
},
|
|
195
|
+
], false);
|
|
196
196
|
// Test 9: Channel closing test case for a separate test
|
|
197
197
|
let chClose = goscript.makeChannel(0, false);
|
|
198
198
|
chClose.close();
|
|
199
|
-
const
|
|
200
|
-
let val =
|
|
201
|
-
let ok =
|
|
199
|
+
const _tempVar1 = await chClose.receiveWithOk();
|
|
200
|
+
let val = _tempVar1.value;
|
|
201
|
+
let ok = _tempVar1.ok;
|
|
202
202
|
if (!ok) {
|
|
203
203
|
console.log("TEST9: Channel is closed, ok is false, val:", val);
|
|
204
204
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select_statement.gs.js","sourceRoot":"","sources":["../../../../compliance/tests/select_statement/select_statement.gs.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,yDAAyD;AAEzD,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,IAAI;IACzB,mDAAmD;IACnD,iDAAiD;IACjD,IAAI,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAS,CAAC,EAAE,EAAE,CAAC,CAAA;IAE7C,gDAAgD;IAChD,MAAM,
|
|
1
|
+
{"version":3,"file":"select_statement.gs.js","sourceRoot":"","sources":["../../../../compliance/tests/select_statement/select_statement.gs.ts"],"names":[],"mappings":"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"}
|