goscript 0.0.56 → 0.0.57

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.
@@ -589,6 +589,12 @@ func (v *analysisVisitor) Visit(node ast.Node) ast.Visitor {
589
589
 
590
590
  case *ast.TypeAssertExpr:
591
591
  return v.visitTypeAssertExpr(n)
592
+
593
+ case *ast.CompositeLit:
594
+ // Traverse into composite literal elements to detect &variable expressions
595
+ // This is important for cases like: arr := []interface{}{value1, &value2}
596
+ // where value2 needs to be marked as NeedsVarRef due to the &value2 usage
597
+ return v.visitCompositeLit(n)
592
598
  }
593
599
 
594
600
  // For all other nodes, continue traversal
@@ -869,10 +875,89 @@ func (v *analysisVisitor) visitIfStmt(n *ast.IfStmt) ast.Visitor {
869
875
  return v
870
876
  }
871
877
 
872
- // visitTypeAssertExpr handles type assertion expression analysis
873
- func (v *analysisVisitor) visitTypeAssertExpr(n *ast.TypeAssertExpr) ast.Visitor {
874
- // Track interface implementations when we see type assertions
875
- v.trackTypeAssertion(n)
878
+ // visitTypeAssertExpr handles type assertion analysis for interface method implementations
879
+ func (v *analysisVisitor) visitTypeAssertExpr(typeAssert *ast.TypeAssertExpr) ast.Visitor {
880
+ // Get the type being asserted to
881
+ assertedType := v.pkg.TypesInfo.TypeOf(typeAssert.Type)
882
+ if assertedType == nil {
883
+ return v
884
+ }
885
+
886
+ // Check if the asserted type is an interface
887
+ interfaceType, isInterface := assertedType.Underlying().(*types.Interface)
888
+ if !isInterface {
889
+ return v
890
+ }
891
+
892
+ // Get the type of the expression being asserted
893
+ exprType := v.pkg.TypesInfo.TypeOf(typeAssert.X)
894
+ if exprType == nil {
895
+ return v
896
+ }
897
+
898
+ // Handle pointer types by getting the element type
899
+ if ptrType, isPtr := exprType.(*types.Pointer); isPtr {
900
+ exprType = ptrType.Elem()
901
+ }
902
+
903
+ // Check if the expression type is a named struct type
904
+ namedType, isNamed := exprType.(*types.Named)
905
+ if !isNamed {
906
+ return v
907
+ }
908
+
909
+ // For each method in the interface, check if the struct implements it
910
+ for i := 0; i < interfaceType.NumExplicitMethods(); i++ {
911
+ interfaceMethod := interfaceType.ExplicitMethod(i)
912
+
913
+ // Find the corresponding method in the struct type
914
+ structMethod := v.findStructMethod(namedType, interfaceMethod.Name())
915
+ if structMethod != nil {
916
+ // Determine if this struct method is async using unified system
917
+ isAsync := false
918
+ if obj := structMethod; obj != nil {
919
+ isAsync = v.analysis.IsAsyncFunc(obj)
920
+ }
921
+
922
+ // Track this interface implementation
923
+ v.analysis.trackInterfaceImplementation(interfaceType, namedType, structMethod, isAsync)
924
+ }
925
+ }
926
+ return v
927
+ }
928
+
929
+ // visitCompositeLit analyzes composite literals for address-of expressions
930
+ // This is important for detecting cases like: arr := []interface{}{value1, &value2}
931
+ // where value2 needs to be marked as NeedsVarRef due to the &value2 usage
932
+ func (v *analysisVisitor) visitCompositeLit(compLit *ast.CompositeLit) ast.Visitor {
933
+ // Analyze each element of the composite literal
934
+ for _, elt := range compLit.Elts {
935
+ // Handle both direct elements and key-value pairs
936
+ var expr ast.Expr
937
+ if kv, ok := elt.(*ast.KeyValueExpr); ok {
938
+ // For key-value pairs, analyze the value expression
939
+ expr = kv.Value
940
+ } else {
941
+ // For direct elements, analyze the element expression
942
+ expr = elt
943
+ }
944
+
945
+ // Check if this element is an address-of expression
946
+ if unaryExpr, ok := expr.(*ast.UnaryExpr); ok && unaryExpr.Op == token.AND {
947
+ // Found &something in the composite literal
948
+ if ident, ok := unaryExpr.X.(*ast.Ident); ok {
949
+ // Found &variable - mark the variable as needing VarRef
950
+ if obj := v.pkg.TypesInfo.ObjectOf(ident); obj != nil {
951
+ // Record that this variable has its address taken
952
+ usageInfo := v.getOrCreateUsageInfo(obj)
953
+ usageInfo.Destinations = append(usageInfo.Destinations, AssignmentInfo{
954
+ Object: nil, // No specific destination object for composite literals
955
+ Type: AddressOfAssignment,
956
+ })
957
+ }
958
+ }
959
+ }
960
+ }
876
961
  return v
877
962
  }
878
963
 
@@ -56,10 +56,12 @@ func (c *GoToTSCompiler) writeAssignmentCore(lhs, rhs []ast.Expr, tok token.Toke
56
56
 
57
57
  // Handle the RHS expression (potentially adding .clone() for structs)
58
58
  if shouldApplyClone(c.pkg, rhs[0]) {
59
+ // When cloning for value assignment, mark the result as struct value
60
+ c.tsw.WriteLiterally("$.markAsStructValue(")
59
61
  if err := c.WriteValueExpr(rhs[0]); err != nil {
60
62
  return err
61
63
  }
62
- c.tsw.WriteLiterally(".clone()")
64
+ c.tsw.WriteLiterally(".clone())")
63
65
  } else {
64
66
  if err := c.WriteValueExpr(rhs[0]); err != nil {
65
67
  return err
@@ -338,8 +340,37 @@ func (c *GoToTSCompiler) writeAssignmentCore(lhs, rhs []ast.Expr, tok token.Toke
338
340
  }
339
341
  }
340
342
 
343
+ // Check for pointer-to-pointer assignment
344
+ if rhsIsIdent && rhsObj != nil && len(lhs) == 1 {
345
+ lhsType := c.pkg.TypesInfo.TypeOf(lhs[0])
346
+ rhsType := rhsObj.Type()
347
+
348
+ if lhsType != nil && rhsType != nil {
349
+ // Check if both LHS and RHS are pointer types
350
+ if _, lhsIsPtr := lhsType.(*types.Pointer); lhsIsPtr {
351
+ if _, rhsIsPtr := rhsType.(*types.Pointer); rhsIsPtr {
352
+ // This is pointer-to-pointer assignment
353
+ // The key question: is the RHS variable itself varref'd?
354
+ // - If RHS is varref'd (like pp1), use .value to get the actual pointer
355
+ // - If RHS is not varref'd (like p1), use the variable directly
356
+
357
+ if c.analysis.NeedsVarRef(rhsObj) {
358
+ // RHS variable is varref'd, so we need its .value to get the actual pointer
359
+ c.WriteIdent(rhsIdent, true) // Add .value access
360
+ } else {
361
+ // RHS variable is not varref'd, so it directly holds the pointer
362
+ c.WriteIdent(rhsIdent, false) // No .value access
363
+ }
364
+ continue
365
+ }
366
+ }
367
+ }
368
+ }
369
+
341
370
  // Handle different cases for struct cloning
342
371
  if shouldApplyClone(c.pkg, r) {
372
+ // When cloning for value assignment, mark the result as struct value
373
+ c.tsw.WriteLiterally("$.markAsStructValue(")
343
374
  // For other expressions, we need to handle variable referenced access differently
344
375
  if _, isIdent := r.(*ast.Ident); isIdent {
345
376
  // For identifiers, WriteValueExpr already adds .value if needed
@@ -357,8 +388,39 @@ func (c *GoToTSCompiler) writeAssignmentCore(lhs, rhs []ast.Expr, tok token.Toke
357
388
  }
358
389
  }
359
390
 
360
- c.tsw.WriteLiterally(".clone()") // Always add clone for struct values
391
+ c.tsw.WriteLiterally(".clone())") // Always add clone for struct values
361
392
  } else {
393
+ // Check if this is a pointer variable assignment to an interface type
394
+ if rhsIsIdent && rhsObj != nil {
395
+ // Check if LHS is interface type and RHS is a pointer variable
396
+ if len(lhs) == 1 {
397
+ lhsType := c.pkg.TypesInfo.TypeOf(lhs[0])
398
+ rhsType := rhsObj.Type()
399
+
400
+ if lhsType != nil && rhsType != nil {
401
+ // Check if LHS is interface and RHS is pointer
402
+ if _, isInterface := lhsType.Underlying().(*types.Interface); isInterface {
403
+ if ptrType, isPtr := rhsType.(*types.Pointer); isPtr {
404
+ // This is pointer-to-interface assignment
405
+ // For pointer variables that point to varrefed values, write without .value
406
+ // We want to pass the VarRef object itself to the interface, not its .value
407
+ if c.analysis.NeedsVarRefAccess(rhsObj) {
408
+ // Write the pointer variable without .value access
409
+ c.WriteIdent(rhsIdent, false)
410
+ continue
411
+ }
412
+
413
+ // Check if this is a struct pointer for the element type
414
+ if _, isStruct := ptrType.Elem().Underlying().(*types.Struct); isStruct {
415
+ // Struct pointer to interface - might need special handling
416
+ // Continue to normal WriteValueExpr handling
417
+ }
418
+ }
419
+ }
420
+ }
421
+ }
422
+ }
423
+
362
424
  // Non-struct case: write RHS normally
363
425
  if err := c.WriteValueExpr(r); err != nil { // RHS is a non-struct value
364
426
  return err
@@ -704,6 +704,9 @@ type GoToTSCompiler struct {
704
704
  pkg *packages.Package
705
705
 
706
706
  analysis *Analysis
707
+
708
+ // Context flags
709
+ insideAddressOf bool // true when processing operand of & operator
707
710
  }
708
711
 
709
712
  // It initializes the compiler with a `TSCodeWriter` for output,
@@ -212,6 +212,7 @@ func (c *GoToTSCompiler) WriteCompositeLit(exp *ast.CompositeLit) error {
212
212
  var structType *types.Struct
213
213
  isStructLiteral := false
214
214
  isAnonymousStruct := false
215
+ needsValueMarkerClose := false // Track if we need to close $.markAsStructValue()
215
216
 
216
217
  if namedType, ok := litType.(*types.Named); ok {
217
218
  if underlyingStruct, ok := namedType.Underlying().(*types.Struct); ok {
@@ -224,8 +225,14 @@ func (c *GoToTSCompiler) WriteCompositeLit(exp *ast.CompositeLit) error {
224
225
  return err
225
226
  }
226
227
  } else {
227
- // Named struct, use constructor
228
- c.tsw.WriteLiterally("new ")
228
+ // Named struct value, use constructor
229
+ if !c.insideAddressOf {
230
+ // Only mark as struct value if not inside address-of operator
231
+ c.tsw.WriteLiterally("$.markAsStructValue(new ")
232
+ needsValueMarkerClose = true
233
+ } else {
234
+ c.tsw.WriteLiterally("new ")
235
+ }
229
236
  c.WriteTypeExpr(exp.Type)
230
237
  }
231
238
  }
@@ -241,8 +248,14 @@ func (c *GoToTSCompiler) WriteCompositeLit(exp *ast.CompositeLit) error {
241
248
  return err
242
249
  }
243
250
  } else {
244
- // Type alias for struct, use constructor
245
- c.tsw.WriteLiterally("new ")
251
+ // Type alias for struct value, use constructor
252
+ if !c.insideAddressOf {
253
+ // Only mark as struct value if not inside address-of operator
254
+ c.tsw.WriteLiterally("$.markAsStructValue(new ")
255
+ needsValueMarkerClose = true
256
+ } else {
257
+ c.tsw.WriteLiterally("new ")
258
+ }
246
259
  c.WriteTypeExpr(exp.Type)
247
260
  }
248
261
  }
@@ -483,6 +496,10 @@ func (c *GoToTSCompiler) WriteCompositeLit(exp *ast.CompositeLit) error {
483
496
  c.tsw.WriteLiterally("}")
484
497
  } else {
485
498
  c.tsw.WriteLiterally("})")
499
+ // Close markAsStructValue wrapper if we opened one
500
+ if needsValueMarkerClose {
501
+ c.tsw.WriteLiterally(")")
502
+ }
486
503
  }
487
504
 
488
505
  } else {
@@ -239,24 +239,24 @@ func (c *GoToTSCompiler) writeMethodValue(exp *ast.SelectorExpr, selection *type
239
239
  // The receiver should be a copy of the dereferenced value
240
240
  c.tsw.WriteLiterally(".value.")
241
241
  c.WriteIdent(exp.Sel, false)
242
- c.tsw.WriteLiterally(".bind(")
242
+ c.tsw.WriteLiterally(".bind($.markAsStructValue(")
243
243
  if err := c.WriteValueExpr(exp.X); err != nil {
244
244
  return fmt.Errorf("failed to write method value receiver for binding: %w", err)
245
245
  }
246
- c.tsw.WriteLiterally("!.value.clone())")
246
+ c.tsw.WriteLiterally("!.value.clone()))")
247
247
  } else if !isPointerReceiver && !baseIsPointer {
248
248
  // Value receiver method on value type: t.Mv
249
249
  // The receiver should be a copy of the value
250
250
  c.tsw.WriteLiterally(".")
251
251
  c.WriteIdent(exp.Sel, false)
252
- c.tsw.WriteLiterally(".bind(")
252
+ c.tsw.WriteLiterally(".bind($.markAsStructValue(")
253
253
  if err := c.WriteValueExpr(exp.X); err != nil {
254
254
  return fmt.Errorf("failed to write method value receiver for binding: %w", err)
255
255
  }
256
256
  if baseIsPointer {
257
257
  c.tsw.WriteLiterally("!")
258
258
  }
259
- c.tsw.WriteLiterally(".clone())")
259
+ c.tsw.WriteLiterally(".clone()))")
260
260
  } else {
261
261
  // Pointer receiver method on pointer type: pt.Mp
262
262
  // The receiver should be the pointer itself
package/compiler/expr.go CHANGED
@@ -382,9 +382,45 @@ func (c *GoToTSCompiler) WriteBinaryExpr(exp *ast.BinaryExpr) error {
382
382
  // Compare the varRef objects directly using === or !==
383
383
  if c.isPointerComparison(exp) {
384
384
  c.tsw.WriteLiterally("(") // Wrap comparison
385
- if err := c.WriteValueExpr(exp.X); err != nil {
386
- return fmt.Errorf("failed to write binary expression left operand: %w", err)
385
+
386
+ // For pointer comparisons, we need to handle variable varref status
387
+ // If a variable is varref'd, we need its .value to get the actual pointer value
388
+
389
+ // Check if operands are varref'd variables
390
+ var leftObj, rightObj types.Object
391
+ leftIsVarRef := false
392
+ rightIsVarRef := false
393
+
394
+ if leftIdent, ok := exp.X.(*ast.Ident); ok {
395
+ leftObj = c.pkg.TypesInfo.ObjectOf(leftIdent)
396
+ if leftObj != nil {
397
+ leftIsVarRef = c.analysis.NeedsVarRef(leftObj)
398
+ }
399
+ }
400
+
401
+ if rightIdent, ok := exp.Y.(*ast.Ident); ok {
402
+ rightObj = c.pkg.TypesInfo.ObjectOf(rightIdent)
403
+ if rightObj != nil {
404
+ rightIsVarRef = c.analysis.NeedsVarRef(rightObj)
405
+ }
387
406
  }
407
+
408
+ // Write left operand
409
+ if leftIdent, ok := exp.X.(*ast.Ident); ok {
410
+ if leftIsVarRef {
411
+ // Variable is varref'd, access its .value to get the pointer
412
+ c.WriteIdent(leftIdent, true)
413
+ } else {
414
+ // Variable is not varref'd, use it directly
415
+ c.WriteIdent(leftIdent, false)
416
+ }
417
+ } else {
418
+ // For non-identifiers, use WriteValueExpr
419
+ if err := c.WriteValueExpr(exp.X); err != nil {
420
+ return fmt.Errorf("failed to write binary expression left operand: %w", err)
421
+ }
422
+ }
423
+
388
424
  c.tsw.WriteLiterally(" ")
389
425
  // Use === for == and !== for !=
390
426
  tokStr := ""
@@ -398,9 +434,23 @@ func (c *GoToTSCompiler) WriteBinaryExpr(exp *ast.BinaryExpr) error {
398
434
  }
399
435
  c.tsw.WriteLiterally(tokStr)
400
436
  c.tsw.WriteLiterally(" ")
401
- if err := c.WriteValueExpr(exp.Y); err != nil {
402
- return fmt.Errorf("failed to write binary expression right operand: %w", err)
437
+
438
+ // Write right operand
439
+ if rightIdent, ok := exp.Y.(*ast.Ident); ok {
440
+ if rightIsVarRef {
441
+ // Variable is varref'd, access its .value to get the pointer
442
+ c.WriteIdent(rightIdent, true)
443
+ } else {
444
+ // Variable is not varref'd, use it directly
445
+ c.WriteIdent(rightIdent, false)
446
+ }
447
+ } else {
448
+ // For non-identifiers, use WriteValueExpr
449
+ if err := c.WriteValueExpr(exp.Y); err != nil {
450
+ return fmt.Errorf("failed to write binary expression right operand: %w", err)
451
+ }
403
452
  }
453
+
404
454
  c.tsw.WriteLiterally(")") // Close wrap
405
455
  return nil
406
456
  }
@@ -503,12 +553,21 @@ func (c *GoToTSCompiler) WriteUnaryExpr(exp *ast.UnaryExpr) error {
503
553
  }
504
554
  }
505
555
 
556
+ // Note: With inversion to markAsStructValue, we no longer mark &CompositeLit{}
557
+ // since we now mark the CompositeLit{} (struct values) instead of pointers
558
+
506
559
  // Otherwise (&unvarrefedVar, &CompositeLit{}, &FuncCall(), etc.),
507
560
  // the address-of operator in Go, when used to create a pointer,
508
561
  // translates to simply evaluating the operand in TypeScript.
509
562
  // The resulting value (e.g., a new object instance) acts as the "pointer".
510
563
  // VarRefing decisions are handled at the assignment site based on the LHS variable.
511
- if err := c.WriteValueExpr(exp.X); err != nil {
564
+
565
+ // Set context flag to prevent marking composite literals as struct values
566
+ c.insideAddressOf = true
567
+ err := c.WriteValueExpr(exp.X)
568
+ c.insideAddressOf = false
569
+
570
+ if err != nil {
512
571
  return fmt.Errorf("failed to write &-operand: %w", err)
513
572
  }
514
573
 
@@ -20,9 +20,13 @@ import (
20
20
  // - Wrapper methods for promoted fields and methods from embedded structs,
21
21
  // ensuring correct access and behavior.
22
22
  func (c *GoToTSCompiler) WriteStructTypeSpec(a *ast.TypeSpec, t *ast.StructType) error {
23
- // Always export types for cross-file imports within the same package
24
- // This allows unexported Go types to be imported by other files in the same package
25
- c.tsw.WriteLiterally("export ")
23
+ isInsideFunction := false
24
+ if nodeInfo := c.analysis.NodeData[a]; nodeInfo != nil {
25
+ isInsideFunction = nodeInfo.IsInsideFunction
26
+ }
27
+ if !isInsideFunction {
28
+ c.tsw.WriteLiterally("export ")
29
+ }
26
30
  c.tsw.WriteLiterally("class ")
27
31
  if err := c.WriteValueExpr(a.Name); err != nil {
28
32
  return err
@@ -227,9 +227,8 @@ func (c *GoToTSCompiler) WriteValueSpec(a *ast.ValueSpec) error {
227
227
  }
228
228
  } else {
229
229
  // Case: &compositeLiteral or &otherExpression
230
- // For composite literals and other expressions, just write the expression directly
231
- // Example: &MyStruct{} -> new MyStruct({})
232
- if err := c.WriteValueExpr(unaryExpr.X); err != nil {
230
+ // Let WriteUnaryExpr handle this properly (note: markAsStructValue is now applied in WriteCompositeLit)
231
+ if err := c.WriteValueExpr(unaryExpr); err != nil {
233
232
  return err
234
233
  }
235
234
  }
@@ -241,10 +240,12 @@ func (c *GoToTSCompiler) WriteValueSpec(a *ast.ValueSpec) error {
241
240
  if isWrapperType {
242
241
  // For wrapper types, no constructor wrapping needed
243
242
  if shouldApplyClone(c.pkg, initializerExpr) {
243
+ // When cloning for value assignment, mark the result as struct value
244
+ c.tsw.WriteLiterally("$.markAsStructValue(")
244
245
  if err := c.WriteValueExpr(initializerExpr); err != nil {
245
246
  return err
246
247
  }
247
- c.tsw.WriteLiterally(".clone()")
248
+ c.tsw.WriteLiterally(".clone())")
248
249
  } else {
249
250
  if err := c.WriteValueExpr(initializerExpr); err != nil {
250
251
  return err
@@ -292,12 +293,14 @@ func (c *GoToTSCompiler) WriteValueSpec(a *ast.ValueSpec) error {
292
293
  } else {
293
294
  // Regular initializer for named type (e.g., function call that returns the type)
294
295
  if shouldApplyClone(c.pkg, initializerExpr) {
296
+ // When cloning for value assignment, mark the result as struct value
297
+ c.tsw.WriteLiterally("$.markAsStructValue(")
295
298
  if err := c.WriteValueExpr(initializerExpr); err != nil {
296
299
  return err
297
300
  }
298
- c.tsw.WriteLiterally(".clone()")
301
+ c.tsw.WriteLiterally(".clone())")
299
302
  } else {
300
- if err := c.WriteValueExpr(initializerExpr); err != nil {
303
+ if err := c.writeInitializerForInterface(initializerExpr, goType); err != nil {
301
304
  return err
302
305
  }
303
306
  }
@@ -305,12 +308,14 @@ func (c *GoToTSCompiler) WriteValueSpec(a *ast.ValueSpec) error {
305
308
  } else {
306
309
  // Named type without methods, handle normally
307
310
  if shouldApplyClone(c.pkg, initializerExpr) {
311
+ // When cloning for value assignment, mark the result as struct value
312
+ c.tsw.WriteLiterally("$.markAsStructValue(")
308
313
  if err := c.WriteValueExpr(initializerExpr); err != nil {
309
314
  return err
310
315
  }
311
- c.tsw.WriteLiterally(".clone()")
316
+ c.tsw.WriteLiterally(".clone())")
312
317
  } else {
313
- if err := c.WriteValueExpr(initializerExpr); err != nil {
318
+ if err := c.writeInitializerForInterface(initializerExpr, goType); err != nil {
314
319
  return err
315
320
  }
316
321
  }
@@ -319,12 +324,15 @@ func (c *GoToTSCompiler) WriteValueSpec(a *ast.ValueSpec) error {
319
324
  } else {
320
325
  // Regular initializer, clone if needed
321
326
  if shouldApplyClone(c.pkg, initializerExpr) {
327
+ // When cloning for value assignment, mark the result as struct value
328
+ c.tsw.WriteLiterally("$.markAsStructValue(")
322
329
  if err := c.WriteValueExpr(initializerExpr); err != nil {
323
330
  return err
324
331
  }
325
- c.tsw.WriteLiterally(".clone()")
332
+ c.tsw.WriteLiterally(".clone())")
326
333
  } else {
327
- if err := c.WriteValueExpr(initializerExpr); err != nil {
334
+ // Check if this is a pointer variable assigned to interface
335
+ if err := c.writeInitializerForInterface(initializerExpr, goType); err != nil {
328
336
  return err
329
337
  }
330
338
  }
@@ -399,3 +407,26 @@ func (c *GoToTSCompiler) WriteValueSpec(a *ast.ValueSpec) error {
399
407
  c.tsw.WriteLine("") // Use WriteLine instead of WriteLine(";")
400
408
  return nil
401
409
  }
410
+
411
+ // writeInitializerForInterface handles writing initializer expressions for interface variables,
412
+ // with special handling for pointer variable assignments to avoid automatic .value dereferencing
413
+ func (c *GoToTSCompiler) writeInitializerForInterface(initializerExpr ast.Expr, goType types.Type) error {
414
+ // Check if this is a pointer variable assigned to interface
415
+ if rhsIdent, isIdent := initializerExpr.(*ast.Ident); isIdent {
416
+ if rhsObj := c.pkg.TypesInfo.Uses[rhsIdent]; rhsObj != nil {
417
+ // Check if LHS is interface and RHS is pointer
418
+ if _, isInterface := goType.Underlying().(*types.Interface); isInterface {
419
+ if _, isPtr := rhsObj.Type().(*types.Pointer); isPtr {
420
+ // For pointer variables that point to varrefed values, write without .value
421
+ // We want to pass the VarRef object itself to the interface, not its .value
422
+ if c.analysis.NeedsVarRefAccess(rhsObj) {
423
+ c.WriteIdent(rhsIdent, false)
424
+ return nil
425
+ }
426
+ }
427
+ }
428
+ }
429
+ }
430
+ // Default case: use regular WriteValueExpr
431
+ return c.WriteValueExpr(initializerExpr)
432
+ }
package/compiler/spec.go CHANGED
@@ -130,7 +130,7 @@ func (c *GoToTSCompiler) writeRegularFieldInitializer(fieldName string, fieldTyp
130
130
  // Check if this is a struct value type that needs cloning
131
131
  if c.isStructValueType(fieldType) {
132
132
  structTypeNameForClone := c.getTypeString(fieldType)
133
- c.tsw.WriteLiterallyf("init?.%s?.clone() ?? new %s()", fieldName, structTypeNameForClone)
133
+ c.tsw.WriteLiterallyf("init?.%s ? $.markAsStructValue(init.%s.clone()) : new %s()", fieldName, fieldName, structTypeNameForClone)
134
134
  return
135
135
  }
136
136
 
@@ -664,7 +664,7 @@ func (c *GoToTSCompiler) writeClonedFieldInitializer(fieldName string, fieldType
664
664
  if named, isNamed := trueType.(*types.Named); isNamed {
665
665
  _, isUnderlyingStruct := named.Underlying().(*types.Struct)
666
666
  if isUnderlyingStruct && !isPointerToStruct { // Is a value struct
667
- c.tsw.WriteLiterallyf("this._fields.%s.value.clone()", fieldName)
667
+ c.tsw.WriteLiterallyf("$.markAsStructValue(this._fields.%s.value.clone())", fieldName)
668
668
  } else { // Is a pointer to a struct, or not a struct
669
669
  c.tsw.WriteLiterallyf("this._fields.%s.value", fieldName)
670
670
  }
@@ -672,15 +672,30 @@ func (c *GoToTSCompiler) writeClonedFieldInitializer(fieldName string, fieldType
672
672
  c.tsw.WriteLiterallyf("this._fields.%s.value", fieldName)
673
673
  }
674
674
  } else {
675
+ // Check if this is a pointer type (nullable) or value type (non-nullable)
676
+ isPointerType := false
677
+ actualType := fieldType
678
+ if ptr, ok := fieldType.(*types.Pointer); ok {
679
+ isPointerType = true
680
+ actualType = ptr.Elem()
681
+ }
682
+
683
+ // Check if the actual type (after dereferencing pointer) is a struct
675
684
  isValueTypeStruct := false
676
- if named, ok := fieldType.(*types.Named); ok {
685
+ if named, ok := actualType.(*types.Named); ok {
677
686
  if _, isStruct := named.Underlying().(*types.Struct); isStruct {
678
687
  isValueTypeStruct = true
679
688
  }
680
689
  }
681
690
 
682
691
  if isValueTypeStruct {
683
- c.tsw.WriteLiterallyf("this._fields.%s.value?.clone() ?? null", fieldName)
692
+ if isPointerType {
693
+ // Nullable struct pointer: field could be nil, use conditional
694
+ c.tsw.WriteLiterallyf("this._fields.%s.value ? $.markAsStructValue(this._fields.%s.value.clone()) : null", fieldName, fieldName)
695
+ } else {
696
+ // Non-nullable struct value: field is always present, no conditional needed
697
+ c.tsw.WriteLiterallyf("$.markAsStructValue(this._fields.%s.value.clone())", fieldName)
698
+ }
684
699
  } else {
685
700
  c.tsw.WriteLiterallyf("this._fields.%s.value", fieldName)
686
701
  }
package/compiler/stmt.go CHANGED
@@ -1023,30 +1023,74 @@ func (c *GoToTSCompiler) writeShadowedAssignment(stmt *ast.AssignStmt, shadowing
1023
1023
  // writeShadowedAssignmentWithoutTempVars writes an assignment statement that has variable shadowing,
1024
1024
  // but assumes temporary variables have already been created outside this scope.
1025
1025
  func (c *GoToTSCompiler) writeShadowedAssignmentWithoutTempVars(stmt *ast.AssignStmt, shadowingInfo *ShadowingInfo) error {
1026
- // Write the LHS variables (these are new declarations)
1026
+ if len(stmt.Rhs) == 1 {
1027
+ if typeAssert, isTypeAssert := stmt.Rhs[0].(*ast.TypeAssertExpr); isTypeAssert {
1028
+ if len(stmt.Lhs) != 2 {
1029
+ return fmt.Errorf("type assertion assignment requires 2 LHS, got %d", len(stmt.Lhs))
1030
+ }
1031
+ valueExpr := stmt.Lhs[0]
1032
+ okExpr := stmt.Lhs[1]
1033
+ valueIdent, valueIsIdent := valueExpr.(*ast.Ident)
1034
+ okIdent, okIsIdent := okExpr.(*ast.Ident)
1035
+ if valueIsIdent && okIsIdent {
1036
+ valueName := valueIdent.Name
1037
+ okName := okIdent.Name
1038
+ valueIsBlank := valueName == "_"
1039
+ okIsBlank := okName == "_"
1040
+ if valueIsBlank && okIsBlank {
1041
+ // Both blank, evaluate RHS for side effects
1042
+ if err := c.writeShadowedRHSExpression(typeAssert.X, shadowingInfo); err != nil {
1043
+ return err
1044
+ }
1045
+ c.tsw.WriteLine("")
1046
+ return nil
1047
+ }
1048
+ c.tsw.WriteLiterally("let { ")
1049
+ var parts []string
1050
+ if !valueIsBlank {
1051
+ parts = append(parts, "value: "+valueName)
1052
+ }
1053
+ if !okIsBlank {
1054
+ parts = append(parts, "ok: "+okName)
1055
+ }
1056
+ c.tsw.WriteLiterally(strings.Join(parts, ", "))
1057
+ c.tsw.WriteLiterally(" } = $.typeAssert<")
1058
+ c.WriteTypeExpr(typeAssert.Type)
1059
+ c.tsw.WriteLiterally(">(")
1060
+ if err := c.writeShadowedRHSExpression(typeAssert.X, shadowingInfo); err != nil {
1061
+ return err
1062
+ }
1063
+ c.tsw.WriteLiterally(", ")
1064
+ c.writeTypeDescription(typeAssert.Type)
1065
+ c.tsw.WriteLiterally(")")
1066
+ c.tsw.WriteLine("")
1067
+ return nil
1068
+ }
1069
+ }
1070
+ }
1071
+
1072
+ var firstDecl = true
1027
1073
  for i, lhsExpr := range stmt.Lhs {
1028
1074
  if i > 0 {
1029
1075
  c.tsw.WriteLiterally(", ")
1030
1076
  }
1031
-
1032
1077
  if ident, ok := lhsExpr.(*ast.Ident); ok {
1033
- if ident.Name == "_" {
1034
- c.tsw.WriteLiterally("_")
1078
+ if ident.Name != "_" {
1079
+ if firstDecl {
1080
+ c.tsw.WriteLiterally("let ")
1081
+ firstDecl = false
1082
+ }
1083
+ c.WriteIdent(ident, false)
1035
1084
  } else {
1036
- c.tsw.WriteLiterally("let ")
1037
- c.WriteIdent(ident, false) // Don't use temp variable for LHS
1085
+ c.tsw.WriteLiterally("_")
1038
1086
  }
1039
1087
  } else {
1040
- // For non-identifier LHS (shouldn't happen in := assignments), write normally
1041
1088
  if err := c.WriteValueExpr(lhsExpr); err != nil {
1042
1089
  return err
1043
1090
  }
1044
1091
  }
1045
1092
  }
1046
-
1047
1093
  c.tsw.WriteLiterally(" = ")
1048
-
1049
- // Write RHS expressions - replace shadowed variables with temporary variables
1050
1094
  for i, rhsExpr := range stmt.Rhs {
1051
1095
  if i > 0 {
1052
1096
  c.tsw.WriteLiterally(", ")
@@ -1055,7 +1099,6 @@ func (c *GoToTSCompiler) writeShadowedAssignmentWithoutTempVars(stmt *ast.Assign
1055
1099
  return err
1056
1100
  }
1057
1101
  }
1058
-
1059
1102
  c.tsw.WriteLine("")
1060
1103
  return nil
1061
1104
  }
@@ -153,6 +153,7 @@ export interface TypeAssertResult<T> {
153
153
  ok: boolean;
154
154
  }
155
155
  export declare function areTypeInfosIdentical(type1InfoOrName: string | TypeInfo, type2InfoOrName: string | TypeInfo): boolean;
156
+ export declare function markAsStructValue<T>(value: T): T;
156
157
  /**
157
158
  * Performs a type assertion on a value against a specified type.
158
159
  * Returns an object containing the value (cast to type T) and a boolean indicating success.
@@ -240,7 +240,9 @@ function matchesStructType(value, info) {
240
240
  return false;
241
241
  // For named struct types with constructors, use instanceof (nominal matching)
242
242
  if (info.ctor && value instanceof info.ctor) {
243
- return true;
243
+ // With inversion: struct value assertions should ONLY match structs marked as values
244
+ // In Go: j.(MyStruct) should only succeed if j contains a struct value (not pointer)
245
+ return isMarkedAsStructValue(value);
244
246
  }
245
247
  // For named struct types with constructors, if instanceof fails, return false
246
248
  // This ensures named struct types use exact type matching
@@ -403,6 +405,19 @@ function matchesArrayOrSliceType(value, info) {
403
405
  }
404
406
  return true;
405
407
  }
408
+ // Symbol used to mark struct instances that represent values (not pointers)
409
+ const STRUCT_VALUE_MARKER = Symbol('structValue');
410
+ // Mark a struct instance as representing a value (not pointer)
411
+ export function markAsStructValue(value) {
412
+ if (typeof value === 'object' && value !== null) {
413
+ value[STRUCT_VALUE_MARKER] = true;
414
+ }
415
+ return value;
416
+ }
417
+ // Check if a struct instance is marked as a value
418
+ function isMarkedAsStructValue(value) {
419
+ return typeof value === 'object' && value !== null && value[STRUCT_VALUE_MARKER] === true;
420
+ }
406
421
  /**
407
422
  * Checks if a value matches a pointer type info.
408
423
  *
@@ -412,21 +427,47 @@ function matchesArrayOrSliceType(value, info) {
412
427
  */
413
428
  function matchesPointerType(value, info) {
414
429
  // Allow null/undefined values to match pointer types to support nil pointer assertions
415
- // This enables Go's nil pointer type assertions like `ptr, ok := i.(*SomeType)` to work correctly
416
430
  if (value === null || value === undefined) {
417
431
  return true;
418
432
  }
419
- // Check if the value is a VarRef (has a 'value' property)
420
- if (typeof value !== 'object' || !('value' in value)) {
433
+ if (typeof value !== 'object' || value === null) {
421
434
  return false;
422
435
  }
423
436
  if (!isPointerTypeInfo(info))
424
437
  return false;
425
- if (info.elemType) {
426
- const elemTypeInfo = normalizeTypeInfo(info.elemType);
438
+ if (!info.elemType)
439
+ return false;
440
+ let elem = info.elemType;
441
+ let elemName;
442
+ if (typeof elem === 'string') {
443
+ elemName = elem;
444
+ }
445
+ else if (elem.name) {
446
+ elemName = elem.name;
447
+ }
448
+ else {
449
+ return false;
450
+ }
451
+ // Check if this is a registered struct type
452
+ const registered = typeRegistry.get(elemName);
453
+ if (registered && registered.kind === TypeKind.Struct && registered.ctor) {
454
+ // For struct types, check if the value is marked as a pointer or is a VarRef
455
+ if ('value' in value) {
456
+ // VarRef case - check the inner value
457
+ let elemTypeInfo = normalizeTypeInfo(elem);
458
+ return matchesType(value.value, elemTypeInfo);
459
+ }
460
+ // Direct struct instance - with inversion, only match if NOT marked as value (i.e., is a pointer)
461
+ return value instanceof registered.ctor && !isMarkedAsStructValue(value);
462
+ }
463
+ else {
464
+ // For non-struct types, only VarRef objects should match
465
+ if (!('value' in value)) {
466
+ return false;
467
+ }
468
+ let elemTypeInfo = normalizeTypeInfo(elem);
427
469
  return matchesType(value.value, elemTypeInfo);
428
470
  }
429
- return true;
430
471
  }
431
472
  /**
432
473
  * Checks if a value matches a function type info.
@@ -576,6 +617,12 @@ export function typeAssert(value, typeInfo) {
576
617
  }
577
618
  const matches = matchesType(value, normalizedType);
578
619
  if (matches) {
620
+ // Special handling for pointer type assertions:
621
+ // If the value is a VarRef and we're asserting to a pointer type,
622
+ // return the inner value (value.value), not the VarRef object itself
623
+ if (isPointerTypeInfo(normalizedType) && typeof value === 'object' && value !== null && 'value' in value) {
624
+ return { value: value.value, ok: true };
625
+ }
579
626
  return { value: value, ok: true };
580
627
  }
581
628
  // If we get here, the assertion failed
@@ -1 +1 @@
1
- {"version":3,"file":"type.js","sourceRoot":"","sources":["../../../gs/builtin/type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../../../gs/builtin/type.ts"],"names":[],"mappings":"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"}
@@ -445,7 +445,9 @@ function matchesStructType(value: any, info: TypeInfo): boolean {
445
445
 
446
446
  // For named struct types with constructors, use instanceof (nominal matching)
447
447
  if (info.ctor && value instanceof info.ctor) {
448
- return true
448
+ // With inversion: struct value assertions should ONLY match structs marked as values
449
+ // In Go: j.(MyStruct) should only succeed if j contains a struct value (not pointer)
450
+ return isMarkedAsStructValue(value)
449
451
  }
450
452
 
451
453
  // For named struct types with constructors, if instanceof fails, return false
@@ -659,6 +661,24 @@ function matchesArrayOrSliceType(value: any, info: TypeInfo): boolean {
659
661
  return true
660
662
  }
661
663
 
664
+ // Symbol used to mark struct instances that represent values (not pointers)
665
+ const STRUCT_VALUE_MARKER = Symbol('structValue')
666
+
667
+ // Mark a struct instance as representing a value (not pointer)
668
+ export function markAsStructValue<T>(value: T): T {
669
+ if (typeof value === 'object' && value !== null) {
670
+ (value as any)[STRUCT_VALUE_MARKER] = true
671
+ }
672
+ return value
673
+ }
674
+
675
+ // Check if a struct instance is marked as a value
676
+ function isMarkedAsStructValue(value: any): boolean {
677
+ return typeof value === 'object' && value !== null && value[STRUCT_VALUE_MARKER] === true
678
+ }
679
+
680
+
681
+
662
682
  /**
663
683
  * Checks if a value matches a pointer type info.
664
684
  *
@@ -668,24 +688,48 @@ function matchesArrayOrSliceType(value: any, info: TypeInfo): boolean {
668
688
  */
669
689
  function matchesPointerType(value: any, info: TypeInfo): boolean {
670
690
  // Allow null/undefined values to match pointer types to support nil pointer assertions
671
- // This enables Go's nil pointer type assertions like `ptr, ok := i.(*SomeType)` to work correctly
672
691
  if (value === null || value === undefined) {
673
692
  return true
674
693
  }
675
694
 
676
- // Check if the value is a VarRef (has a 'value' property)
677
- if (typeof value !== 'object' || !('value' in value)) {
695
+ if (typeof value !== 'object' || value === null) {
678
696
  return false
679
697
  }
680
698
 
681
699
  if (!isPointerTypeInfo(info)) return false
682
700
 
683
- if (info.elemType) {
684
- const elemTypeInfo = normalizeTypeInfo(info.elemType as string | TypeInfo)
685
- return matchesType(value.value, elemTypeInfo)
701
+ if (!info.elemType) return false
702
+
703
+ let elem = info.elemType
704
+ let elemName: string
705
+ if (typeof elem === 'string') {
706
+ elemName = elem
707
+ } else if (elem.name) {
708
+ elemName = elem.name
709
+ } else {
710
+ return false
686
711
  }
687
712
 
688
- return true
713
+ // Check if this is a registered struct type
714
+ const registered = typeRegistry.get(elemName)
715
+ if (registered && registered.kind === TypeKind.Struct && registered.ctor) {
716
+ // For struct types, check if the value is marked as a pointer or is a VarRef
717
+ if ('value' in value) {
718
+ // VarRef case - check the inner value
719
+ let elemTypeInfo = normalizeTypeInfo(elem)
720
+ return matchesType(value.value, elemTypeInfo)
721
+ }
722
+
723
+ // Direct struct instance - with inversion, only match if NOT marked as value (i.e., is a pointer)
724
+ return value instanceof registered.ctor && !isMarkedAsStructValue(value)
725
+ } else {
726
+ // For non-struct types, only VarRef objects should match
727
+ if (!('value' in value)) {
728
+ return false
729
+ }
730
+ let elemTypeInfo = normalizeTypeInfo(elem)
731
+ return matchesType(value.value, elemTypeInfo)
732
+ }
689
733
  }
690
734
 
691
735
  /**
@@ -885,6 +929,12 @@ export function typeAssert<T>(
885
929
 
886
930
  const matches = matchesType(value, normalizedType)
887
931
  if (matches) {
932
+ // Special handling for pointer type assertions:
933
+ // If the value is a VarRef and we're asserting to a pointer type,
934
+ // return the inner value (value.value), not the VarRef object itself
935
+ if (isPointerTypeInfo(normalizedType) && typeof value === 'object' && value !== null && 'value' in value) {
936
+ return { value: value.value as T, ok: true }
937
+ }
888
938
  return { value: value as T, ok: true }
889
939
  }
890
940
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "goscript",
3
3
  "description": "Go to TypeScript transpiler",
4
- "version": "0.0.56",
4
+ "version": "0.0.57",
5
5
  "author": {
6
6
  "name": "Aperture Robotics LLC.",
7
7
  "email": "support@aperture.us",