struct -> class
This commit is contained in:
23
generator.v
23
generator.v
@@ -9,20 +9,20 @@ mut:
|
||||
}
|
||||
|
||||
fn mangle_var(name string) string {
|
||||
return 'one_v${name}'
|
||||
return 'one_var_${name}'
|
||||
}
|
||||
|
||||
fn mangle_func(name string) string {
|
||||
if name == 'main' {return 'main'}
|
||||
return 'one_f${name}'
|
||||
return 'one_func_${name}'
|
||||
}
|
||||
|
||||
fn mangle_struct(name string) string {
|
||||
return 'one_s${name}_'
|
||||
return 'one_class_${name}_'
|
||||
}
|
||||
|
||||
fn mangle_if_struct_type(name string) string {
|
||||
if name[0..6] != 'struct' {return name}
|
||||
if name.len < 7 || name[0..6] != 'struct' {return name}
|
||||
return 'struct ${mangle_struct(name[7..])}'
|
||||
}
|
||||
|
||||
@@ -62,7 +62,8 @@ fn (mut g Generator) gen_stmt(stmt Stmt) {
|
||||
g.out.writeln('}')
|
||||
}
|
||||
FuncDecl {
|
||||
c_type := g.get_c_type(stmt.ret_type)
|
||||
dump(stmt.ret_type)
|
||||
c_type := mangle_if_struct_type(g.get_c_type(stmt.ret_type))
|
||||
g.out.write_string('${c_type} ${mangle_func(stmt.name)}(')
|
||||
for param in stmt.params {
|
||||
g.gen_stmt(param)
|
||||
@@ -74,10 +75,10 @@ fn (mut g Generator) gen_stmt(stmt Stmt) {
|
||||
g.gen_stmt(stmt.block)
|
||||
}
|
||||
Param {
|
||||
c_type := g.get_c_type(stmt.type)
|
||||
c_type := mangle_if_struct_type(g.get_c_type(stmt.type))
|
||||
g.out.write_string('${c_type} ${mangle_var(stmt.name)}')
|
||||
}
|
||||
StructDecl {
|
||||
ClassDecl {
|
||||
g.out.writeln('struct ${mangle_struct(stmt.name)} {')
|
||||
for member in stmt.members {
|
||||
g.gen_expr(member)
|
||||
@@ -124,7 +125,7 @@ fn (mut g Generator) gen_expr(expr Expr) {
|
||||
g.out.write_string(')')
|
||||
}
|
||||
TypeCast {
|
||||
c_type := g.get_c_type(expr.type)
|
||||
c_type := mangle_if_struct_type(g.get_c_type(expr.type))
|
||||
g.out.write_string('((${c_type})')
|
||||
g.gen_expr(expr.expr)
|
||||
g.out.write_string(')')
|
||||
@@ -144,11 +145,11 @@ fn (mut g Generator) gen_expr(expr Expr) {
|
||||
}
|
||||
g.out.write_string(')')
|
||||
}
|
||||
StructMember {
|
||||
c_type := g.get_c_type(expr.type)
|
||||
ClassMember {
|
||||
c_type := mangle_if_struct_type(g.get_c_type(expr.type))
|
||||
g.out.write_string('${c_type} ${expr.name}')
|
||||
}
|
||||
StructInstantiation {
|
||||
ClassInstantiation {
|
||||
g.out.write_string('(struct ${mangle_struct(expr.name)}){')
|
||||
for m_expr in expr.member_values {
|
||||
g.gen_expr(m_expr)
|
||||
|
||||
Reference in New Issue
Block a user