Skip to content

Commit 64fe5f9

Browse files
committed
fix errors and warns
1 parent 1f85adb commit 64fe5f9

File tree

13 files changed

+49
-48
lines changed

13 files changed

+49
-48
lines changed

lib/core/src/TestRunner.ri

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ struct Test {
7676
}
7777

7878
struct TestRunner {
79-
tests: []mut Test;
79+
mut tests: []mut Test;
8080
mut ok_tests: uint64;
8181
mut fail_tests: uint64;
8282
mut skip_tests: uint64;

lib/rivet/src/ast/Table.ri

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub struct Table {
1717
/// compiled reside.
1818
pub mut universe: Module;
1919
pub mut prefs: prefs.Prefs;
20+
pub mut source_files: []mut SourceFile;
2021

2122
pub pointer_size: uint;
2223

@@ -70,8 +71,6 @@ pub struct Table {
7071
pub mut string_t: Type;
7172
pub mut throwable_t: Type;
7273

73-
pub mut source_files: []SourceFile;
74-
7574
#[inline]
7675
pub func new(prefs_: prefs.Prefs) -> Table {
7776
universe_ := universe();
@@ -361,7 +360,7 @@ pub struct Table {
361360
}
362361
(utils.round_up(total_size, max_alignment), max_alignment)
363362
},
364-
.Trait(trait_info) -> {
363+
.Trait(mut trait_info) -> {
365364
(size, align) = ((type_sym.fields.len + 2) * self.pointer_size, self.pointer_size);
366365
for mut btype in trait_info.bases {
367366
(bsize, _balign) := self.type_symbol_size(btype, is_raw);

lib/rivet/src/ast/Type.ri

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ pub enum Type < traits.Stringable {
115115
.Rawptr -> self,
116116
.Result(mut result) -> .Result(result.inner.unalias() ?? result.inner),
117117
.Option(mut option) -> .Option(option.inner.unalias() ?? option.inner),
118-
.Tuple(tuple_data) -> {
118+
.Tuple(mut tuple_data) -> {
119119
mut unaliased_types := []mut Type(cap: tuple_data.inners.len);
120120
for i, mut tuple_type in tuple_data.inners {
121121
unaliased_types[i] = tuple_type.unalias() ?? tuple_type;

lib/rivet/src/ast/TypeSym.ri

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,13 +132,13 @@ pub struct TypeSym < Sym {
132132
return self.full_fields_;
133133
}
134134
mut fields := []Field();
135-
if self.info is .Trait(trait_info) {
135+
if self.info is .Trait(mut trait_info) {
136136
for mut b in trait_info.bases {
137137
for bf in b.full_fields() {
138138
fields.push(bf);
139139
}
140140
}
141-
} else if self.info is .Struct(struct_info) {
141+
} else if self.info is .Struct(mut struct_info) {
142142
for mut t in struct_info.traits {
143143
for tf in t.full_fields() {
144144
fields.push(tf);

lib/rivet/src/checker/decls.ri

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ extend Checker {
5555
}, "alias", alias_decl.name, alias_decl.pos
5656
);
5757
},
58-
.Extern(extern_decl) -> {
58+
.Extern(mut extern_decl) -> {
5959
self.inside_extern = true;
6060
self.check_decls(extern_decl.decls);
6161
self.inside_extern = false;
@@ -95,11 +95,11 @@ extend Checker {
9595
}
9696
}
9797
},
98-
.Trait(trait_decl) -> {
98+
.Trait(mut trait_decl) -> {
9999
self.check_name_case(.Pascal, "trait", trait_decl.name, trait_decl.pos);
100100
self.check_decls(trait_decl.decls);
101101
},
102-
.Enum(enum_decl) -> {
102+
.Enum(mut enum_decl) -> {
103103
self.check_name_case(.Pascal, "enum", enum_decl.name, enum_decl.pos);
104104
for base in enum_decl.bases {
105105
if sym := base.symbol() {
@@ -110,13 +110,13 @@ extend Checker {
110110
}
111111
}
112112
}
113-
for variant in enum_decl.variants {
113+
for mut variant in enum_decl.variants {
114114
self.check_name_case(.Pascal, "enum variant", variant.name, variant.pos);
115115
self.check_decls(variant.decls);
116116
}
117117
self.check_decls(enum_decl.decls);
118118
},
119-
.Struct(struct_decl) -> {
119+
.Struct(mut struct_decl) -> {
120120
self.check_name_case(.Pascal, "struct", struct_decl.name, struct_decl.pos);
121121
for base in struct_decl.bases {
122122
if sym := base.symbol() {
@@ -141,7 +141,7 @@ extend Checker {
141141
};
142142
}
143143
},
144-
.Extend(extend_decl) -> {
144+
.Extend(mut extend_decl) -> {
145145
type_sym := extend_decl.type.symbol()?;
146146
for base in extend_decl.bases {
147147
if sym := base.symbol() {
@@ -153,7 +153,7 @@ extend Checker {
153153
self.check_decls(extend_decl.decls);
154154
},
155155
.Func(mut func_decl) -> self.check_func(func_decl),
156-
.Test(test_decl) -> {
156+
.Test(mut test_decl) -> {
157157
old_cur_func := self.cur_func;
158158
self.cur_func = ast.Func(ret_type: .Void);
159159
self.inside_test = true;

lib/rivet/src/checker/mod.ri

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,16 @@ pub struct Checker {
3232
mut defer_stmts_start: uint;
3333
mut defer_stmts: []ast.Stmt.Defer;
3434

35-
pub func check_files(mut self, source_files: []ast.SourceFile) {
35+
pub func check_files(mut self, mut source_files: []mut ast.SourceFile) {
3636
// check global variables
37-
for source_file in source_files {
37+
for mut source_file in source_files {
3838
self.sym = source_file.mod;
3939
self.source_file = source_file;
4040
self.expected_type = .Void;
4141
self.check_global_vars(source_file.decls);
4242
}
4343
// check the source code
44-
for source_file in source_files {
44+
for mut source_file in source_files {
4545
self.sym = source_file.mod;
4646
self.source_file = source_file;
4747
self.expected_type = .Void;
@@ -291,7 +291,7 @@ pub struct Checker {
291291
.StringLiteral -> report.error(
292292
"string literals cannot be modified", expr.position()
293293
),
294-
.TupleLiteral(tuple_lit) -> if from_assign {
294+
.TupleLiteral(mut tuple_lit) -> if from_assign {
295295
for mut value in tuple_lit.values {
296296
self.check_expr_is_mut(value);
297297
}
@@ -301,7 +301,7 @@ pub struct Checker {
301301
.EnumLiteral(enum_lit) if !enum_lit.is_instance -> report.error(
302302
"enum literals cannot be modified", enum_lit.pos
303303
),
304-
.BuiltinCall(builtin_call) -> {
304+
.BuiltinCall(mut builtin_call) -> {
305305
for mut arg in builtin_call.args {
306306
self.check_expr_is_mut(arg.expr);
307307
}
@@ -330,12 +330,12 @@ pub struct Checker {
330330
self.check_expr_is_mut(binary.left);
331331
self.check_expr_is_mut(binary.right);
332332
},
333-
.If(if_expr) -> {
333+
.If(mut if_expr) -> {
334334
for mut branch in if_expr.branches {
335335
self.check_expr_is_mut(branch.expr);
336336
}
337337
},
338-
.Match(match_expr) -> {
338+
.Match(mut match_expr) -> {
339339
for mut branch in match_expr.branches {
340340
self.check_expr_is_mut(branch.expr);
341341
}

lib/rivet/src/codegen/decls.ri

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ extend Codegen {
1414

1515
func gen_decl(mut self, mut decl: ast.Decl) {
1616
match decl {
17-
.Extern(extern_decl) -> self.gen_decls(extern_decl.decls),
17+
.Extern(mut extern_decl) -> self.gen_decls(extern_decl.decls),
1818
.Var(var_decl) -> {
1919
for left in var_decl.lefts {
2020
self.mir.globals.push(mir.Global(
@@ -24,10 +24,10 @@ extend Codegen {
2424
));
2525
}
2626
},
27-
.Trait(trait_decl) -> self.gen_decls(trait_decl.decls),
28-
.Enum(enum_decl) -> self.gen_decls(enum_decl.decls),
29-
.Struct(struct_decl) -> self.gen_decls(struct_decl.decls),
30-
.Extend(extend_decl) -> self.gen_decls(extend_decl.decls),
27+
.Trait(mut trait_decl) -> self.gen_decls(trait_decl.decls),
28+
.Enum(mut enum_decl) -> self.gen_decls(enum_decl.decls),
29+
.Struct(mut struct_decl) -> self.gen_decls(struct_decl.decls),
30+
.Extend(mut extend_decl) -> self.gen_decls(extend_decl.decls),
3131
.Func(mut func_decl) -> self.gen_func(func_decl),
3232
else -> {}
3333
}

lib/rivet/src/lib.ri

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ pub struct Compiler {
121121
}
122122

123123
func import_modules(mut self) -> ! {
124-
for sf in self.table.source_files {
124+
for mut sf in self.table.source_files {
125125
for mut d in sf.decls {
126126
if d is .Import(mut import_decl) {
127127
if self.table.universe.scope.exists(import_decl.info.full_name) {
@@ -288,7 +288,7 @@ pub struct Compiler {
288288
}
289289
self.vlog("-----------------------------------------");
290290
source_files := self.table.source_files;
291-
self.table.source_files = []ast.SourceFile(cap: source_files.len);
291+
self.table.source_files = []mut ast.SourceFile(cap: source_files.len);
292292
for node in g_resolved.nodes {
293293
for pf in source_files {
294294
if pf.mod.name == node.name {

lib/rivet/src/resolver/Register.ri

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub struct Register {
4040
self.sym.scope.owner = self.sym;
4141
match decl {
4242
.Import(import_decl) -> self.import_decl(import_decl),
43-
.Extern(extern_decl) -> {
43+
.Extern(mut extern_decl) -> {
4444
self.abi = extern_decl.abi;
4545
self.walk_decls(extern_decl.decls);
4646
},
@@ -180,7 +180,7 @@ pub struct Register {
180180
expr: const_decl.expr,
181181
type: const_decl.type
182182
), const_decl.pos),
183-
.Var(var_decl) -> {
183+
.Var(mut var_decl) -> {
184184
for mut left in var_decl.lefts {
185185
left.sym = ast.Var(
186186
parent: self.sym,

lib/rivet/src/resolver/decls.ri

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ extend Resolver {
1313
old_self_sym_is_set := self.self_sym_is_set;
1414
match decl {
1515
.Empty(empty_pos) -> report.error("BUG: empty declaration found", empty_pos),
16-
.Extern(extern_decl) -> self.resolve_decls(extern_decl.decls),
16+
.Extern(mut extern_decl) -> self.resolve_decls(extern_decl.decls),
1717
.Alias(mut alias_decl) -> if alias_decl.is_typealias {
1818
_ = self.resolve_type(alias_decl.parent_type);
1919
} else {
@@ -39,7 +39,7 @@ extend Resolver {
3939
self.resolve_expr(var_decl.right);
4040
}
4141
},
42-
.Trait(trait_decl) -> {
42+
.Trait(mut trait_decl) -> {
4343
self.self_sym = @as(ast.TypeSym, trait_decl.sym);
4444
self.self_sym_is_set = true;
4545
mut trait_info := @as(ast.TypeInfo.Trait, self.self_sym.info);
@@ -96,7 +96,7 @@ extend Resolver {
9696
}
9797
}
9898
}
99-
for variant in enum_decl.variants {
99+
for mut variant in enum_decl.variants {
100100
if !variant.decls.is_empty() {
101101
old_self_sym2 := self.self_sym;
102102
self.self_sym = variant.type.symbol() ?? self.self_sym;
@@ -110,7 +110,7 @@ extend Resolver {
110110
}
111111
self.resolve_decls(enum_decl.decls);
112112
},
113-
.Struct(struct_decl) -> {
113+
.Struct(mut struct_decl) -> {
114114
self.self_sym = @as(ast.TypeSym, struct_decl.sym);
115115
self.self_sym_is_set = true;
116116
for mut base in struct_decl.bases {
@@ -120,7 +120,7 @@ extend Resolver {
120120
if base_sym.info is .Trait(mut trait_info) {
121121
struct_info.traits.push(base_sym);
122122
trait_info.implement(self.self_sym);
123-
} else if base_sym.info is .Struct(struct_info2) {
123+
} else if base_sym.info is .Struct(mut struct_info2) {
124124
struct_info.bases.push(base_sym);
125125
for mut b_trait in struct_info2.traits {
126126
@as(ast.TypeInfo.Trait, b_trait.info).implement(
@@ -211,7 +211,7 @@ extend Resolver {
211211
self.resolve_stmt(stmt);
212212
}
213213
},
214-
.Test(test_decl) -> {
214+
.Test(mut test_decl) -> {
215215
for mut stmt in test_decl.stmts {
216216
self.resolve_stmt(stmt);
217217
}

lib/rivet/src/resolver/exprs.ri

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ extend Resolver {
3030
} else {
3131
report.error("cannot resolve `self` expression", self_ty.pos);
3232
},
33-
.TupleLiteral(tuple_lit) -> {
33+
.TupleLiteral(mut tuple_lit) -> {
3434
for mut value in tuple_lit.values {
3535
self.resolve_expr(value);
3636
}
@@ -61,7 +61,7 @@ extend Resolver {
6161
self.resolve_expr(cap_value);
6262
}
6363
},
64-
.ArrayLiteral(array_lit) -> {
64+
.ArrayLiteral(mut array_lit) -> {
6565
for mut value in array_lit.values {
6666
self.resolve_expr(value);
6767
}
@@ -173,7 +173,7 @@ extend Resolver {
173173
self.resolve_expr(guard.cond);
174174
}
175175
},
176-
.If(if_expr) -> {
176+
.If(mut if_expr) -> {
177177
for mut branch in if_expr.branches {
178178
if !branch.is_else {
179179
self.resolve_expr(branch.cond);

rivetc/src/checker.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -280,11 +280,14 @@ def check_stmt(self, stmt):
280280
elem_typ = self.comp.comptime_number_to_type(
281281
iterable_sym.info.elem_typ
282282
)
283-
if stmt.value.is_mut and not iterable_sym.info.is_mut:
284-
report.error(
285-
f"cannot modify immutable {iterable_sym.kind}",
286-
stmt.iterable.pos
287-
)
283+
if stmt.value.is_mut:
284+
if not iterable_sym.info.is_mut:
285+
report.error(
286+
f"cannot modify immutable {iterable_sym.kind}",
287+
stmt.iterable.pos
288+
)
289+
else:
290+
self.check_expr_is_mut(stmt.iterable)
288291
elif stmt.value.is_ref:
289292
elem_typ = type.Ptr(elem_typ)
290293
if stmt.index != None:
@@ -1913,8 +1916,7 @@ def check_expr_is_mut(self, expr, from_assign = False):
19131916
if expr.is_path:
19141917
self.check_sym_is_mut(expr.field_sym, expr.pos)
19151918
return
1916-
else:
1917-
self.check_expr_is_mut(expr.left, from_assign)
1919+
self.check_expr_is_mut(expr.left, from_assign)
19181920
if expr.is_indirect and isinstance(expr.left_typ, type.Ptr):
19191921
if not expr.left_typ.is_mut:
19201922
report.error(
@@ -1951,7 +1953,7 @@ def check_expr_is_mut(self, expr, from_assign = False):
19511953
expr.pos
19521954
)
19531955
return
1954-
self.check_expr_is_mut(expr.left)
1956+
self.check_expr_is_mut(expr.left, from_assign)
19551957
expr_sym = expr.left.typ.symbol()
19561958
if not expr_sym.info.is_mut:
19571959
report.error(

tests/valid/src/for_stmt.ri

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ test "`for` statement with referenced value" {
3232
}
3333

3434
test "`for` statement with mutable value" {
35-
arr: []mut int32 := +[1, 2, 3];
35+
mut arr: []mut int32 := +[1, 2, 3];
3636
for mut elem in arr {
3737
elem = elem * 2;
3838
}

0 commit comments

Comments
 (0)