llgo.string (llgo/ssa.MakeString) fix
This commit is contained in:
@@ -14,6 +14,8 @@ func f() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
println(c.GoString(c.Str("sync.Once demo\n"), 9))
|
||||||
|
println(c.GoString(c.Str("sync.Once demo\n")))
|
||||||
f()
|
f()
|
||||||
f()
|
f()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,6 +137,7 @@ func TestErrBuiltin(t *testing.T) {
|
|||||||
test("advance", func(ctx *context) { ctx.advance(nil, nil) })
|
test("advance", func(ctx *context) { ctx.advance(nil, nil) })
|
||||||
test("alloca", func(ctx *context) { ctx.alloca(nil, nil) })
|
test("alloca", func(ctx *context) { ctx.alloca(nil, nil) })
|
||||||
test("allocaCStr", func(ctx *context) { ctx.allocaCStr(nil, nil) })
|
test("allocaCStr", func(ctx *context) { ctx.allocaCStr(nil, nil) })
|
||||||
|
test("string", func(ctx *context) { ctx.string(nil, nil) })
|
||||||
test("stringData", func(ctx *context) { ctx.stringData(nil, nil) })
|
test("stringData", func(ctx *context) { ctx.stringData(nil, nil) })
|
||||||
test("sigsetjmp", func(ctx *context) { ctx.sigsetjmp(nil, nil) })
|
test("sigsetjmp", func(ctx *context) { ctx.sigsetjmp(nil, nil) })
|
||||||
test("siglongjmp", func(ctx *context) { ctx.siglongjmp(nil, nil) })
|
test("siglongjmp", func(ctx *context) { ctx.siglongjmp(nil, nil) })
|
||||||
|
|||||||
@@ -67,16 +67,20 @@ func (b Builder) getField(x Expr, idx int) Expr {
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
// MakeString creates a new string from a C string pointer and length.
|
// MakeString creates a new string from a C string pointer and length.
|
||||||
func (b Builder) MakeString(cstr Expr, n ...Expr) Expr {
|
func (b Builder) MakeString(cstr Expr, n ...Expr) (ret Expr) {
|
||||||
if debugInstr {
|
if debugInstr {
|
||||||
log.Printf("MakeString %v\n", cstr.impl)
|
log.Printf("MakeString %v\n", cstr.impl)
|
||||||
}
|
}
|
||||||
pkg := b.Pkg
|
pkg := b.Pkg
|
||||||
|
prog := b.Prog
|
||||||
|
ret.Type = prog.String()
|
||||||
if len(n) == 0 {
|
if len(n) == 0 {
|
||||||
return b.Call(pkg.rtFunc("StringFromCStr"), cstr)
|
ret.impl = b.Call(pkg.rtFunc("StringFromCStr"), cstr).impl
|
||||||
|
} else {
|
||||||
|
// TODO(xsw): remove Convert
|
||||||
|
ret.impl = b.Call(pkg.rtFunc("StringFrom"), cstr, b.Convert(prog.Int(), n[0])).impl
|
||||||
}
|
}
|
||||||
// TODO(xsw): remove Convert
|
return
|
||||||
return b.Call(pkg.rtFunc("StringFrom"), cstr, b.Convert(b.Prog.Int(), n[0]))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// StringData returns the data pointer of a string.
|
// StringData returns the data pointer of a string.
|
||||||
|
|||||||
Reference in New Issue
Block a user