@@ -20,10 +20,10 @@ extend Checker {
20
20
match left.+ {
21
21
.SelfTy(self_ty) -> self.check_ctor_call(self_ty.sym, call_expr),
22
22
.Ident(ident) if (ident.is_sym || ident.is_obj) -> match ident.sym is {
23
- ast.TypeSym(type_sym) if type_sym.info is .Trait
23
+ ast.TypeSym(mut type_sym) if type_sym.info is .Trait
24
24
|| type_sym.info is .Struct || type_sym.info is .String
25
25
|| type_sym.info is .Enum -> self.check_ctor_call(type_sym, call_expr),
26
- ast.Func(func_) -> {
26
+ ast.Func(mut func_) -> {
27
27
call_expr.func_ = func_;
28
28
if func_.is_main {
29
29
report.error("cannot call to `main` function", ident.pos);
@@ -47,12 +47,12 @@ extend Checker {
47
47
},
48
48
.Selector(selector) -> if selector.is_path {
49
49
match selector.sym is {
50
- ast.TypeSym(s_type_sym) if s_type_sym.info is .Trait
50
+ ast.TypeSym(mut s_type_sym) if s_type_sym.info is .Trait
51
51
|| s_type_sym.info is .Struct || s_type_sym.info is .String
52
52
|| s_type_sym.info is .Enum -> self.check_ctor_call(
53
53
s_type_sym, call_expr
54
54
),
55
- ast.Func(s_func_) -> {
55
+ ast.Func(mut s_func_) -> {
56
56
call_expr.func_ = s_func_;
57
57
self.check_func_call(s_func_, call_expr);
58
58
},
@@ -79,7 +79,7 @@ extend Checker {
79
79
);
80
80
err.add_help("use the option-check syntax: `foo?.method()` or use `??`: `(foo ?? 5).method()`");
81
81
err.emit();
82
- return .Void;
82
+ return +mut .Void;
83
83
}
84
84
if left_sym := selector.left_type.symbol() {
85
85
if method := left_sym.find_method(selector.field_name) {
@@ -129,7 +129,7 @@ extend Checker {
129
129
);
130
130
}
131
131
},
132
- .EnumLiteral(enum_lit) -> {
132
+ .EnumLiteral(&mut enum_lit) -> {
133
133
enum_lit.is_instance = true;
134
134
_ = self.check_expr(left);
135
135
self.check_ctor_call(enum_lit.sym, call_expr);
@@ -196,12 +196,12 @@ extend Checker {
196
196
call_expr.type = if type_sym.info is .Struct(struct_info) && struct_info.is_enum_variant {
197
197
call_expr.is_enum_variant = true;
198
198
call_expr.enum_variant_sym = type_sym;
199
- .Basic(struct_info.parent)
199
+ +mut .Basic(struct_info.parent)
200
200
} else {
201
- .Basic(type_sym, pos: call_expr.pos)
201
+ +mut .Basic(type_sym, pos: call_expr.pos)
202
202
};
203
- match type_sym.info {
204
- .Enum(enum_info) -> {
203
+ match type_sym.info.+ {
204
+ .Enum(& enum_info) -> {
205
205
variant := if call_expr.left is .Selector(selector) {
206
206
@as(ast.TypeInfo.Enum, @as(+mut ast.TypeSym, selector.left_sym).info)
207
207
.get_variant(selector.field_name)?
@@ -220,7 +220,7 @@ extend Checker {
220
220
} else if variant.has_type {
221
221
old_expected_type := self.expected_type;
222
222
self.expected_type = variant.type;
223
- mut arg0 := call_expr.args[0];
223
+ arg0 := call_expr.args[0];
224
224
self.check_types(
225
225
self.check_expr(arg0.expr), variant.type
226
226
) catch |err| {
@@ -247,13 +247,13 @@ extend Checker {
247
247
);
248
248
}
249
249
},
250
- .Trait(trait_info) -> {
250
+ .Trait(&mut trait_info) -> {
251
251
if call_expr.has_spread_expr {
252
252
report.error(
253
253
"cannot use spread expression with trait constructor", call_expr.pos
254
254
);
255
255
} else if call_expr.args.len == 1 {
256
- mut arg0 := call_expr.args[0];
256
+ arg0 := call_expr.args[0];
257
257
value_t := self.env.comptime_number_to_type(self.check_expr(arg0.expr));
258
258
if value_t.symbol()? in trait_info.implements {
259
259
trait_info.mark_has_objects();
@@ -272,7 +272,7 @@ extend Checker {
272
272
}
273
273
},
274
274
else -> {
275
- mut initted_fields := maps.MapStringBool();
275
+ initted_fields := maps.MapStringBool();
276
276
type_fields := type_sym.full_fields();
277
277
if !call_expr.has_named_args() {
278
278
expr_args_len := call_expr.args.len;
@@ -290,7 +290,7 @@ extend Checker {
290
290
return;
291
291
}
292
292
}
293
- for i, mut arg in call_expr.args {
293
+ for i, arg in call_expr.args {
294
294
mut field := ast.Field();
295
295
if arg.is_named {
296
296
if t_field := type_sym.lookup_field(arg.name) {
@@ -340,15 +340,15 @@ extend Checker {
340
340
);
341
341
continue;
342
342
}
343
- match field.type {
343
+ match field.type.+ {
344
344
.Pointer, .Rawptr if !was_initted -> report.warn(
345
345
"field `{}` of type `{}` must be initialized".fmt(
346
346
field.name, type_sym.name
347
347
), call_expr.pos
348
348
),
349
349
else -> if f_type_sym := field.type.symbol();
350
350
f_type_sym.default_value == none {
351
- match f_type_sym.info {
351
+ match f_type_sym.info.+ {
352
352
.Trait if !was_initted -> report.warn(
353
353
"field `{}` of type `{}` must be initialized".fmt(
354
354
field.name, type_sym.name
@@ -460,7 +460,7 @@ extend Checker {
460
460
}
461
461
462
462
old_expected_type := self.expected_type;
463
- for i, mut arg in call_expr.args {
463
+ for i, arg in call_expr.args {
464
464
arg_fn := if func_.is_variadic && i >= func_.args.len - 1 {
465
465
func_.args[func_.args.len - 1]
466
466
} else {
@@ -491,7 +491,7 @@ extend Checker {
491
491
if spread_expr_sym.info is .DynArray || spread_expr_sym.info is .Array
492
492
|| spread_expr_sym.info is .Slice {
493
493
last_arg_type := func_.args[func_.args.len - 1].type;
494
- spread_t := ast.Type.Variadic(spread_expr_sym.info.elem_type()?);
494
+ spread_t := +mut ast.Type.Variadic(spread_expr_sym.info.elem_type()?);
495
495
self.check_types(spread_t, last_arg_type) catch |err| {
496
496
report.error(err.to_string(), call_expr.spread_expr.position());
497
497
};
0 commit comments