cgen: merge cc_type and cc_type2 (#9036)
parent
2be3a72df6
commit
6d77594409
|
@ -541,7 +541,7 @@ fn (mut g Gen) typ(t table.Type) string {
|
||||||
|
|
||||||
fn (mut g Gen) base_type(t table.Type) string {
|
fn (mut g Gen) base_type(t table.Type) string {
|
||||||
share := t.share()
|
share := t.share()
|
||||||
mut styp := if share == .atomic_t { t.atomic_typename() } else { g.cc_type(t) }
|
mut styp := if share == .atomic_t { t.atomic_typename() } else { g.cc_type(t, true) }
|
||||||
if t.has_flag(.shared_f) {
|
if t.has_flag(.shared_f) {
|
||||||
styp = g.find_or_register_shared(t, styp)
|
styp = g.find_or_register_shared(t, styp)
|
||||||
}
|
}
|
||||||
|
@ -674,10 +674,9 @@ static inline Option2_void __Option2_${styp}_pushval($styp ch, $el_type e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: merge cc_type and cc_type2
|
// cc_type whether to prefix 'struct' or not (C__Foo -> struct Foo)
|
||||||
// cc_type but without the `struct` prefix
|
fn (g &Gen) cc_type(typ table.Type, is_prefix_struct bool) string {
|
||||||
fn (g &Gen) cc_type2(t table.Type) string {
|
sym := g.table.get_type_symbol(g.unwrap_generic(typ))
|
||||||
sym := g.table.get_type_symbol(g.unwrap_generic(t))
|
|
||||||
mut styp := sym.cname
|
mut styp := sym.cname
|
||||||
// TODO: this needs to be removed; cgen shouldn't resolve generic types (job of checker)
|
// TODO: this needs to be removed; cgen shouldn't resolve generic types (job of checker)
|
||||||
if mut sym.info is table.Struct {
|
if mut sym.info is table.Struct {
|
||||||
|
@ -702,15 +701,7 @@ fn (g &Gen) cc_type2(t table.Type) string {
|
||||||
}
|
}
|
||||||
return cname
|
return cname
|
||||||
}
|
}
|
||||||
return styp
|
if is_prefix_struct && styp.starts_with('C__') {
|
||||||
}
|
|
||||||
|
|
||||||
// cc_type returns the Cleaned Concrete Type name, *without ptr*,
|
|
||||||
// i.e. it's always just Cat, not Cat_ptr:
|
|
||||||
fn (g &Gen) cc_type(t table.Type) string {
|
|
||||||
sym := g.table.get_type_symbol(g.unwrap_generic(t))
|
|
||||||
mut styp := g.cc_type2(t)
|
|
||||||
if styp.starts_with('C__') {
|
|
||||||
styp = styp[3..]
|
styp = styp[3..]
|
||||||
if sym.kind == .struct_ {
|
if sym.kind == .struct_ {
|
||||||
info := sym.info as table.Struct
|
info := sym.info as table.Struct
|
||||||
|
@ -1554,8 +1545,8 @@ fn (mut g Gen) expr_with_cast(expr ast.Expr, got_type_raw table.Type, expected_t
|
||||||
}
|
}
|
||||||
if exp_sym.kind == .interface_ && got_type_raw.idx() != expected_type.idx()
|
if exp_sym.kind == .interface_ && got_type_raw.idx() != expected_type.idx()
|
||||||
&& !expected_type.has_flag(.optional) {
|
&& !expected_type.has_flag(.optional) {
|
||||||
got_styp := g.cc_type(got_type)
|
got_styp := g.cc_type(got_type, true)
|
||||||
exp_styp := g.cc_type(expected_type)
|
exp_styp := g.cc_type(expected_type, true)
|
||||||
g.write('I_${got_styp}_to_Interface_$exp_styp')
|
g.write('I_${got_styp}_to_Interface_$exp_styp')
|
||||||
if expected_type.is_ptr() {
|
if expected_type.is_ptr() {
|
||||||
g.write('_ptr')
|
g.write('_ptr')
|
||||||
|
@ -6172,7 +6163,7 @@ fn (mut g Gen) interface_table() string {
|
||||||
for st in inter_info.types {
|
for st in inter_info.types {
|
||||||
// cctype is the Cleaned Concrete Type name, *without ptr*,
|
// cctype is the Cleaned Concrete Type name, *without ptr*,
|
||||||
// i.e. cctype is always just Cat, not Cat_ptr:
|
// i.e. cctype is always just Cat, not Cat_ptr:
|
||||||
cctype := g.cc_type(st)
|
cctype := g.cc_type(st, true)
|
||||||
$if debug_interface_table ? {
|
$if debug_interface_table ? {
|
||||||
eprintln(
|
eprintln(
|
||||||
'>> interface name: $ityp.name | concrete type: $st.debug() | st symname: ' +
|
'>> interface name: $ityp.name | concrete type: $st.debug() | st symname: ' +
|
||||||
|
|
|
@ -158,7 +158,7 @@ fn (mut g Gen) gen_fn_decl(node ast.FnDecl, skip bool) {
|
||||||
name = util.replace_op(name)
|
name = util.replace_op(name)
|
||||||
}
|
}
|
||||||
if node.is_method {
|
if node.is_method {
|
||||||
name = g.cc_type2(node.receiver.typ) + '_' + name
|
name = g.cc_type(node.receiver.typ, false) + '_' + name
|
||||||
// name = g.table.get_type_symbol(node.receiver.typ).name + '_' + name
|
// name = g.table.get_type_symbol(node.receiver.typ).name + '_' + name
|
||||||
}
|
}
|
||||||
if node.language == .c {
|
if node.language == .c {
|
||||||
|
@ -477,11 +477,9 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
|
||||||
if node.receiver_type == 0 {
|
if node.receiver_type == 0 {
|
||||||
g.checker_bug('CallExpr.receiver_type is 0 in method_call', node.pos)
|
g.checker_bug('CallExpr.receiver_type is 0 in method_call', node.pos)
|
||||||
}
|
}
|
||||||
// mut receiver_type_name := g.cc_type(node.receiver_type)
|
|
||||||
// mut receiver_type_name := g.typ(node.receiver_type)
|
|
||||||
typ_sym := g.table.get_type_symbol(g.unwrap_generic(node.receiver_type))
|
typ_sym := g.table.get_type_symbol(g.unwrap_generic(node.receiver_type))
|
||||||
// mut receiver_type_name := util.no_dots(typ_sym.name)
|
mut receiver_type_name := util.no_dots(g.cc_type(g.unwrap_generic(node.receiver_type),
|
||||||
mut receiver_type_name := util.no_dots(g.cc_type2(g.unwrap_generic(node.receiver_type)))
|
false))
|
||||||
if typ_sym.kind == .interface_ && (typ_sym.info as table.Interface).defines_method(node.name) {
|
if typ_sym.kind == .interface_ && (typ_sym.info as table.Interface).defines_method(node.name) {
|
||||||
// Speaker_name_table[s._interface_idx].speak(s._object)
|
// Speaker_name_table[s._interface_idx].speak(s._object)
|
||||||
$if debug_interface_method_call ? {
|
$if debug_interface_method_call ? {
|
||||||
|
@ -591,7 +589,6 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
|
||||||
if g.pref.obfuscate && g.cur_mod.name == 'main' && name.starts_with('main__')
|
if g.pref.obfuscate && g.cur_mod.name == 'main' && name.starts_with('main__')
|
||||||
&& node.name != 'str' {
|
&& node.name != 'str' {
|
||||||
sym := g.table.get_type_symbol(node.receiver_type)
|
sym := g.table.get_type_symbol(node.receiver_type)
|
||||||
// key = g.cc_type2(node.receiver.typ) + '.' + node.name
|
|
||||||
key := sym.name + '.' + node.name
|
key := sym.name + '.' + node.name
|
||||||
g.write('/* obf method call: $key */')
|
g.write('/* obf method call: $key */')
|
||||||
name = g.obf_table[key] or {
|
name = g.obf_table[key] or {
|
||||||
|
|
Loading…
Reference in New Issue