Skip to content

Commit 0aa3e2d

Browse files
authored
transformer: fix more failing tests with -new-transformer (#26086)
1 parent 6a806bc commit 0aa3e2d

File tree

5 files changed

+13
-7
lines changed

5 files changed

+13
-7
lines changed

vlib/v/checker/checker.v

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ pub fn new_checker(table &ast.Table, pref_ &pref.Preferences) &Checker {
180180
v_current_commit_hash: v_current_commit_hash
181181
checker_transformer: transformer.new_transformer_with_table(table, pref_)
182182
}
183+
checker.checker_transformer.skip_array_transform = true
183184
checker.type_resolver = type_resolver.TypeResolver.new(table, checker)
184185
checker.comptime = &checker.type_resolver.info
185186
return checker

vlib/v/gen/c/array.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ fn (mut g Gen) fixed_array_init(node ast.ArrayInit, array_type Type, var_name st
170170
tmp_var := g.expr_with_var(expr, node.expr_types[i], false)
171171
g.fixed_array_var_init(tmp_var, false, elem_info.elem_type, elem_info.size)
172172
} else {
173-
expr_type := if node.expr_types.len > i {
173+
expr_type := if node.expr_types.len > i && node.expr_types[i] != 0 {
174174
node.expr_types[i]
175175
} else {
176176
node.elem_type

vlib/v/gen/c/cgen.v

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1779,10 +1779,14 @@ pub fn (mut g Gen) write_typedef_types() {
17791779
} else if !info.is_fn_ret {
17801780
base := g.styp(info.elem_type.clear_option_and_result())
17811781
if info.elem_type.has_flag(.option) && base !in g.options_forward {
1782+
styp_elem, elem_base := g.option_type_name(info.elem_type)
17821783
lock g.done_options {
17831784
if base !in g.done_options {
1785+
g.done_options << elem_base
1786+
g.typedefs.writeln('typedef struct ${styp_elem} ${styp_elem};')
1787+
g.type_definitions.writeln('${g.option_type_text(styp_elem,
1788+
elem_base)};')
17841789
g.type_definitions.writeln('typedef ${fixed} ${styp} [${len}];')
1785-
g.options_forward << base
17861790
g.done_options << styp
17871791
}
17881792
}

vlib/v/transformer/array.v

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ pub fn (mut t Transformer) array_init(mut node ast.ArrayInit) ast.Expr {
2020
if node.has_init {
2121
node.init_expr = t.expr(mut node.init_expr)
2222
}
23-
if !t.pref.new_transform || node.is_fixed || t.inside_in || node.has_len || node.has_cap
24-
|| node.exprs.len == 0 {
23+
if !t.pref.new_transform || t.skip_array_transform || node.is_fixed || t.inside_in
24+
|| node.has_len || node.has_cap || node.exprs.len == 0 {
2525
return node
2626
}
2727
// For C and native transform into a function call `builtin__new_array_from_c_array_noscan(...)` etc

vlib/v/transformer/transformer.v

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ import v.util
1010
pub struct Transformer {
1111
pref &pref.Preferences
1212
pub mut:
13-
index &IndexState
14-
table &ast.Table = unsafe { nil }
15-
file &ast.File = unsafe { nil }
13+
index &IndexState
14+
table &ast.Table = unsafe { nil }
15+
file &ast.File = unsafe { nil }
16+
skip_array_transform bool // is the checker transformer, set by the checker
1617
mut:
1718
is_assert bool
1819
inside_dump bool

0 commit comments

Comments
 (0)