goscript 0.0.14 → 0.0.16
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 +154 -40
- package/builtin/builtin.ts +1168 -178
- package/compiler/analysis.go +726 -0
- package/compiler/compiler.go +5701 -4
- package/compiler/compiler_test.go +104 -0
- package/compiler/config.go +3 -3
- package/compiler/config_test.go +89 -0
- package/compiler/output.go +26 -0
- package/compiler/write-type-spec.go +506 -0
- package/compiler/writer.go +11 -0
- package/dist/builtin/builtin.d.ts +204 -67
- package/dist/builtin/builtin.js +845 -144
- package/dist/builtin/builtin.js.map +1 -1
- package/go.mod +4 -5
- package/go.sum +6 -11
- package/package.json +4 -3
- package/compiler/compile.go +0 -190
- package/compiler/compile_comment.go +0 -41
- package/compiler/compile_decls.go +0 -84
- package/compiler/compile_expr.go +0 -1022
- package/compiler/compile_field.go +0 -110
- package/compiler/compile_spec.go +0 -566
- package/compiler/compile_stmt.go +0 -1616
- package/compiler/context.go +0 -9
- package/compiler/file_compiler.go +0 -80
- package/compiler/output_path.go +0 -31
- package/compiler/pkg_compiler.go +0 -72
- package/compiler/types/tokens.go +0 -66
- package/compiler/types/types.go +0 -46
- package/dist/compliance/tests/array_literal/array_literal.gs.d.ts +0 -1
- package/dist/compliance/tests/array_literal/array_literal.gs.js +0 -15
- package/dist/compliance/tests/array_literal/array_literal.gs.js.map +0 -1
- package/dist/compliance/tests/async_basic/async_basic.gs.d.ts +0 -1
- package/dist/compliance/tests/async_basic/async_basic.gs.js +0 -24
- package/dist/compliance/tests/async_basic/async_basic.gs.js.map +0 -1
- package/dist/compliance/tests/async_defer_statement/async_defer_statement.gs.d.ts +0 -1
- package/dist/compliance/tests/async_defer_statement/async_defer_statement.gs.js +0 -82
- package/dist/compliance/tests/async_defer_statement/async_defer_statement.gs.js.map +0 -1
- package/dist/compliance/tests/basic_arithmetic/basic_arithmetic.gs.d.ts +0 -1
- package/dist/compliance/tests/basic_arithmetic/basic_arithmetic.gs.js +0 -16
- package/dist/compliance/tests/basic_arithmetic/basic_arithmetic.gs.js.map +0 -1
- package/dist/compliance/tests/boolean_logic/boolean_logic.gs.d.ts +0 -1
- package/dist/compliance/tests/boolean_logic/boolean_logic.gs.js +0 -14
- package/dist/compliance/tests/boolean_logic/boolean_logic.gs.js.map +0 -1
- package/dist/compliance/tests/channel_basic/channel_basic.gs.d.ts +0 -1
- package/dist/compliance/tests/channel_basic/channel_basic.gs.js +0 -14
- package/dist/compliance/tests/channel_basic/channel_basic.gs.js.map +0 -1
- package/dist/compliance/tests/composite_literal_assignment/composite_literal_assignment.gs.d.ts +0 -1
- package/dist/compliance/tests/composite_literal_assignment/composite_literal_assignment.gs.js +0 -27
- package/dist/compliance/tests/composite_literal_assignment/composite_literal_assignment.gs.js.map +0 -1
- package/dist/compliance/tests/constants/constants.gs.d.ts +0 -1
- package/dist/compliance/tests/constants/constants.gs.js +0 -16
- package/dist/compliance/tests/constants/constants.gs.js.map +0 -1
- package/dist/compliance/tests/copy_independence/copy_independence.gs.d.ts +0 -1
- package/dist/compliance/tests/copy_independence/copy_independence.gs.js +0 -33
- package/dist/compliance/tests/copy_independence/copy_independence.gs.js.map +0 -1
- package/dist/compliance/tests/defer_statement/defer_statement.gs.d.ts +0 -1
- package/dist/compliance/tests/defer_statement/defer_statement.gs.js +0 -75
- package/dist/compliance/tests/defer_statement/defer_statement.gs.js.map +0 -1
- package/dist/compliance/tests/embedded_interface_assertion/embedded_interface_assertion.gs.d.ts +0 -1
- package/dist/compliance/tests/embedded_interface_assertion/embedded_interface_assertion.gs.js +0 -37
- package/dist/compliance/tests/embedded_interface_assertion/embedded_interface_assertion.gs.js.map +0 -1
- package/dist/compliance/tests/flag_bitwise_op/flag_bitwise_op.gs.d.ts +0 -1
- package/dist/compliance/tests/flag_bitwise_op/flag_bitwise_op.gs.js +0 -29
- package/dist/compliance/tests/flag_bitwise_op/flag_bitwise_op.gs.js.map +0 -1
- package/dist/compliance/tests/float64/float64.gs.d.ts +0 -1
- package/dist/compliance/tests/float64/float64.gs.js +0 -24
- package/dist/compliance/tests/float64/float64.gs.js.map +0 -1
- package/dist/compliance/tests/for_loop_basic/for_loop_basic.gs.d.ts +0 -1
- package/dist/compliance/tests/for_loop_basic/for_loop_basic.gs.js +0 -10
- package/dist/compliance/tests/for_loop_basic/for_loop_basic.gs.js.map +0 -1
- package/dist/compliance/tests/for_loop_condition_only/for_loop_condition_only.gs.d.ts +0 -1
- package/dist/compliance/tests/for_loop_condition_only/for_loop_condition_only.gs.js +0 -11
- package/dist/compliance/tests/for_loop_condition_only/for_loop_condition_only.gs.js.map +0 -1
- package/dist/compliance/tests/for_loop_condition_only/main.gs.d.ts +0 -1
- package/dist/compliance/tests/for_loop_condition_only/main.gs.js +0 -10
- package/dist/compliance/tests/for_loop_condition_only/main.gs.js.map +0 -1
- package/dist/compliance/tests/for_loop_infinite/for_loop_infinite.gs.d.ts +0 -1
- package/dist/compliance/tests/for_loop_infinite/for_loop_infinite.gs.js +0 -14
- package/dist/compliance/tests/for_loop_infinite/for_loop_infinite.gs.js.map +0 -1
- package/dist/compliance/tests/for_range/for_range.gs.d.ts +0 -1
- package/dist/compliance/tests/for_range/for_range.gs.js +0 -39
- package/dist/compliance/tests/for_range/for_range.gs.js.map +0 -1
- package/dist/compliance/tests/for_range_index_use/for_range_index_use.gs.d.ts +0 -1
- package/dist/compliance/tests/for_range_index_use/for_range_index_use.gs.js +0 -15
- package/dist/compliance/tests/for_range_index_use/for_range_index_use.gs.js.map +0 -1
- package/dist/compliance/tests/func_literal/func_literal.gs.d.ts +0 -1
- package/dist/compliance/tests/func_literal/func_literal.gs.js +0 -10
- package/dist/compliance/tests/func_literal/func_literal.gs.js.map +0 -1
- package/dist/compliance/tests/function_call_result_assignment/function_call_result_assignment.gs.d.ts +0 -12
- package/dist/compliance/tests/function_call_result_assignment/function_call_result_assignment.gs.js +0 -30
- package/dist/compliance/tests/function_call_result_assignment/function_call_result_assignment.gs.js.map +0 -1
- package/dist/compliance/tests/if_statement/if_statement.gs.d.ts +0 -1
- package/dist/compliance/tests/if_statement/if_statement.gs.js +0 -13
- package/dist/compliance/tests/if_statement/if_statement.gs.js.map +0 -1
- package/dist/compliance/tests/interface_method_comments/interface_method_comments.gs.d.ts +0 -1
- package/dist/compliance/tests/interface_method_comments/interface_method_comments.gs.js +0 -12
- package/dist/compliance/tests/interface_method_comments/interface_method_comments.gs.js.map +0 -1
- package/dist/compliance/tests/interface_multi_param_return/interface_multi_param_return.gs.d.ts +0 -1
- package/dist/compliance/tests/interface_multi_param_return/interface_multi_param_return.gs.js +0 -34
- package/dist/compliance/tests/interface_multi_param_return/interface_multi_param_return.gs.js.map +0 -1
- package/dist/compliance/tests/interface_to_interface_type_assertion/interface_to_interface_type_assertion.gs.d.ts +0 -1
- package/dist/compliance/tests/interface_to_interface_type_assertion/interface_to_interface_type_assertion.gs.js +0 -32
- package/dist/compliance/tests/interface_to_interface_type_assertion/interface_to_interface_type_assertion.gs.js.map +0 -1
- package/dist/compliance/tests/interface_type_assertion/interface_type_assertion.gs.d.ts +0 -1
- package/dist/compliance/tests/interface_type_assertion/interface_type_assertion.gs.js +0 -40
- package/dist/compliance/tests/interface_type_assertion/interface_type_assertion.gs.js.map +0 -1
- package/dist/compliance/tests/interface_type_assertion_signature_mismatch/interface_type_assertion_signature_mismatch.gs.d.ts +0 -1
- package/dist/compliance/tests/interface_type_assertion_signature_mismatch/interface_type_assertion_signature_mismatch.gs.js +0 -51
- package/dist/compliance/tests/interface_type_assertion_signature_mismatch/interface_type_assertion_signature_mismatch.gs.js.map +0 -1
- package/dist/compliance/tests/map_support/map_support.gs.d.ts +0 -1
- package/dist/compliance/tests/map_support/map_support.gs.js +0 -88
- package/dist/compliance/tests/map_support/map_support.gs.js.map +0 -1
- package/dist/compliance/tests/method_call_on_pointer_receiver/method_call_on_pointer_receiver.gs.d.ts +0 -1
- package/dist/compliance/tests/method_call_on_pointer_receiver/method_call_on_pointer_receiver.gs.js +0 -24
- package/dist/compliance/tests/method_call_on_pointer_receiver/method_call_on_pointer_receiver.gs.js.map +0 -1
- package/dist/compliance/tests/method_call_on_pointer_via_value/method_call_on_pointer_via_value.gs.d.ts +0 -1
- package/dist/compliance/tests/method_call_on_pointer_via_value/method_call_on_pointer_via_value.gs.js +0 -33
- package/dist/compliance/tests/method_call_on_pointer_via_value/method_call_on_pointer_via_value.gs.js.map +0 -1
- package/dist/compliance/tests/method_call_on_value_receiver/method_call_on_value_receiver.gs.d.ts +0 -1
- package/dist/compliance/tests/method_call_on_value_receiver/method_call_on_value_receiver.gs.js +0 -22
- package/dist/compliance/tests/method_call_on_value_receiver/method_call_on_value_receiver.gs.js.map +0 -1
- package/dist/compliance/tests/method_call_on_value_via_pointer/method_call_on_value_via_pointer.gs.d.ts +0 -1
- package/dist/compliance/tests/method_call_on_value_via_pointer/method_call_on_value_via_pointer.gs.js +0 -33
- package/dist/compliance/tests/method_call_on_value_via_pointer/method_call_on_value_via_pointer.gs.js.map +0 -1
- package/dist/compliance/tests/multiple_return_values/multiple_return_values.gs.d.ts +0 -1
- package/dist/compliance/tests/multiple_return_values/multiple_return_values.gs.js +0 -17
- package/dist/compliance/tests/multiple_return_values/multiple_return_values.gs.js.map +0 -1
- package/dist/compliance/tests/pointer_assignment_no_copy/pointer_assignment_no_copy.gs.d.ts +0 -1
- package/dist/compliance/tests/pointer_assignment_no_copy/pointer_assignment_no_copy.gs.js +0 -29
- package/dist/compliance/tests/pointer_assignment_no_copy/pointer_assignment_no_copy.gs.js.map +0 -1
- package/dist/compliance/tests/pointer_composite_literal_assignment/pointer_composite_literal_assignment.gs.d.ts +0 -1
- package/dist/compliance/tests/pointer_composite_literal_assignment/pointer_composite_literal_assignment.gs.js +0 -27
- package/dist/compliance/tests/pointer_composite_literal_assignment/pointer_composite_literal_assignment.gs.js.map +0 -1
- package/dist/compliance/tests/pointer_deref_multiassign/pointer_deref_multiassign.gs.d.ts +0 -1
- package/dist/compliance/tests/pointer_deref_multiassign/pointer_deref_multiassign.gs.js +0 -22
- package/dist/compliance/tests/pointer_deref_multiassign/pointer_deref_multiassign.gs.js.map +0 -1
- package/dist/compliance/tests/pointer_initialization/pointer_initialization.gs.d.ts +0 -1
- package/dist/compliance/tests/pointer_initialization/pointer_initialization.gs.js +0 -20
- package/dist/compliance/tests/pointer_initialization/pointer_initialization.gs.js.map +0 -1
- package/dist/compliance/tests/select_receive_on_closed_channel_no_default/select_receive_on_closed_channel_no_default.gs.d.ts +0 -1
- package/dist/compliance/tests/select_receive_on_closed_channel_no_default/select_receive_on_closed_channel_no_default.gs.js +0 -28
- package/dist/compliance/tests/select_receive_on_closed_channel_no_default/select_receive_on_closed_channel_no_default.gs.js.map +0 -1
- package/dist/compliance/tests/select_send_on_full_buffered_channel_with_default/select_send_on_full_buffered_channel_with_default.gs.d.ts +0 -1
- package/dist/compliance/tests/select_send_on_full_buffered_channel_with_default/select_send_on_full_buffered_channel_with_default.gs.js +0 -30
- package/dist/compliance/tests/select_send_on_full_buffered_channel_with_default/select_send_on_full_buffered_channel_with_default.gs.js.map +0 -1
- package/dist/compliance/tests/select_statement/select_statement.gs.d.ts +0 -1
- package/dist/compliance/tests/select_statement/select_statement.gs.js +0 -207
- package/dist/compliance/tests/select_statement/select_statement.gs.js.map +0 -1
- package/dist/compliance/tests/simple/simple.gs.d.ts +0 -1
- package/dist/compliance/tests/simple/simple.gs.js +0 -6
- package/dist/compliance/tests/simple/simple.gs.js.map +0 -1
- package/dist/compliance/tests/simple_deref_assignment/simple_deref_assignment.gs.d.ts +0 -1
- package/dist/compliance/tests/simple_deref_assignment/simple_deref_assignment.gs.js +0 -24
- package/dist/compliance/tests/simple_deref_assignment/simple_deref_assignment.gs.js.map +0 -1
- package/dist/compliance/tests/slices/slices.gs.d.ts +0 -1
- package/dist/compliance/tests/slices/slices.gs.js +0 -294
- package/dist/compliance/tests/slices/slices.gs.js.map +0 -1
- package/dist/compliance/tests/string_conversion/string_conversion.gs.d.ts +0 -1
- package/dist/compliance/tests/string_conversion/string_conversion.gs.js +0 -41
- package/dist/compliance/tests/string_conversion/string_conversion.gs.js.map +0 -1
- package/dist/compliance/tests/string_rune_conversion/string_rune_conversion.gs.d.ts +0 -1
- package/dist/compliance/tests/string_rune_conversion/string_rune_conversion.gs.js +0 -17
- package/dist/compliance/tests/string_rune_conversion/string_rune_conversion.gs.js.map +0 -1
- package/dist/compliance/tests/struct_embedding/struct_embedding.gs.d.ts +0 -1
- package/dist/compliance/tests/struct_embedding/struct_embedding.gs.js +0 -48
- package/dist/compliance/tests/struct_embedding/struct_embedding.gs.js.map +0 -1
- package/dist/compliance/tests/struct_field_access/struct_field_access.gs.d.ts +0 -1
- package/dist/compliance/tests/struct_field_access/struct_field_access.gs.js +0 -19
- package/dist/compliance/tests/struct_field_access/struct_field_access.gs.js.map +0 -1
- package/dist/compliance/tests/struct_pointer_interface_fields/struct_pointer_interface_fields.gs.d.ts +0 -1
- package/dist/compliance/tests/struct_pointer_interface_fields/struct_pointer_interface_fields.gs.js +0 -26
- package/dist/compliance/tests/struct_pointer_interface_fields/struct_pointer_interface_fields.gs.js.map +0 -1
- package/dist/compliance/tests/struct_value_init_clone/struct_value_init_clone.gs.d.ts +0 -1
- package/dist/compliance/tests/struct_value_init_clone/struct_value_init_clone.gs.js +0 -30
- package/dist/compliance/tests/struct_value_init_clone/struct_value_init_clone.gs.js.map +0 -1
- package/dist/compliance/tests/switch_statement/switch_statement.gs.d.ts +0 -1
- package/dist/compliance/tests/switch_statement/switch_statement.gs.js +0 -76
- package/dist/compliance/tests/switch_statement/switch_statement.gs.js.map +0 -1
- package/dist/compliance/tests/value_type_copy_behavior/value_type_copy_behavior.gs.d.ts +0 -1
- package/dist/compliance/tests/value_type_copy_behavior/value_type_copy_behavior.gs.js +0 -31
- package/dist/compliance/tests/value_type_copy_behavior/value_type_copy_behavior.gs.js.map +0 -1
package/README.md
CHANGED
|
@@ -64,40 +64,40 @@ You can also use the compiler directly within your Go code. Here's a basic examp
|
|
|
64
64
|
package main
|
|
65
65
|
|
|
66
66
|
import (
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
"context"
|
|
68
|
+
"log"
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
"github.com/aperturerobotics/goscript/compiler"
|
|
71
|
+
"github.com/sirupsen/logrus"
|
|
72
72
|
)
|
|
73
73
|
|
|
74
74
|
func main() {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
75
|
+
// Initialize logger (optional)
|
|
76
|
+
logger := logrus.New()
|
|
77
|
+
logger.SetLevel(logrus.DebugLevel) // Adjust log level as needed
|
|
78
|
+
le := logrus.NewEntry(logger)
|
|
79
|
+
|
|
80
|
+
// Configure the compiler
|
|
81
|
+
conf := &compiler.Config{
|
|
82
|
+
OutputPathRoot: "./ts_output", // Directory for generated TypeScript files
|
|
83
|
+
}
|
|
84
|
+
if err := conf.Validate(); err != nil {
|
|
85
|
+
log.Fatalf("invalid compiler config: %v", err)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Create a new compiler instance
|
|
89
|
+
comp, err := compiler.NewCompiler(conf, le, nil) // Pass nil for default package loading options
|
|
90
|
+
if err != nil {
|
|
91
|
+
log.Fatalf("failed to create compiler: %v", err)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Compile the desired Go package(s)
|
|
95
|
+
// Replace "." with the specific Go import path of the package you want to compile
|
|
96
|
+
if err := comp.CompilePackages(context.Background(), "your/go/package/path"); err != nil {
|
|
97
|
+
log.Fatalf("compilation failed: %v", err)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
log.Println("Compilation successful!")
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
```
|
|
@@ -226,9 +226,41 @@ func main() {
|
|
|
226
226
|
arr := [3]int{1, 2, 3}
|
|
227
227
|
println("Array elements:", arr[0], arr[1], arr[2])
|
|
228
228
|
|
|
229
|
-
// Slices and
|
|
229
|
+
// Slices - Basic initialization and access
|
|
230
230
|
slice := []int{4, 5, 6}
|
|
231
231
|
println("Slice elements:", slice[0], slice[1], slice[2])
|
|
232
|
+
println("Slice length:", len(slice), "capacity:", cap(slice))
|
|
233
|
+
|
|
234
|
+
sliceWithCap := make([]int, 3, 5)
|
|
235
|
+
println("\nSlice created with make([]int, 3, 5):")
|
|
236
|
+
println("Length:", len(sliceWithCap), "Capacity:", cap(sliceWithCap))
|
|
237
|
+
|
|
238
|
+
println("\nAppend and capacity growth:")
|
|
239
|
+
growingSlice := make([]int, 0, 2)
|
|
240
|
+
println("Initial - Length:", len(growingSlice), "Capacity:", cap(growingSlice))
|
|
241
|
+
|
|
242
|
+
for i := 1; i <= 4; i++ {
|
|
243
|
+
growingSlice = append(growingSlice, i)
|
|
244
|
+
println("After append", i, "- Length:", len(growingSlice), "Capacity:", cap(growingSlice))
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
println("\nSlicing operations and shared backing arrays:")
|
|
248
|
+
original := []int{10, 20, 30, 40, 50}
|
|
249
|
+
println("Original slice - Length:", len(original), "Capacity:", cap(original))
|
|
250
|
+
|
|
251
|
+
slice1 := original[1:3]
|
|
252
|
+
println("slice1 := original[1:3] - Values:", slice1[0], slice1[1])
|
|
253
|
+
println("slice1 - Length:", len(slice1), "Capacity:", cap(slice1))
|
|
254
|
+
|
|
255
|
+
slice2 := original[1:3:4]
|
|
256
|
+
println("slice2 := original[1:3:4] - Values:", slice2[0], slice2[1])
|
|
257
|
+
println("slice2 - Length:", len(slice2), "Capacity:", cap(slice2))
|
|
258
|
+
|
|
259
|
+
println("\nShared backing arrays:")
|
|
260
|
+
slice1[0] = 999
|
|
261
|
+
println("After slice1[0] = 999:")
|
|
262
|
+
println("original[1]:", original[1], "slice1[0]:", slice1[0], "slice2[0]:", slice2[0])
|
|
263
|
+
|
|
232
264
|
sum := 0
|
|
233
265
|
for idx, val := range slice {
|
|
234
266
|
sum += val
|
|
@@ -294,9 +326,24 @@ func main() {
|
|
|
294
326
|
println("Goroutine: Sending message")
|
|
295
327
|
ch <- "Hello from goroutine!"
|
|
296
328
|
}()
|
|
329
|
+
|
|
297
330
|
msg := <-ch
|
|
298
331
|
println("Main goroutine: Received message:", msg)
|
|
299
332
|
|
|
333
|
+
// Select statement
|
|
334
|
+
println("\nSelect statement:")
|
|
335
|
+
selectCh := make(chan string)
|
|
336
|
+
go func() {
|
|
337
|
+
selectCh <- "Message from select goroutine!"
|
|
338
|
+
}()
|
|
339
|
+
anotherCh := make(chan string)
|
|
340
|
+
select {
|
|
341
|
+
case selectMsg := <-selectCh:
|
|
342
|
+
println("Select received:", selectMsg)
|
|
343
|
+
case anotherMsg := <-anotherCh: // Add another case
|
|
344
|
+
println("Select received from another channel:", anotherMsg)
|
|
345
|
+
}
|
|
346
|
+
|
|
300
347
|
// Function Literals
|
|
301
348
|
println("\nFunction Literals:")
|
|
302
349
|
add := func(x, y int) int {
|
|
@@ -310,7 +357,7 @@ func main() {
|
|
|
310
357
|
Generated with `goscript compile .`:
|
|
311
358
|
|
|
312
359
|
```typescript
|
|
313
|
-
import * as
|
|
360
|
+
import * as $ from "@goscript/builtin"
|
|
314
361
|
|
|
315
362
|
class MyStruct {
|
|
316
363
|
// MyInt is a public integer field, initialized to zero.
|
|
@@ -373,12 +420,44 @@ export async function main(): Promise<void> {
|
|
|
373
420
|
console.log("string(0x221A):", s3)
|
|
374
421
|
|
|
375
422
|
// Arrays
|
|
376
|
-
let arr = [1, 2, 3]
|
|
377
|
-
console.log("Array elements:", arr[0], arr[1], arr[2])
|
|
423
|
+
let arr = $.arrayToSlice([1, 2, 3])
|
|
424
|
+
console.log("Array elements:", arr![0], arr![1], arr![2])
|
|
425
|
+
|
|
426
|
+
// Slices - Basic initialization and access
|
|
427
|
+
let slice = $.arrayToSlice([4, 5, 6])
|
|
428
|
+
console.log("Slice elements:", slice![0], slice![1], slice![2])
|
|
429
|
+
console.log("Slice length:", $.len(slice), "capacity:", $.cap(slice))
|
|
430
|
+
|
|
431
|
+
let sliceWithCap = $.makeSlice<number>(3, 5)
|
|
432
|
+
console.log("\nSlice created with make([]int, 3, 5):")
|
|
433
|
+
console.log("Length:", $.len(sliceWithCap), "Capacity:", $.cap(sliceWithCap))
|
|
434
|
+
|
|
435
|
+
console.log("\nAppend and capacity growth:")
|
|
436
|
+
let growingSlice = $.makeSlice<number>(0, 2)
|
|
437
|
+
console.log("Initial - Length:", $.len(growingSlice), "Capacity:", $.cap(growingSlice))
|
|
438
|
+
|
|
439
|
+
for (let i = 1; i <= 4; i++) {
|
|
440
|
+
growingSlice = $.append(growingSlice, i)
|
|
441
|
+
console.log("After append", i, "- Length:", $.len(growingSlice), "Capacity:", $.cap(growingSlice))
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
console.log("\nSlicing operations and shared backing arrays:")
|
|
445
|
+
let original = $.arrayToSlice([10, 20, 30, 40, 50])
|
|
446
|
+
console.log("Original slice - Length:", $.len(original), "Capacity:", $.cap(original))
|
|
447
|
+
|
|
448
|
+
let slice1 = $.goSlice(original, 1, 3)
|
|
449
|
+
console.log("slice1 := original[1:3] - Values:", slice1![0], slice1![1])
|
|
450
|
+
console.log("slice1 - Length:", $.len(slice1), "Capacity:", $.cap(slice1))
|
|
451
|
+
|
|
452
|
+
let slice2 = $.goSlice(original, 1, 3, 4)
|
|
453
|
+
console.log("slice2 := original[1:3:4] - Values:", slice2![0], slice2![1])
|
|
454
|
+
console.log("slice2 - Length:", $.len(slice2), "Capacity:", $.cap(slice2))
|
|
455
|
+
|
|
456
|
+
console.log("\nShared backing arrays:")
|
|
457
|
+
slice1![0] = 999
|
|
458
|
+
console.log("After slice1[0] = 999:")
|
|
459
|
+
console.log("original[1]:", original![1], "slice1[0]:", slice1![0], "slice2[0]:", slice2![0])
|
|
378
460
|
|
|
379
|
-
// Slices and range loop
|
|
380
|
-
let slice = [4, 5, 6]
|
|
381
|
-
console.log("Slice elements:", slice[0], slice[1], slice[2])
|
|
382
461
|
let sum = 0
|
|
383
462
|
for (let idx = 0; idx < slice.length; idx++) {
|
|
384
463
|
const val = slice[idx]
|
|
@@ -444,14 +523,49 @@ export async function main(): Promise<void> {
|
|
|
444
523
|
|
|
445
524
|
// Goroutines and Channels
|
|
446
525
|
console.log("\nGoroutines and Channels:")
|
|
447
|
-
let ch =
|
|
526
|
+
let ch = $.makeChannel<string>(0, "")
|
|
448
527
|
queueMicrotask(async () => {
|
|
449
|
-
|
|
450
|
-
|
|
528
|
+
{
|
|
529
|
+
console.log("Goroutine: Sending message")
|
|
530
|
+
await ch.send("Hello from goroutine!")
|
|
531
|
+
}
|
|
451
532
|
})
|
|
533
|
+
|
|
452
534
|
let msg = await ch.receive()
|
|
453
535
|
console.log("Main goroutine: Received message:", msg)
|
|
454
536
|
|
|
537
|
+
// Select statement
|
|
538
|
+
console.log("\nSelect statement:")
|
|
539
|
+
let selectCh = $.makeChannel<string>(0, "")
|
|
540
|
+
queueMicrotask(async () => {
|
|
541
|
+
{
|
|
542
|
+
await selectCh.send("Message from select goroutine!")
|
|
543
|
+
}
|
|
544
|
+
})
|
|
545
|
+
let anotherCh = $.makeChannel<string>(0, "")
|
|
546
|
+
|
|
547
|
+
// Add another case
|
|
548
|
+
await $.selectStatement([
|
|
549
|
+
{
|
|
550
|
+
id: 0,
|
|
551
|
+
isSend: false,
|
|
552
|
+
channel: selectCh,
|
|
553
|
+
onSelected: async (result) => {
|
|
554
|
+
const selectMsg = result.value
|
|
555
|
+
console.log("Select received:", selectMsg)
|
|
556
|
+
}
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
id: 1,
|
|
560
|
+
isSend: false,
|
|
561
|
+
channel: anotherCh,
|
|
562
|
+
onSelected: async (result) => {
|
|
563
|
+
const anotherMsg = result.value
|
|
564
|
+
console.log("Select received from another channel:", anotherMsg)
|
|
565
|
+
}
|
|
566
|
+
},
|
|
567
|
+
], false)
|
|
568
|
+
|
|
455
569
|
// Function Literals
|
|
456
570
|
console.log("\nFunction Literals:")
|
|
457
571
|
let add = (x: number, y: number): number => {
|