Skip to content

Commit 117c7d9

Browse files
committed
fixed pointer conversion of basic types
1 parent e9ec26f commit 117c7d9

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

compiler/expressions.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1015,7 +1015,11 @@ func (c *funcContext) translateConversion(expr ast.Expr, desiredType types.Type)
10151015
}
10161016

10171017
if !types.Identical(exprType, types.Typ[types.UnsafePointer]) {
1018-
return c.formatExpr("new %1s(%2e.$get, %2e.$set, %2e.$target)", c.typeName(desiredType), expr)
1018+
exprTypeElem := exprType.Underlying().(*types.Pointer).Elem()
1019+
ptrVar := c.newVariable("_ptr")
1020+
getterConv := c.translateConversion(c.setType(&ast.StarExpr{X: c.newIdent(ptrVar, exprType)}, exprTypeElem), t.Elem())
1021+
setterConv := c.translateConversion(c.newIdent("$v", t.Elem()), exprTypeElem)
1022+
return c.formatExpr("(%1s = %2e, new %3s(function() { return %4s; }, function($v) { %1s.$set(%5s); }, %1s.$target))", ptrVar, expr, c.typeName(desiredType), getterConv, setterConv)
10191023
}
10201024

10211025
case *types.Interface:

0 commit comments

Comments
 (0)