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.
- package/compiler/analysis.go +89 -4
- package/compiler/assignment.go +64 -2
- package/compiler/compiler.go +3 -0
- package/compiler/composite-lit.go +21 -4
- package/compiler/expr-selector.go +4 -4
- package/compiler/expr.go +64 -5
- package/compiler/spec-struct.go +7 -3
- package/compiler/spec-value.go +41 -10
- package/compiler/spec.go +19 -4
- package/compiler/stmt.go +54 -11
- package/dist/gs/builtin/type.d.ts +1 -0
- package/dist/gs/builtin/type.js +54 -7
- package/dist/gs/builtin/type.js.map +1 -1
- package/gs/builtin/type.ts +58 -8
- package/package.json +1 -1
package/compiler/analysis.go
CHANGED
|
@@ -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
|
|
873
|
-
func (v *analysisVisitor) visitTypeAssertExpr(
|
|
874
|
-
//
|
|
875
|
-
v.
|
|
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
|
|
package/compiler/assignment.go
CHANGED
|
@@ -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
|
package/compiler/compiler.go
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
-
|
|
386
|
-
|
|
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
|
-
|
|
402
|
-
|
|
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
|
-
|
|
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
|
|
package/compiler/spec-struct.go
CHANGED
|
@@ -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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
package/compiler/spec-value.go
CHANGED
|
@@ -227,9 +227,8 @@ func (c *GoToTSCompiler) WriteValueSpec(a *ast.ValueSpec) error {
|
|
|
227
227
|
}
|
|
228
228
|
} else {
|
|
229
229
|
// Case: &compositeLiteral or &otherExpression
|
|
230
|
-
//
|
|
231
|
-
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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 :=
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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("
|
|
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.
|
package/dist/gs/builtin/type.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,QAUX;AAVD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,mCAAuB,CAAA;IACvB,6BAAiB,CAAA;IACjB,uBAAW,CAAA;IACX,2BAAe,CAAA;IACf,2BAAe,CAAA;IACf,+BAAmB,CAAA;IACnB,iCAAqB,CAAA;IACrB,+BAAmB,CAAA;AACrB,CAAC,EAVW,QAAQ,KAAR,QAAQ,QAUnB;AA0HD,6CAA6C;AAC7C,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAc;IAChD,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,SAAS,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAc;IAC5C,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAc;IAC1C,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,GAAG,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAc;IAC5C,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAc;IAC5C,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,OAAO,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAc;IAC/C,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,OAAO,CAAA;AACvC,CAAC;AAUD,6CAA6C;AAC7C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAA;AAEhD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,IAAY,EACZ,SAAc,EACd,OAA0B,EAC1B,IAAiC,EACjC,SAA4C,EAAE,EAC9B,EAAE;IAClB,MAAM,QAAQ,GAAmB;QAC/B,IAAI;QACJ,IAAI,EAAE,QAAQ,CAAC,MAAM;QACrB,SAAS;QACT,OAAO;QACP,IAAI;QACJ,MAAM;KACP,CAAA;IACD,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAChC,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,IAAY,EACZ,SAAc,EACd,OAA0B,EACP,EAAE;IACrB,MAAM,QAAQ,GAAsB;QAClC,IAAI;QACJ,IAAI,EAAE,QAAQ,CAAC,SAAS;QACxB,SAAS;QACT,OAAO;KACR,CAAA;IACD,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAChC,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAUD;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,IAAuB;IAChD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,KAAK;YACpB,IAAI,EAAE,IAAI;SACX,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAyB,EACzB,KAAyB;IAEzB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IAC3D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IAC5D,sEAAsE;IACtE,mFAAmF;IACnF,OAAO,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC5C,CAAC;AAED,SAAS,mCAAmC,CAC1C,IAA4B,EAC5B,IAA4B;IAE5B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IACzD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,0BAA0B,CACjC,KAAuB,EACvB,KAAuB;IAEvB,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,CACL,mCAAmC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QAC/D,mCAAmC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAClE,CAAA;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,eAAkC,EAClC,eAAkC;IAElC,MAAM,MAAM,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAA;IACjD,MAAM,MAAM,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAA;IAEjD,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAA,CAAC,kBAAkB;IACrD,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IAE7C,0DAA0D;IAC1D,mEAAmE;IACnE,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IAE7C,oGAAoG;IACpG,IACE,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,8CAA8C,EACxE,CAAC;QACD,IACE,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK;YAC9B,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM;YAC/B,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,SAAS,EAClC,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,wFAAwF;IACxF,mCAAmC;IAEnC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC,KAAK;YACjB,sHAAsH;YACtH,OAAO,IAAI,CAAA;QACb,KAAK,QAAQ,CAAC,OAAO;YACnB,OAAO,uBAAuB,CAC3B,MAA0B,CAAC,QAAQ,EACnC,MAA0B,CAAC,QAAQ,CACrC,CAAA;QACH,KAAK,QAAQ,CAAC,KAAK;YACjB,OAAO,uBAAuB,CAC3B,MAAwB,CAAC,QAAQ,EACjC,MAAwB,CAAC,QAAQ,CACnC,CAAA;QACH,KAAK,QAAQ,CAAC,KAAK;YACjB,OAAO,CACJ,MAAwB,CAAC,MAAM,KAAM,MAAwB,CAAC,MAAM;gBACrE,uBAAuB,CACpB,MAAwB,CAAC,QAAQ,EACjC,MAAwB,CAAC,QAAQ,CACnC,CACF,CAAA;QACH,KAAK,QAAQ,CAAC,GAAG;YACf,OAAO,CACL,uBAAuB,CACpB,MAAsB,CAAC,OAAO,EAC9B,MAAsB,CAAC,OAAO,CAChC;gBACD,uBAAuB,CACpB,MAAsB,CAAC,QAAQ,EAC/B,MAAsB,CAAC,QAAQ,CACjC,CACF,CAAA;QACH,KAAK,QAAQ,CAAC,OAAO;YACnB,OAAO;YACL,sFAAsF;YACtF,CAAE,MAA0B,CAAC,SAAS,IAAI,MAAM,CAAC;gBAC/C,CAAE,MAA0B,CAAC,SAAS,IAAI,MAAM,CAAC;gBACnD,uBAAuB,CACpB,MAA0B,CAAC,QAAQ,EACnC,MAA0B,CAAC,QAAQ,CACrC,CACF,CAAA;QACH,KAAK,QAAQ,CAAC,QAAQ;YACpB,OAAO,0BAA0B,CAC/B,MAA0B,EAC1B,MAA0B,CAC3B,CAAA;QACH,KAAK,QAAQ,CAAC,MAAM,CAAC;QACrB,KAAK,QAAQ,CAAC,SAAS;YACrB,+GAA+G;YAC/G,oFAAoF;YACpF,qGAAqG;YACrG,iFAAiF;YACjF,OAAO,KAAK,CAAA;QACd;YACE,OAAO,KAAK,CAAA;IAChB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,GAAQ,EAAE,WAAqB;IACrD,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxC,kBAAkB;QAClB,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAA;QAChC,CAAC;aAAM,IACL,WAAW,CAAC,IAAI,KAAK,KAAK;YAC1B,WAAW,CAAC,IAAI,KAAK,SAAS;YAC9B,WAAW,CAAC,IAAI,KAAK,QAAQ,EAC7B,CAAC;YACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACpC,CAAC;iBAAM,CAAC;gBACN,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAA;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,KAAU,EAAE,IAAc;IAClD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;IAC5D,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAC1E,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;IAClC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QACjD,OAAO,OAAO,KAAK,KAAK,SAAS,CAAA;IACnC,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,KAAU,EAAE,IAAc;IACnD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IAEzC,8EAA8E;IAC9E,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,8EAA8E;IAC9E,0DAA0D;IAC1D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,KAAK,CAAA;IACd,CAAC;IAED,uEAAuE;IACvE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;QACjD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAEtC,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC,CAAA;QAC/D,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,CAAA;QAC/D,MAAM,iBAAiB,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACpD,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC3B,CAAA;QAED,IAAI,WAAW,IAAI,cAAc,IAAI,iBAAiB,EAAE,CAAC;YACvD,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE;gBAClE,OAAO,WAAW,CAChB,KAAK,CAAC,SAAS,CAAC,EAChB,iBAAiB,CAAC,SAA8B,CAAC,CAClD,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,oBAAoB,CAAC,KAAU,EAAE,IAAc;IACtD,+BAA+B;IAC/B,IACE,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC1B,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI,EACd,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,6FAA6F;IAC7F,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,EAAE;QAC9C,MAAM,YAAY,GAAI,KAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAE3D,sCAAsC;QACtC,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;YACvC,OAAO,KAAK,CAAA;QACd,CAAC;QAED,4CAA4C;QAC5C,6FAA6F;QAC7F,MAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAA;QAC9C,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAA;QAExD,sEAAsE;QACtE,sEAAsE;QACtE,IAAI,kBAAkB,GAAG,kBAAkB,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAA;QACd,CAAC;QAED,8CAA8C;QAC9C,qEAAqE;QAErE,0EAA0E;QAC1E,uCAAuC;QACvC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;YAC1D,IAAI,aAAa,IAAI,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC;gBACrD,oDAAoD;gBACpD,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,IAAI,CACzC,CAAA;gBAED,IAAI,cAAc,EAAE,CAAC;oBACnB,uBAAuB;oBACvB,IACE,cAAc,CAAC,OAAO,CAAC,MAAM,KAAK,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAClE,CAAC;wBACD,OAAO,KAAK,CAAA;oBACd,CAAC;oBAED,6CAA6C;oBAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC1D,MAAM,kBAAkB,GAAG,iBAAiB,CAC1C,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAClC,CAAA;wBACD,MAAM,eAAe,GAAG,iBAAiB,CACvC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAC/B,CAAA;wBAED,0EAA0E;wBAC1E,oCAAoC;wBACpC,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,EAAE,CAAC;4BAC5C,8DAA8D;4BAC9D,kEAAkE;4BAClE,8CAA8C;4BAC9C,IAAI,kBAAkB,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,EAAE,CAAC;gCACrD,yDAAyD;gCACzD,wDAAwD;gCACxD,OAAO,KAAK,CAAA;4BACd,CAAC;wBACH,CAAC;wBACD,2DAA2D;6BACtD,IAAI,kBAAkB,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,EAAE,CAAC;4BAC1D,OAAO,KAAK,CAAA;wBACd,CAAC;oBACH,CAAC;oBAED,8DAA8D;oBAC9D,kCAAkC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QAED,2EAA2E;QAC3E,+CAA+C;QAC/C,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,KAAU,EAAE,IAAc;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC7D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IAEtC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,OAAO,GAAiB,EAAE,CAAA;QAE9B,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;YACzB,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QACvC,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACjC,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA,CAAC,iCAAiC;QAEvE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YAEzB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IACE,CAAC,cAAc,CACb,CAAC,EACD,iBAAiB,CAAC,IAAI,CAAC,OAA4B,CAAC,CACrD,EACD,CAAC;oBACD,OAAO,KAAK,CAAA;gBACd,CAAC;YACH,CAAC;YAED,IACE,IAAI,CAAC,QAAQ;gBACb,CAAC,WAAW,CAAC,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,QAA6B,CAAC,CAAC,EACtE,CAAC;gBACD,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;GAMG;AACH,SAAS,uBAAuB,CAAC,KAAU,EAAE,IAAc;IACzD,iFAAiF;IACjF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACvC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IAElE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,KAAc,CAAA;QAC1B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA,CAAC,qCAAqC;QAEvE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,IACE,CAAC,WAAW,CACV,GAAG,CAAC,CAAC,CAAC,EACN,iBAAiB,CAAC,IAAI,CAAC,QAA6B,CAAC,CACtD,EACD,CAAC;gBACD,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,KAAU,EAAE,IAAc;IACpD,uFAAuF;IACvF,kGAAkG;IAClG,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,0DAA0D;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IAE1C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAA6B,CAAC,CAAA;QAC1E,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAC/C,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,KAAU,EAAE,IAAsB;IAC7D,yCAAyC;IACzC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,6CAA6C;IAC7C,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,YAAY,CAAA;IACzC,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,KAAU,EAAE,IAAqB;IAC3D,qDAAqD;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,mDAAmD;IACnD,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,cAAc,GAAG,MAAM,CAAA;IAE3B,IAAI,SAAS,IAAI,KAAK,IAAI,WAAW,IAAI,KAAK,EAAE,CAAC;QAC/C,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;QACvB,cAAc,GAAG,KAAK,CAAC,SAAS,CAAA;IAClC,CAAC;IAED,kCAAkC;IAClC,IACE,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC;QACpB,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC;QACvB,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC;QACrB,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU;QAClC,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU;QACrC,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EACnC,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,IACE,IAAI,CAAC,QAAQ,KAAK,QAAQ;YAC1B,WAAW,IAAI,OAAO;YACtB,OAAO,CAAC,SAAS,KAAK,EAAE,EACxB,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IACE,IAAI,CAAC,QAAQ,KAAK,QAAQ;YAC1B,WAAW,IAAI,OAAO;YACtB,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EACrC,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,cAAc,KAAK,IAAI,CAAC,SAAS,CAAA;IAC1C,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,KAAU,EAAE,IAAc;IAC7C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,QAAQ,CAAC,KAAK;YACjB,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAEtC,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAEvC,KAAK,QAAQ,CAAC,SAAS;YACrB,OAAO,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAE1C,KAAK,QAAQ,CAAC,GAAG;YACf,OAAO,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAEpC,KAAK,QAAQ,CAAC,KAAK,CAAC;QACpB,KAAK,QAAQ,CAAC,KAAK;YACjB,OAAO,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAE7C,KAAK,QAAQ,CAAC,OAAO;YACnB,OAAO,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAExC,KAAK,QAAQ,CAAC,QAAQ;YACpB,OAAO,mBAAmB,CAAC,KAAK,EAAE,IAAwB,CAAC,CAAA;QAE7D,KAAK,QAAQ,CAAC,OAAO;YACnB,OAAO,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAExC;YACE,OAAO,CAAC,IAAI,CACV,2BAA4B,IAAiB,CAAC,IAAI,oBAAoB,CACvE,CAAA;YACD,OAAO,KAAK,CAAA;IAChB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CACxB,KAAU,EACV,QAA2B;IAE3B,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAClD,IAAI,iBAAiB,CAAC,cAAc,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACxD,OAAO,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IAClD,CAAC;IAED,2EAA2E;IAC3E,qEAAqE;IAErE,IACE,aAAa,CAAC,cAAc,CAAC;QAC7B,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI,EACd,CAAC;QACD,IAAI,cAAc,CAAC,OAAO,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;YACtD,IAAI,OAAO,GAAiB,EAAE,CAAA;YAE9B,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;gBACzB,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;YACvC,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YACjC,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,KAAK,EAAE,KAAU,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;YACxC,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;gBAEzB,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;oBAC3B,IACE,CAAC,cAAc,CACb,CAAC,EACD,iBAAiB,CAAC,cAAc,CAAC,OAA4B,CAAC,CAC/D,EACD,CAAC;wBACD,OAAO,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;oBACnD,CAAC;gBACH,CAAC;gBAED,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;oBAC5B,MAAM,YAAY,GAAG,iBAAiB,CACpC,cAAc,CAAC,QAA6B,CAC7C,CAAA;oBACD,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;wBAClC,OAAO,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;oBACnD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,gDAAgD;YAChD,OAAO,EAAE,KAAK,EAAE,KAAU,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;QACxC,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;IAClD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK,EAAE,KAAU,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IACxC,CAAC;IAED,uCAAuC;IACvC,6DAA6D;IAC7D,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACjD,IAAI,cAAc,IAAI,cAAc,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC7D,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,SAAc,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;QAC5D,CAAC;IACH,CAAC;SAAM,IAAI,cAAc,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClD,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,SAAc,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;IAC5D,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;AACnD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAI,KAAU,EAAE,QAA2B;IACvE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,UAAU,CAAI,KAAK,EAAE,QAAQ,CAAC,CAAA;IACnE,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,cAAc,GAClB,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CACxC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAC1C,CAAA;QACH,IAAI,aAAa,GAAmB,OAAO,KAAK,CAAA;QAChD,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACzD,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAA;QACxC,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,aAAa,GAAG,KAAK,CAAA;QACvB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,0CAA0C,aAAa,SAAS,cAAc,EAAE,CACjF,CAAA;IACH,CAAC;IACD,OAAO,aAAa,CAAA;AACtB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,EAAE,CAAC,KAAU,EAAE,QAA2B;IACxD,OAAO,WAAW,CAAC,KAAK,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAA;AACxD,CAAC;AAWD;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CACxB,KAAU,EACV,KAAuB,EACvB,WAAwB;IAExB,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,yDAAyD;QACzD,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;YACxE,IAAI,UAAU,EAAE,CAAC;gBACf,2EAA2E;gBAC3E,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACnB,OAAM,CAAC,6BAA6B;YACtC,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,yFAAyF;YACzF,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACjC,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;YAChE,IAAI,EAAE,EAAE,CAAC;gBACP,oDAAoD;gBACpD,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBAE3B,OAAM,CAAC,6BAA6B;YACtC,CAAC;QACH,CAAC;QACD,6DAA6D;IAC/D,CAAC;IAED,2DAA2D;IAC3D,IAAI,WAAW,EAAE,CAAC;QAChB,WAAW,EAAE,CAAA;IACf,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../gs/builtin/type.ts"],"names":[],"mappings":"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"}
|
package/gs/builtin/type.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
685
|
-
|
|
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
|
-
|
|
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
|
|