cgen: typ()
parent
1a8b7d0447
commit
124f754443
|
@ -46,9 +46,22 @@ pub fn (g mut Gen) init() {
|
|||
}
|
||||
|
||||
// V type to C type
|
||||
pub fn (g &Gen) typ(t string) string {
|
||||
pub fn (g &Gen) typ(t table.Type) string {
|
||||
nr_muls := table.type_nr_muls(t)
|
||||
sym := g.table.get_type_symbol(t)
|
||||
mut styp := sym.name.replace_each(['.', '__'])
|
||||
if nr_muls > 0 {
|
||||
styp += strings.repeat(`*`, nr_muls)
|
||||
}
|
||||
return styp
|
||||
}
|
||||
|
||||
/*
|
||||
pub fn (g &Gen) styp(t string) string {
|
||||
return t.replace_each(['.', '__'])
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
pub fn (g mut Gen) write_array_types() {
|
||||
for typ in g.table.types {
|
||||
|
@ -212,7 +225,7 @@ fn (g mut Gen) stmt(node ast.Stmt) {
|
|||
g.writeln('}')
|
||||
}
|
||||
ast.GlobalDecl {
|
||||
styp := g.typ(g.table.get_type_symbol(it.typ).name)
|
||||
styp := g.typ(it.typ)
|
||||
g.definitions.writeln('$styp $it.name; // global')
|
||||
}
|
||||
ast.GotoLabel {
|
||||
|
@ -262,8 +275,7 @@ fn (g mut Gen) stmt(node ast.Stmt) {
|
|||
g.stmts(it.stmts)
|
||||
}
|
||||
ast.VarDecl {
|
||||
type_sym := g.table.get_type_symbol(it.typ)
|
||||
styp := type_sym.name.replace('.', '__')
|
||||
styp := g.typ(it.typ)
|
||||
g.write('$styp $it.name = ')
|
||||
g.expr(it.expr)
|
||||
g.writeln(';')
|
||||
|
@ -284,14 +296,13 @@ fn (g mut Gen) gen_fn_decl(it ast.FnDecl) {
|
|||
g.write('int ${it.name}(')
|
||||
}
|
||||
else {
|
||||
type_sym := g.table.get_type_symbol(it.typ)
|
||||
mut name := it.name
|
||||
if it.is_method {
|
||||
name = g.table.get_type_symbol(it.receiver.typ).name + '_' + name
|
||||
}
|
||||
name = name.replace('.', '__')
|
||||
// type_name := g.table.type_to_str(it.typ)
|
||||
type_name := type_sym.name.replace('.', '__') // g.table.type_to_str(it.typ)
|
||||
type_name := g.typ(it.typ)
|
||||
g.write('$type_name ${name}(')
|
||||
g.definitions.write('$type_name ${name}(')
|
||||
}
|
||||
|
@ -564,8 +575,7 @@ fn (g mut Gen) expr(node ast.Expr) {
|
|||
}
|
||||
// `user := User{name: 'Bob'}`
|
||||
ast.StructInit {
|
||||
type_sym := g.table.get_type_symbol(it.typ)
|
||||
styp := g.typ(type_sym.name)
|
||||
styp := g.typ(it.typ)
|
||||
g.writeln('($styp){')
|
||||
for i, field in it.fields {
|
||||
g.write('\t.$field = ')
|
||||
|
@ -642,7 +652,6 @@ fn (g mut Gen) index_expr(node ast.IndexExpr) {
|
|||
|
||||
fn (g mut Gen) const_decl(node ast.ConstDecl) {
|
||||
for i, field in node.fields {
|
||||
field_type_sym := g.table.get_type_symbol(field.typ)
|
||||
name := field.name.replace('.', '__')
|
||||
expr := node.exprs[i]
|
||||
match expr {
|
||||
|
@ -656,7 +665,7 @@ fn (g mut Gen) const_decl(node ast.ConstDecl) {
|
|||
g.writeln('')
|
||||
}
|
||||
else {
|
||||
styp := g.typ(field_type_sym.name)
|
||||
styp := g.typ(field.typ)
|
||||
g.definitions.writeln('$styp $name; // inited later') // = ')
|
||||
// TODO
|
||||
// g.expr(node.exprs[i])
|
||||
|
|
Loading…
Reference in New Issue