WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit 6a1f069

Browse files
committed
cxgo: Convert string sizeof to len. Fixes #88.
1 parent d5760bf commit 6a1f069

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

c_expr.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -907,11 +907,15 @@ func (g *translator) cSizeofE(x Expr) Expr {
907907
return g.newUnaryExpr(UnarySizeof, x)
908908
}
909909
}
910-
switch cUnwrap(x).(type) {
911-
case Bool:
912-
case BoolExpr:
910+
switch x := cUnwrap(x).(type) {
911+
case Bool, BoolExpr:
913912
// workaround for C bools (they should be reported as int in some cases)
914913
return g.SizeofT(g.env.DefIntT(), nil)
914+
case StringLit:
915+
return &CallExpr{
916+
Fun: FuncIdent{g.env.Go().LenFunc()},
917+
Args: []Expr{x},
918+
}
915919
}
916920
return g.SizeofT(x.CType(nil), nil)
917921
}

literals_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,23 @@ func foo() {
5757
_ = a
5858
a = libc.CString("abc")
5959
}
60+
`,
61+
},
62+
{
63+
name: "string len",
64+
builtins: true,
65+
src: `
66+
void foo() {
67+
int a;
68+
a = sizeof("abc");
69+
}
70+
`,
71+
exp: `
72+
func foo() {
73+
var a int32
74+
_ = a
75+
a = int32(len("abc"))
76+
}
6077
`,
6178
},
6279
{

0 commit comments

Comments
 (0)