goscript 0.0.48 → 0.0.50
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/cmd/goscript/deps.go +1 -4
- package/compiler/analysis.go +1120 -513
- package/compiler/analysis_test.go +113 -4
- package/compiler/compiler.go +88 -124
- package/compiler/decl.go +22 -0
- package/compiler/expr-call-async.go +46 -52
- package/compiler/expr-call-type-conversion.go +144 -59
- package/compiler/expr-call.go +235 -12
- package/compiler/expr.go +5 -82
- package/compiler/gs_dependencies_test.go +60 -1
- package/compiler/spec-value.go +73 -51
- package/compiler/spec.go +337 -151
- package/compiler/stmt-assign.go +7 -4
- package/compiler/stmt.go +250 -81
- package/compiler/type.go +13 -0
- package/dist/gs/builtin/builtin.d.ts +1 -5
- package/dist/gs/builtin/builtin.js +1 -34
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/context/context.d.ts +16 -18
- package/dist/gs/context/context.js +23 -13
- package/dist/gs/context/context.js.map +1 -1
- package/dist/gs/fmt/fmt.js +22 -4
- package/dist/gs/fmt/fmt.js.map +1 -1
- package/dist/gs/io/fs/fs.d.ts +6 -12
- package/dist/gs/io/fs/fs.js +52 -67
- package/dist/gs/io/fs/fs.js.map +1 -1
- package/dist/gs/os/index.d.ts +2 -1
- package/dist/gs/os/index.js +1 -1
- package/dist/gs/os/index.js.map +1 -1
- package/dist/gs/os/types_js.gs.d.ts +7 -1
- package/dist/gs/os/types_js.gs.js +16 -1
- package/dist/gs/os/types_js.gs.js.map +1 -1
- package/dist/gs/os/types_unix.gs.js +2 -2
- package/dist/gs/os/types_unix.gs.js.map +1 -1
- package/dist/gs/reflect/index.d.ts +3 -3
- package/dist/gs/reflect/index.js +2 -2
- package/dist/gs/reflect/index.js.map +1 -1
- package/dist/gs/reflect/map.js +2 -2
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +8 -9
- package/dist/gs/reflect/type.js +98 -103
- package/dist/gs/reflect/type.js.map +1 -1
- package/dist/gs/reflect/types.d.ts +1 -10
- package/dist/gs/reflect/types.js +3 -26
- package/dist/gs/reflect/types.js.map +1 -1
- package/dist/gs/reflect/value.js +23 -23
- package/dist/gs/reflect/value.js.map +1 -1
- package/dist/gs/reflect/visiblefields.js +3 -3
- package/dist/gs/reflect/visiblefields.js.map +1 -1
- package/dist/gs/time/time.d.ts +13 -23
- package/dist/gs/time/time.js +57 -75
- package/dist/gs/time/time.js.map +1 -1
- package/gs/builtin/builtin.ts +3 -47
- package/gs/builtin/slice.ts +1 -1
- package/gs/bytes/meta.json +10 -0
- package/gs/context/context.ts +63 -45
- package/gs/fmt/fmt.ts +22 -4
- package/gs/fmt/meta.json +5 -0
- package/gs/internal/meta.json +5 -0
- package/gs/io/fs/fs.ts +58 -73
- package/gs/io/meta.json +9 -0
- package/gs/maps/meta.json +6 -0
- package/gs/math/meta.json +5 -0
- package/gs/os/index.ts +8 -1
- package/gs/os/meta.json +15 -0
- package/gs/os/types_js.gs.ts +22 -1
- package/gs/os/types_unix.gs.ts +2 -2
- package/gs/path/meta.json +6 -0
- package/gs/reflect/function-types.test.ts +10 -10
- package/gs/reflect/index.ts +6 -6
- package/gs/reflect/map.ts +2 -2
- package/gs/reflect/meta.json +5 -0
- package/gs/reflect/type.ts +105 -105
- package/gs/reflect/types.ts +2 -28
- package/gs/reflect/value.ts +23 -23
- package/gs/reflect/visiblefields.ts +3 -3
- package/gs/strconv/meta.json +5 -0
- package/gs/strings/meta.json +9 -0
- package/gs/sync/meta.json +19 -0
- package/gs/time/time.ts +65 -84
- package/package.json +2 -2
- package/dist/gs/builtin/io.d.ts +0 -16
- package/dist/gs/builtin/io.js +0 -15
- package/dist/gs/builtin/io.js.map +0 -1
- package/dist/gs/internal/testlog/index.d.ts +0 -1
- package/dist/gs/internal/testlog/index.js +0 -5
- package/dist/gs/internal/testlog/index.js.map +0 -1
- package/dist/gs/maps/iter.gs.d.ts +0 -7
- package/dist/gs/maps/iter.gs.js +0 -65
- package/dist/gs/maps/iter.gs.js.map +0 -1
- package/dist/gs/maps/maps.gs.d.ts +0 -7
- package/dist/gs/maps/maps.gs.js +0 -79
- package/dist/gs/maps/maps.gs.js.map +0 -1
- package/dist/gs/reflect/abi.d.ts +0 -59
- package/dist/gs/reflect/abi.gs.d.ts +0 -59
- package/dist/gs/reflect/abi.gs.js +0 -79
- package/dist/gs/reflect/abi.gs.js.map +0 -1
- package/dist/gs/reflect/abi.js +0 -79
- package/dist/gs/reflect/abi.js.map +0 -1
- package/dist/gs/reflect/badlinkname.d.ts +0 -52
- package/dist/gs/reflect/badlinkname.gs.d.ts +0 -52
- package/dist/gs/reflect/badlinkname.gs.js +0 -72
- package/dist/gs/reflect/badlinkname.gs.js.map +0 -1
- package/dist/gs/reflect/badlinkname.js +0 -72
- package/dist/gs/reflect/badlinkname.js.map +0 -1
- package/dist/gs/reflect/deepequal.gs.d.ts +0 -25
- package/dist/gs/reflect/deepequal.gs.js +0 -308
- package/dist/gs/reflect/deepequal.gs.js.map +0 -1
- package/dist/gs/reflect/float32reg_generic.gs.d.ts +0 -2
- package/dist/gs/reflect/float32reg_generic.gs.js +0 -10
- package/dist/gs/reflect/float32reg_generic.gs.js.map +0 -1
- package/dist/gs/reflect/index.gs.d.ts +0 -1
- package/dist/gs/reflect/index.gs.js +0 -3
- package/dist/gs/reflect/index.gs.js.map +0 -1
- package/dist/gs/reflect/iter.gs.d.ts +0 -3
- package/dist/gs/reflect/iter.gs.js +0 -24
- package/dist/gs/reflect/iter.gs.js.map +0 -1
- package/dist/gs/reflect/makefunc.gs.d.ts +0 -34
- package/dist/gs/reflect/makefunc.gs.js +0 -288
- package/dist/gs/reflect/makefunc.gs.js.map +0 -1
- package/dist/gs/reflect/map_swiss.gs.d.ts +0 -14
- package/dist/gs/reflect/map_swiss.gs.js +0 -70
- package/dist/gs/reflect/map_swiss.gs.js.map +0 -1
- package/dist/gs/reflect/reflect.gs.d.ts +0 -132
- package/dist/gs/reflect/reflect.gs.js +0 -437
- package/dist/gs/reflect/reflect.gs.js.map +0 -1
- package/dist/gs/reflect/swapper.gs.d.ts +0 -1
- package/dist/gs/reflect/swapper.gs.js +0 -32
- package/dist/gs/reflect/swapper.gs.js.map +0 -1
- package/dist/gs/reflect/type.gs.d.ts +0 -4
- package/dist/gs/reflect/type.gs.js +0 -21
- package/dist/gs/reflect/type.gs.js.map +0 -1
- package/dist/gs/reflect/value.gs.d.ts +0 -4
- package/dist/gs/reflect/value.gs.js +0 -12
- package/dist/gs/reflect/value.gs.js.map +0 -1
- package/dist/gs/reflect/visiblefields.gs.d.ts +0 -3
- package/dist/gs/reflect/visiblefields.gs.js +0 -123
- package/dist/gs/reflect/visiblefields.gs.js.map +0 -1
- package/dist/gs/stringslite/index.d.ts +0 -1
- package/dist/gs/stringslite/index.js +0 -2
- package/dist/gs/stringslite/index.js.map +0 -1
- package/dist/gs/stringslite/strings.d.ts +0 -11
- package/dist/gs/stringslite/strings.js +0 -67
- package/dist/gs/stringslite/strings.js.map +0 -1
- package/gs/bytes/metadata.go +0 -12
- package/gs/fmt/metadata.go +0 -7
- package/gs/internal/metadata.go +0 -7
- package/gs/io/io.go +0 -75
- package/gs/io/metadata.go +0 -11
- package/gs/maps/metadata.go +0 -8
- package/gs/math/metadata.go +0 -7
- package/gs/os/metadata.go +0 -17
- package/gs/path/metadata.go +0 -8
- package/gs/reflect/metadata.go +0 -7
- package/gs/strconv/metadata.go +0 -7
- package/gs/strings/metadata.go +0 -11
- package/gs/sync/metadata.go +0 -7
- package/gs/sync/sync.go +0 -64
package/compiler/stmt.go
CHANGED
|
@@ -445,93 +445,112 @@ func (c *GoToTSCompiler) WriteStmtSend(exp *ast.SendStmt) error {
|
|
|
445
445
|
//
|
|
446
446
|
// The function aims to produce idiomatic TypeScript `if/else if/else` structures.
|
|
447
447
|
func (c *GoToTSCompiler) WriteStmtIf(exp *ast.IfStmt) error {
|
|
448
|
+
// Handle optional initialization statement
|
|
448
449
|
if exp.Init != nil {
|
|
449
|
-
// Check
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
shadowingInfo
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
450
|
+
// Check for variable shadowing in the initialization first
|
|
451
|
+
if c.analysis.HasVariableShadowing(exp) {
|
|
452
|
+
shadowingInfo := c.analysis.GetShadowingInfo(exp)
|
|
453
|
+
if shadowingInfo != nil {
|
|
454
|
+
// Handle variable shadowing by creating temporary variables
|
|
455
|
+
for varName, tempVarName := range shadowingInfo.TempVariables {
|
|
456
|
+
c.tsw.WriteLiterally("const ")
|
|
457
|
+
c.tsw.WriteLiterally(tempVarName)
|
|
458
|
+
c.tsw.WriteLiterally(" = ")
|
|
459
|
+
|
|
460
|
+
// Check if this is a built-in function and handle it directly
|
|
461
|
+
if c.isBuiltinFunction(varName) {
|
|
462
|
+
c.tsw.WriteLiterally("$.")
|
|
463
|
+
c.tsw.WriteLiterally(varName)
|
|
464
|
+
} else {
|
|
465
|
+
// Get the original object for this shadowed variable
|
|
466
|
+
if originalObj, exists := shadowingInfo.ShadowedVariables[varName]; exists {
|
|
467
|
+
// Create an identifier with the original name and use WriteValueExpr to properly resolve it
|
|
468
|
+
originalIdent := &ast.Ident{Name: varName}
|
|
469
|
+
// Set the identifier in the Uses map so WriteValueExpr can find the object
|
|
470
|
+
c.pkg.TypesInfo.Uses[originalIdent] = originalObj
|
|
471
|
+
c.WriteValueExpr(originalIdent)
|
|
472
|
+
} else {
|
|
473
|
+
// Fallback to literal name if no object found (shouldn't happen in normal cases)
|
|
474
|
+
c.tsw.WriteLiterally(varName)
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
c.tsw.WriteLine("")
|
|
478
|
+
}
|
|
463
479
|
}
|
|
464
480
|
}
|
|
465
481
|
|
|
466
|
-
c.tsw.
|
|
467
|
-
c.tsw.
|
|
468
|
-
c.tsw.Indent(1) // Indent for the initializer
|
|
482
|
+
c.tsw.WriteLine("{")
|
|
483
|
+
c.tsw.Indent(1)
|
|
469
484
|
|
|
470
|
-
//
|
|
471
|
-
if
|
|
485
|
+
// Handle the initialization with or without shadowing support
|
|
486
|
+
if c.analysis.HasVariableShadowing(exp) {
|
|
487
|
+
shadowingInfo := c.analysis.GetShadowingInfo(exp)
|
|
472
488
|
if shadowingInfo != nil {
|
|
473
|
-
//
|
|
474
|
-
if
|
|
475
|
-
|
|
489
|
+
// Handle the initialization with shadowing support
|
|
490
|
+
if assignStmt, ok := exp.Init.(*ast.AssignStmt); ok {
|
|
491
|
+
if err := c.writeShadowedAssignmentWithoutTempVars(assignStmt, shadowingInfo); err != nil {
|
|
492
|
+
return fmt.Errorf("failed to write shadowed assignment in if init: %w", err)
|
|
493
|
+
}
|
|
494
|
+
} else {
|
|
495
|
+
// Non-assignment initialization statement
|
|
496
|
+
if err := c.WriteStmt(exp.Init); err != nil {
|
|
497
|
+
return fmt.Errorf("failed to write if initialization statement: %w", err)
|
|
498
|
+
}
|
|
476
499
|
}
|
|
477
500
|
} else {
|
|
478
|
-
// No shadowing, write normally
|
|
501
|
+
// No shadowing info, write normally
|
|
479
502
|
if err := c.WriteStmt(exp.Init); err != nil {
|
|
480
|
-
return err
|
|
503
|
+
return fmt.Errorf("failed to write if initialization statement: %w", err)
|
|
481
504
|
}
|
|
482
505
|
}
|
|
483
506
|
} else {
|
|
484
|
-
//
|
|
507
|
+
// No variable shadowing, write initialization normally
|
|
485
508
|
if err := c.WriteStmt(exp.Init); err != nil {
|
|
509
|
+
return fmt.Errorf("failed to write if initialization statement: %w", err)
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
// Write the if statement itself within the initialization block
|
|
514
|
+
c.tsw.WriteLiterally("if (")
|
|
515
|
+
if err := c.WriteValueExpr(exp.Cond); err != nil {
|
|
516
|
+
return err
|
|
517
|
+
}
|
|
518
|
+
c.tsw.WriteLiterally(") ")
|
|
519
|
+
|
|
520
|
+
if err := c.WriteStmt(exp.Body); err != nil {
|
|
521
|
+
return err
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
if exp.Else != nil {
|
|
525
|
+
c.tsw.WriteLiterally(" else ")
|
|
526
|
+
if err := c.WriteStmt(exp.Else); err != nil {
|
|
486
527
|
return err
|
|
487
528
|
}
|
|
488
529
|
}
|
|
489
530
|
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
c.tsw.WriteLiterally("}") // Write the closing brace at the now-correct indent level
|
|
494
|
-
c.tsw.WriteLine("") // Ensure a newline *after* this '}', critical for preventing '}}'
|
|
495
|
-
}()
|
|
531
|
+
c.tsw.Indent(-1)
|
|
532
|
+
c.tsw.WriteLine("}")
|
|
533
|
+
return nil
|
|
496
534
|
}
|
|
497
535
|
|
|
498
|
-
//
|
|
499
|
-
// (condition should refer to new local variables, not temp variables)
|
|
500
|
-
c.shadowingContext = make(map[string]string)
|
|
501
|
-
|
|
536
|
+
// No initialization statement, write if statement normally
|
|
502
537
|
c.tsw.WriteLiterally("if (")
|
|
503
|
-
if err := c.WriteValueExpr(exp.Cond); err != nil {
|
|
538
|
+
if err := c.WriteValueExpr(exp.Cond); err != nil {
|
|
504
539
|
return err
|
|
505
540
|
}
|
|
506
541
|
c.tsw.WriteLiterally(") ")
|
|
507
542
|
|
|
508
|
-
if exp.Body != nil {
|
|
509
|
-
|
|
510
|
-
return fmt.Errorf("failed to write if body block statement: %w", err)
|
|
511
|
-
}
|
|
512
|
-
} else {
|
|
513
|
-
// Handle nil body case using WriteStmtBlock with an empty block
|
|
514
|
-
if err := c.WriteStmtBlock(&ast.BlockStmt{}, exp.Else != nil); err != nil {
|
|
515
|
-
return fmt.Errorf("failed to write empty block statement in if statement: %w", err)
|
|
516
|
-
}
|
|
543
|
+
if err := c.WriteStmt(exp.Body); err != nil {
|
|
544
|
+
return err
|
|
517
545
|
}
|
|
518
546
|
|
|
519
|
-
// handle else branch
|
|
520
547
|
if exp.Else != nil {
|
|
521
548
|
c.tsw.WriteLiterally(" else ")
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
// Always pass false for suppressNewline here
|
|
525
|
-
if err := c.WriteStmtBlock(elseStmt, false); err != nil {
|
|
526
|
-
return fmt.Errorf("failed to write else block statement in if statement: %w", err)
|
|
527
|
-
}
|
|
528
|
-
case *ast.IfStmt:
|
|
529
|
-
// Recursive call handles its own block formatting
|
|
530
|
-
if err := c.WriteStmtIf(elseStmt); err != nil {
|
|
531
|
-
return fmt.Errorf("failed to write else if statement in if statement: %w", err)
|
|
532
|
-
}
|
|
549
|
+
if err := c.WriteStmt(exp.Else); err != nil {
|
|
550
|
+
return err
|
|
533
551
|
}
|
|
534
552
|
}
|
|
553
|
+
|
|
535
554
|
return nil
|
|
536
555
|
}
|
|
537
556
|
|
|
@@ -936,9 +955,35 @@ func (c *GoToTSCompiler) WriteStmtLabeled(stmt *ast.LabeledStmt) error {
|
|
|
936
955
|
}
|
|
937
956
|
|
|
938
957
|
// writeShadowedAssignment writes an assignment statement that has variable shadowing,
|
|
939
|
-
//
|
|
958
|
+
// using pre-computed identifier mappings from analysis instead of dynamic context.
|
|
940
959
|
func (c *GoToTSCompiler) writeShadowedAssignment(stmt *ast.AssignStmt, shadowingInfo *ShadowingInfo) error {
|
|
941
|
-
//
|
|
960
|
+
// First, create temporary variables for the shadowed variables
|
|
961
|
+
for varName, tempVarName := range shadowingInfo.TempVariables {
|
|
962
|
+
c.tsw.WriteLiterally("const ")
|
|
963
|
+
c.tsw.WriteLiterally(tempVarName)
|
|
964
|
+
c.tsw.WriteLiterally(" = ")
|
|
965
|
+
|
|
966
|
+
// Check if this is a built-in function and handle it directly
|
|
967
|
+
if c.isBuiltinFunction(varName) {
|
|
968
|
+
c.tsw.WriteLiterally("$.")
|
|
969
|
+
c.tsw.WriteLiterally(varName)
|
|
970
|
+
} else {
|
|
971
|
+
// Get the original object for this shadowed variable
|
|
972
|
+
if originalObj, exists := shadowingInfo.ShadowedVariables[varName]; exists {
|
|
973
|
+
// Create an identifier with the original name and use WriteValueExpr to properly resolve it
|
|
974
|
+
originalIdent := &ast.Ident{Name: varName}
|
|
975
|
+
// Set the identifier in the Uses map so WriteValueExpr can find the object
|
|
976
|
+
c.pkg.TypesInfo.Uses[originalIdent] = originalObj
|
|
977
|
+
c.WriteValueExpr(originalIdent)
|
|
978
|
+
} else {
|
|
979
|
+
// Fallback to literal name if no object found (shouldn't happen in normal cases)
|
|
980
|
+
c.tsw.WriteLiterally(varName)
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
c.tsw.WriteLine("")
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
// Now write the LHS variables (these are new declarations)
|
|
942
987
|
for i, lhsExpr := range stmt.Lhs {
|
|
943
988
|
if i > 0 {
|
|
944
989
|
c.tsw.WriteLiterally(", ")
|
|
@@ -961,40 +1006,164 @@ func (c *GoToTSCompiler) writeShadowedAssignment(stmt *ast.AssignStmt, shadowing
|
|
|
961
1006
|
|
|
962
1007
|
c.tsw.WriteLiterally(" = ")
|
|
963
1008
|
|
|
964
|
-
//
|
|
965
|
-
originalContext := make(map[string]string)
|
|
966
|
-
for varName, tempVarName := range shadowingInfo.TempVariables {
|
|
967
|
-
originalContext[varName] = c.shadowingContext[varName] // backup original
|
|
968
|
-
c.shadowingContext[varName] = tempVarName
|
|
969
|
-
}
|
|
970
|
-
|
|
971
|
-
// Write RHS expressions with shadowing context
|
|
1009
|
+
// Write RHS expressions - but we need to replace shadowed variables with temporary variables
|
|
972
1010
|
for i, rhsExpr := range stmt.Rhs {
|
|
973
1011
|
if i > 0 {
|
|
974
1012
|
c.tsw.WriteLiterally(", ")
|
|
975
1013
|
}
|
|
976
|
-
if err := c.
|
|
977
|
-
// Restore context on error
|
|
978
|
-
for varName := range shadowingInfo.TempVariables {
|
|
979
|
-
if original, existed := originalContext[varName]; existed {
|
|
980
|
-
c.shadowingContext[varName] = original
|
|
981
|
-
} else {
|
|
982
|
-
delete(c.shadowingContext, varName)
|
|
983
|
-
}
|
|
984
|
-
}
|
|
1014
|
+
if err := c.writeShadowedRHSExpression(rhsExpr, shadowingInfo); err != nil {
|
|
985
1015
|
return err
|
|
986
1016
|
}
|
|
987
1017
|
}
|
|
988
1018
|
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
1019
|
+
c.tsw.WriteLine("")
|
|
1020
|
+
return nil
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
// writeShadowedAssignmentWithoutTempVars writes an assignment statement that has variable shadowing,
|
|
1024
|
+
// but assumes temporary variables have already been created outside this scope.
|
|
1025
|
+
func (c *GoToTSCompiler) writeShadowedAssignmentWithoutTempVars(stmt *ast.AssignStmt, shadowingInfo *ShadowingInfo) error {
|
|
1026
|
+
// Write the LHS variables (these are new declarations)
|
|
1027
|
+
for i, lhsExpr := range stmt.Lhs {
|
|
1028
|
+
if i > 0 {
|
|
1029
|
+
c.tsw.WriteLiterally(", ")
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
if ident, ok := lhsExpr.(*ast.Ident); ok {
|
|
1033
|
+
if ident.Name == "_" {
|
|
1034
|
+
c.tsw.WriteLiterally("_")
|
|
1035
|
+
} else {
|
|
1036
|
+
c.tsw.WriteLiterally("let ")
|
|
1037
|
+
c.WriteIdent(ident, false) // Don't use temp variable for LHS
|
|
1038
|
+
}
|
|
993
1039
|
} else {
|
|
994
|
-
|
|
1040
|
+
// For non-identifier LHS (shouldn't happen in := assignments), write normally
|
|
1041
|
+
if err := c.WriteValueExpr(lhsExpr); err != nil {
|
|
1042
|
+
return err
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
c.tsw.WriteLiterally(" = ")
|
|
1048
|
+
|
|
1049
|
+
// Write RHS expressions - replace shadowed variables with temporary variables
|
|
1050
|
+
for i, rhsExpr := range stmt.Rhs {
|
|
1051
|
+
if i > 0 {
|
|
1052
|
+
c.tsw.WriteLiterally(", ")
|
|
1053
|
+
}
|
|
1054
|
+
if err := c.writeShadowedRHSExpression(rhsExpr, shadowingInfo); err != nil {
|
|
1055
|
+
return err
|
|
995
1056
|
}
|
|
996
1057
|
}
|
|
997
1058
|
|
|
998
1059
|
c.tsw.WriteLine("")
|
|
999
1060
|
return nil
|
|
1000
1061
|
}
|
|
1062
|
+
|
|
1063
|
+
// writeShadowedRHSExpression writes a RHS expression, replacing shadowed variables with temporary variables
|
|
1064
|
+
func (c *GoToTSCompiler) writeShadowedRHSExpression(expr ast.Expr, shadowingInfo *ShadowingInfo) error {
|
|
1065
|
+
switch e := expr.(type) {
|
|
1066
|
+
case *ast.Ident:
|
|
1067
|
+
// Check if this identifier is a shadowed variable
|
|
1068
|
+
if tempVar, isShadowed := shadowingInfo.TempVariables[e.Name]; isShadowed {
|
|
1069
|
+
// Use the temporary variable instead
|
|
1070
|
+
c.tsw.WriteLiterally(tempVar)
|
|
1071
|
+
} else {
|
|
1072
|
+
// Use the original identifier
|
|
1073
|
+
c.WriteIdent(e, true)
|
|
1074
|
+
}
|
|
1075
|
+
return nil
|
|
1076
|
+
|
|
1077
|
+
case *ast.CallExpr:
|
|
1078
|
+
// Handle function calls - replace identifiers in arguments with temp variables
|
|
1079
|
+
if err := c.writeShadowedRHSExpression(e.Fun, shadowingInfo); err != nil {
|
|
1080
|
+
return err
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
// Add non-null assertion for function calls (same logic as WriteCallExpr)
|
|
1084
|
+
c.addNonNullAssertion(e.Fun)
|
|
1085
|
+
|
|
1086
|
+
c.tsw.WriteLiterally("(")
|
|
1087
|
+
for i, arg := range e.Args {
|
|
1088
|
+
if i > 0 {
|
|
1089
|
+
c.tsw.WriteLiterally(", ")
|
|
1090
|
+
}
|
|
1091
|
+
if err := c.writeShadowedRHSExpression(arg, shadowingInfo); err != nil {
|
|
1092
|
+
return err
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
c.tsw.WriteLiterally(")")
|
|
1096
|
+
return nil
|
|
1097
|
+
|
|
1098
|
+
case *ast.SelectorExpr:
|
|
1099
|
+
// Handle selector expressions (e.g., obj.Method)
|
|
1100
|
+
if err := c.writeShadowedRHSExpression(e.X, shadowingInfo); err != nil {
|
|
1101
|
+
return err
|
|
1102
|
+
}
|
|
1103
|
+
c.tsw.WriteLiterally(".")
|
|
1104
|
+
c.WriteIdent(e.Sel, true)
|
|
1105
|
+
return nil
|
|
1106
|
+
|
|
1107
|
+
case *ast.IndexExpr:
|
|
1108
|
+
// Handle index expressions (e.g., arr[i])
|
|
1109
|
+
if err := c.writeShadowedRHSExpression(e.X, shadowingInfo); err != nil {
|
|
1110
|
+
return err
|
|
1111
|
+
}
|
|
1112
|
+
c.tsw.WriteLiterally("[")
|
|
1113
|
+
if err := c.writeShadowedRHSExpression(e.Index, shadowingInfo); err != nil {
|
|
1114
|
+
return err
|
|
1115
|
+
}
|
|
1116
|
+
c.tsw.WriteLiterally("]")
|
|
1117
|
+
return nil
|
|
1118
|
+
|
|
1119
|
+
case *ast.UnaryExpr:
|
|
1120
|
+
// Handle unary expressions (e.g., &x, -x)
|
|
1121
|
+
c.tsw.WriteLiterally(e.Op.String())
|
|
1122
|
+
return c.writeShadowedRHSExpression(e.X, shadowingInfo)
|
|
1123
|
+
|
|
1124
|
+
case *ast.BinaryExpr:
|
|
1125
|
+
// Handle binary expressions (e.g., x + y)
|
|
1126
|
+
if err := c.writeShadowedRHSExpression(e.X, shadowingInfo); err != nil {
|
|
1127
|
+
return err
|
|
1128
|
+
}
|
|
1129
|
+
c.tsw.WriteLiterally(" ")
|
|
1130
|
+
c.tsw.WriteLiterally(e.Op.String())
|
|
1131
|
+
c.tsw.WriteLiterally(" ")
|
|
1132
|
+
return c.writeShadowedRHSExpression(e.Y, shadowingInfo)
|
|
1133
|
+
|
|
1134
|
+
case *ast.ParenExpr:
|
|
1135
|
+
// Handle parenthesized expressions
|
|
1136
|
+
c.tsw.WriteLiterally("(")
|
|
1137
|
+
if err := c.writeShadowedRHSExpression(e.X, shadowingInfo); err != nil {
|
|
1138
|
+
return err
|
|
1139
|
+
}
|
|
1140
|
+
c.tsw.WriteLiterally(")")
|
|
1141
|
+
return nil
|
|
1142
|
+
|
|
1143
|
+
default:
|
|
1144
|
+
// For other expression types, fall back to normal WriteValueExpr
|
|
1145
|
+
return c.WriteValueExpr(expr)
|
|
1146
|
+
}
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
// isBuiltinFunction checks if the given name is a Go built-in function
|
|
1150
|
+
func (c *GoToTSCompiler) isBuiltinFunction(name string) bool {
|
|
1151
|
+
builtins := map[string]bool{
|
|
1152
|
+
"len": true,
|
|
1153
|
+
"cap": true,
|
|
1154
|
+
"make": true,
|
|
1155
|
+
"new": true,
|
|
1156
|
+
"append": true,
|
|
1157
|
+
"copy": true,
|
|
1158
|
+
"delete": true,
|
|
1159
|
+
"complex": true,
|
|
1160
|
+
"real": true,
|
|
1161
|
+
"imag": true,
|
|
1162
|
+
"close": true,
|
|
1163
|
+
"panic": true,
|
|
1164
|
+
"recover": true,
|
|
1165
|
+
"print": true,
|
|
1166
|
+
"println": true,
|
|
1167
|
+
}
|
|
1168
|
+
return builtins[name]
|
|
1169
|
+
}
|
package/compiler/type.go
CHANGED
|
@@ -656,6 +656,14 @@ func (c *GoToTSCompiler) writeInterfaceStructure(iface *types.Interface, astNode
|
|
|
656
656
|
// Return type
|
|
657
657
|
c.tsw.WriteLiterally(": ")
|
|
658
658
|
results := sig.Results()
|
|
659
|
+
|
|
660
|
+
// Determine if this interface method should be async based on implementations
|
|
661
|
+
isMethodAsync := c.analysis.IsInterfaceMethodAsync(iface, method.Name())
|
|
662
|
+
|
|
663
|
+
if isMethodAsync {
|
|
664
|
+
c.tsw.WriteLiterally("Promise<")
|
|
665
|
+
}
|
|
666
|
+
|
|
659
667
|
if results.Len() == 0 {
|
|
660
668
|
c.tsw.WriteLiterally("void")
|
|
661
669
|
} else if results.Len() == 1 {
|
|
@@ -688,6 +696,11 @@ func (c *GoToTSCompiler) writeInterfaceStructure(iface *types.Interface, astNode
|
|
|
688
696
|
}
|
|
689
697
|
c.tsw.WriteLiterally("]")
|
|
690
698
|
}
|
|
699
|
+
|
|
700
|
+
if isMethodAsync {
|
|
701
|
+
c.tsw.WriteLiterally(">")
|
|
702
|
+
}
|
|
703
|
+
|
|
691
704
|
c.tsw.WriteLine("") // newline for each method
|
|
692
705
|
}
|
|
693
706
|
c.tsw.Indent(-1)
|
|
@@ -10,9 +10,7 @@ export declare function println(...args: any[]): void;
|
|
|
10
10
|
*/
|
|
11
11
|
export declare function panic(...args: any[]): void;
|
|
12
12
|
export type Bytes = Uint8Array | Slice<number>;
|
|
13
|
-
export declare function int(value: number
|
|
14
|
-
valueOf(): number | null;
|
|
15
|
-
}): number;
|
|
13
|
+
export declare function int(value: number): number;
|
|
16
14
|
export declare function multiplyDuration(duration: any, multiplier: number): any;
|
|
17
15
|
/**
|
|
18
16
|
* Normalizes various byte representations into a `Uint8Array` for protobuf compatibility.
|
|
@@ -29,8 +27,6 @@ export declare function multiplyDuration(duration: any, multiplier: number): any
|
|
|
29
27
|
*/
|
|
30
28
|
export declare function normalizeBytes(bytes: Uint8Array | number[] | null | undefined | {
|
|
31
29
|
data: number[];
|
|
32
|
-
} | {
|
|
33
|
-
valueOf(): number[];
|
|
34
30
|
}): Uint8Array;
|
|
35
31
|
/**
|
|
36
32
|
* sortSlice sorts a slice in ascending order.
|
|
@@ -25,35 +25,12 @@ export function int(value) {
|
|
|
25
25
|
// since JavaScript numbers can safely represent integers up to Number.MAX_SAFE_INTEGER
|
|
26
26
|
//
|
|
27
27
|
// For this we use Math.trunc.
|
|
28
|
-
if (typeof value === 'object' && 'valueOf' in value) {
|
|
29
|
-
return Math.trunc(value.valueOf() ?? 0);
|
|
30
|
-
}
|
|
31
28
|
return Math.trunc(value);
|
|
32
29
|
}
|
|
33
30
|
// Duration multiplication helper for time package operations
|
|
34
31
|
// Handles expressions like time.Hour * 24
|
|
35
32
|
export function multiplyDuration(duration, multiplier) {
|
|
36
|
-
//
|
|
37
|
-
if (duration && typeof duration.multiply === 'function') {
|
|
38
|
-
return duration.multiply(multiplier);
|
|
39
|
-
}
|
|
40
|
-
// Check if duration has a valueOf method for numeric operations
|
|
41
|
-
if (duration && typeof duration.valueOf === 'function') {
|
|
42
|
-
const numValue = duration.valueOf();
|
|
43
|
-
// Return an object with the same structure but multiplied value
|
|
44
|
-
if (typeof numValue === 'number') {
|
|
45
|
-
// Try to create a new instance of the same type
|
|
46
|
-
if (duration.constructor) {
|
|
47
|
-
return new duration.constructor(numValue * multiplier);
|
|
48
|
-
}
|
|
49
|
-
// Fallback: return a simple object with valueOf
|
|
50
|
-
return {
|
|
51
|
-
valueOf: () => numValue * multiplier,
|
|
52
|
-
toString: () => (numValue * multiplier).toString() + 'ns',
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
// Fallback for simple numeric values
|
|
33
|
+
// Duration is now a number type alias, so just multiply directly
|
|
57
34
|
if (typeof duration === 'number') {
|
|
58
35
|
return duration * multiplier;
|
|
59
36
|
}
|
|
@@ -90,16 +67,6 @@ export function normalizeBytes(bytes) {
|
|
|
90
67
|
if (Array.isArray(bytes)) {
|
|
91
68
|
return new Uint8Array(bytes);
|
|
92
69
|
}
|
|
93
|
-
// Handle objects with valueOf() method that returns a number array
|
|
94
|
-
if (bytes &&
|
|
95
|
-
typeof bytes === 'object' &&
|
|
96
|
-
'valueOf' in bytes &&
|
|
97
|
-
typeof bytes.valueOf === 'function') {
|
|
98
|
-
const value = bytes.valueOf();
|
|
99
|
-
if (Array.isArray(value)) {
|
|
100
|
-
return new Uint8Array(value);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
70
|
throw new Error(`Cannot normalize bytes of type ${typeof bytes}: ${bytes}`);
|
|
104
71
|
}
|
|
105
72
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtin.js","sourceRoot":"","sources":["../../../gs/builtin/builtin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,GAAG,IAAW;IACpC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,GAAG,IAAW;IAClC,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AACvE,CAAC;AAMD,mFAAmF;AACnF,iGAAiG;AACjG,MAAM,UAAU,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"builtin.js","sourceRoot":"","sources":["../../../gs/builtin/builtin.ts"],"names":[],"mappings":"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"}
|