152152 v_current_commit_hash string // same as old C.V_CURRENT_COMMIT_HASH
153153 assign_stmt_attr string // for `x := [1,2,3] @[freed]`
154154
155- js_string ast.Type = ast.void_type // when `js"string literal"` is used, `js_string` will be equal to `JS.String`
155+ js_string ast.Type = ast.void_type // when `js"string literal"` is used, `js_string` will be equal to `JS.String`
156+ checker_transformer & transformer.Transformer = unsafe { nil }
156157}
157158
158159pub fn new_checker (table & ast.Table, pref_ & pref.Preferences) & Checker {
@@ -174,6 +175,7 @@ pub fn new_checker(table &ast.Table, pref_ &pref.Preferences) &Checker {
174175 )
175176 match_exhaustive_cutoff_limit: pref_.checker_match_exhaustive_cutoff_limit
176177 v_current_commit_hash: v_current_commit_hash
178+ checker_transformer: transformer.new_transformer_with_table (table, pref_)
177179 }
178180 checker.type_resolver = type_resolver.TypeResolver.new (table, checker)
179181 checker.comptime = & checker.type_resolver.info
@@ -2109,8 +2111,7 @@ fn (mut c Checker) enum_decl(mut node ast.EnumDecl) {
21092111 ast.InfixExpr {
21102112 // Handle `enum Foo { x = 1 + 2 }`
21112113 c.infix_expr (mut field.expr)
2112- mut t := transformer.new_transformer_with_table (c.table, c.pref)
2113- folded_expr := t.infix_expr (mut field.expr)
2114+ folded_expr := c.checker_transformer.infix_expr (mut field.expr)
21142115
21152116 if folded_expr is ast.IntegerLiteral {
21162117 c.check_enum_field_integer_literal (folded_expr, signed, node.is_multi_allowed,
@@ -2120,8 +2121,7 @@ fn (mut c Checker) enum_decl(mut node ast.EnumDecl) {
21202121 }
21212122 ast.ParExpr {
21222123 c.expr (mut field.expr.expr)
2123- mut t := transformer.new_transformer_with_table (c.table, c.pref)
2124- folded_expr := t.expr (mut field.expr.expr)
2124+ folded_expr := c.checker_transformer.expr (mut field.expr.expr)
21252125
21262126 if folded_expr is ast.IntegerLiteral {
21272127 c.check_enum_field_integer_literal (folded_expr, signed, node.is_multi_allowed,
@@ -2160,9 +2160,7 @@ fn (mut c Checker) enum_decl(mut node ast.EnumDecl) {
21602160 if field.expr.kind == .constant && field.expr.obj.typ.is_int () {
21612161 // accepts int constants as enum value
21622162 if mut field.expr.obj is ast.ConstField {
2163- mut t := transformer.new_transformer_with_table (c.table,
2164- c.pref)
2165- folded_expr := t.expr (mut field.expr.obj.expr)
2163+ folded_expr := c.checker_transformer.expr (mut field.expr.obj.expr)
21662164
21672165 if folded_expr is ast.IntegerLiteral {
21682166 c.check_enum_field_integer_literal (folded_expr, signed,
0 commit comments