cgen: fix a bug with [].repeat
parent
a2ff24c912
commit
cd0b81fc5f
|
@ -254,6 +254,7 @@ pub fn (c mut Checker) method_call_expr(method_call_expr mut ast.MethodCallExpr)
|
|||
method_call_expr.expr_type = typ
|
||||
typ_sym := c.table.get_type_symbol(typ)
|
||||
name := method_call_expr.name
|
||||
// println('method call $name $method_call_expr.pos.line_nr')
|
||||
if typ_sym.kind == .array && name in ['filter', 'clone'] {
|
||||
if name == 'filter' {
|
||||
array_info := typ_sym.info as table.Array
|
||||
|
@ -279,12 +280,13 @@ pub fn (c mut Checker) method_call_expr(method_call_expr mut ast.MethodCallExpr)
|
|||
}
|
||||
// repeat() returns `array`, need to return `array_xxx`
|
||||
else if typ_sym.kind == .array && name in ['repeat'] {
|
||||
c.expr(method_call_expr.args[0])
|
||||
return typ
|
||||
}
|
||||
if method := typ_sym.find_method(name) {
|
||||
if name == 'clone' {
|
||||
println('CLONE nr args=$method.args.len')
|
||||
}
|
||||
// if name == 'clone' {
|
||||
// println('CLONE nr args=$method.args.len')
|
||||
// }
|
||||
method_call_expr.receiver_type = method.args[0].typ
|
||||
for i, arg_expr in method_call_expr.args {
|
||||
c.expected_type = method.args[i].typ
|
||||
|
@ -315,9 +317,7 @@ pub fn (c mut Checker) selector_expr(selector_expr mut ast.SelectorExpr) table.T
|
|||
return table.void_type
|
||||
}
|
||||
selector_expr.expr_type = typ
|
||||
if selector_expr.field == 'size' {
|
||||
println('sel expr line_nr=$selector_expr.pos.line_nr typ=$selector_expr.expr_type')
|
||||
}
|
||||
// println('sel expr line_nr=$selector_expr.pos.line_nr typ=$selector_expr.expr_type')
|
||||
typ_sym := c.table.get_type_symbol(typ)
|
||||
field_name := selector_expr.field
|
||||
if field := typ_sym.find_field(field_name) {
|
||||
|
|
|
@ -10,6 +10,9 @@ void User_foo(User* u);
|
|||
|
||||
void User_foo(User* u) {
|
||||
int age = u->age;
|
||||
array_string zzz = array_repeat(new_array_from_c_array(1, 1, sizeof(array_string), (string[]){
|
||||
tos3(""),
|
||||
}), u->age);
|
||||
}
|
||||
|
||||
int main() {
|
||||
|
|
|
@ -5,6 +5,7 @@ struct User {
|
|||
|
||||
fn (u &User) foo() {
|
||||
age := u.age
|
||||
zzz := [''].repeat(u.age)
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
|
Loading…
Reference in New Issue