string(buffer, len) cast
parent
92fbe56276
commit
f5c8ee4742
|
@ -2647,10 +2647,17 @@ fn (p mut Parser) cast(typ string) string {
|
||||||
p.expected_type = typ
|
p.expected_type = typ
|
||||||
expr_typ := p.bool_expression()
|
expr_typ := p.bool_expression()
|
||||||
p.expected_type = ''
|
p.expected_type = ''
|
||||||
p.check(.rpar)
|
|
||||||
// `string(buffer)` => `tos2(buffer)`
|
// `string(buffer)` => `tos2(buffer)`
|
||||||
|
// `string(buffer, len)` => `tos(buffer, len)`
|
||||||
if typ == 'string' && (expr_typ == 'byte*' || expr_typ == 'byteptr') {
|
if typ == 'string' && (expr_typ == 'byte*' || expr_typ == 'byteptr') {
|
||||||
p.cgen.set_placeholder(pos, 'tos2(')
|
if p.tok == .comma {
|
||||||
|
p.check(.comma)
|
||||||
|
p.cgen.set_placeholder(pos, 'tos(')
|
||||||
|
p.gen(', ')
|
||||||
|
p.check_types(p.expression(), 'int')
|
||||||
|
} else {
|
||||||
|
p.cgen.set_placeholder(pos, 'tos2(')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// `string(234)` => error
|
// `string(234)` => error
|
||||||
else if typ == 'string' && expr_typ == 'int' {
|
else if typ == 'string' && expr_typ == 'int' {
|
||||||
|
@ -2659,6 +2666,7 @@ fn (p mut Parser) cast(typ string) string {
|
||||||
else {
|
else {
|
||||||
p.cgen.set_placeholder(pos, '($typ)(')
|
p.cgen.set_placeholder(pos, '($typ)(')
|
||||||
}
|
}
|
||||||
|
p.check(.rpar)
|
||||||
p.gen(')')
|
p.gen(')')
|
||||||
return typ
|
return typ
|
||||||
}
|
}
|
||||||
|
|
|
@ -318,3 +318,14 @@ fn test_interpolation() {
|
||||||
assert s == 'baz=baz'
|
assert s == 'baz=baz'
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn test_bytes_to_string() {
|
||||||
|
mut buf := malloc(10)
|
||||||
|
buf[0] = `h`
|
||||||
|
buf[1] = `e`
|
||||||
|
buf[2] = `l`
|
||||||
|
buf[3] = `l`
|
||||||
|
buf[4] = `o`
|
||||||
|
assert string(buf) == 'hello'
|
||||||
|
assert string(buf, 2) == 'he'
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue