cgen: fix const decl gen when translated (#14255)
parent
a4fd349cf1
commit
afbe6bf3a2
|
@ -4377,7 +4377,7 @@ fn (mut g Gen) const_decl(node ast.ConstDecl) {
|
||||||
if field.is_simple_define_const() {
|
if field.is_simple_define_const() {
|
||||||
// "Simple" expressions are not going to need multiple statements,
|
// "Simple" expressions are not going to need multiple statements,
|
||||||
// only the ones which are inited later, so it's safe to use expr_string
|
// only the ones which are inited later, so it's safe to use expr_string
|
||||||
g.const_decl_simple_define(name, g.expr_string(field_expr))
|
g.const_decl_simple_define(field.name, g.expr_string(field_expr))
|
||||||
} else {
|
} else {
|
||||||
g.const_decl_init_later(field.mod, name, field.expr, field.typ, false)
|
g.const_decl_init_later(field.mod, name, field.expr, field.typ, false)
|
||||||
}
|
}
|
||||||
|
@ -4479,7 +4479,17 @@ fn (mut g Gen) const_decl_simple_define(name string, val string) {
|
||||||
// so that we don't pollute the binary with unnecessary global vars
|
// so that we don't pollute the binary with unnecessary global vars
|
||||||
// Do not do this when building a module, otherwise the consts
|
// Do not do this when building a module, otherwise the consts
|
||||||
// will not be accessible.
|
// will not be accessible.
|
||||||
g.definitions.write_string('#define _const_$name ')
|
mut x := util.no_dots(name)
|
||||||
|
if g.pref.translated && !g.is_builtin_mod && !util.module_is_builtin(name.all_before_last('.')) {
|
||||||
|
// Don't prepend "_const" to translated C consts,
|
||||||
|
// but only in user code, continue prepending "_const" to builtin consts.
|
||||||
|
if x.starts_with('main__') {
|
||||||
|
x = x['main__'.len..]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
x = '_const_$x'
|
||||||
|
}
|
||||||
|
g.definitions.write_string('#define $x ')
|
||||||
g.definitions.writeln(val)
|
g.definitions.writeln(val)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue