cgen: reference receiver test
parent
75db3e4416
commit
a2ff24c912
|
@ -310,10 +310,14 @@ pub fn (c mut Checker) method_call_expr(method_call_expr mut ast.MethodCallExpr)
|
||||||
|
|
||||||
pub fn (c mut Checker) selector_expr(selector_expr mut ast.SelectorExpr) table.Type {
|
pub fn (c mut Checker) selector_expr(selector_expr mut ast.SelectorExpr) table.Type {
|
||||||
typ := c.expr(selector_expr.expr)
|
typ := c.expr(selector_expr.expr)
|
||||||
|
if typ == table.void_type_idx {
|
||||||
|
c.error('unknown selector expression', selector_expr.pos)
|
||||||
|
return table.void_type
|
||||||
|
}
|
||||||
selector_expr.expr_type = typ
|
selector_expr.expr_type = typ
|
||||||
// if selector_expr.field == 'size' {
|
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)
|
typ_sym := c.table.get_type_symbol(typ)
|
||||||
field_name := selector_expr.field
|
field_name := selector_expr.field
|
||||||
if field := typ_sym.find_field(field_name) {
|
if field := typ_sym.find_field(field_name) {
|
||||||
|
|
|
@ -5,6 +5,13 @@ struct User {
|
||||||
|
|
||||||
// multi return structs
|
// multi return structs
|
||||||
// end of definitions #endif
|
// end of definitions #endif
|
||||||
|
|
||||||
|
void User_foo(User* u);
|
||||||
|
|
||||||
|
void User_foo(User* u) {
|
||||||
|
int age = u->age;
|
||||||
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
User user = (User){
|
User user = (User){
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,6 +3,10 @@ struct User {
|
||||||
name string
|
name string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn (u &User) foo() {
|
||||||
|
age := u.age
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
user := User{}
|
user := User{}
|
||||||
user.age = 10
|
user.age = 10
|
||||||
|
|
Loading…
Reference in New Issue