struct -> class

This commit is contained in:
uan
2026-02-05 19:40:59 +01:00
parent 0d5cc35b5a
commit 5af769acc2
4 changed files with 86 additions and 56 deletions

View File

@@ -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)