cgen: fix a buggy comparison, add ability to do println(sym.debug())
parent
0114333d34
commit
321daede1d
|
@ -0,0 +1,17 @@
|
|||
import v.table
|
||||
|
||||
fn main() {
|
||||
t := table.new_table()
|
||||
ityp := table.int_type
|
||||
isym := t.get_type_symbol(ityp)
|
||||
println(ityp.debug())
|
||||
println(isym)
|
||||
println(isym.debug())
|
||||
x := ityp == table.string_type
|
||||
// the next line should produce at least a warning, or even an error, without an explicit cast:
|
||||
z := isym == table.string_type
|
||||
println(typeof(isym))
|
||||
println(typeof(table.string_type))
|
||||
println(x)
|
||||
println(z)
|
||||
}
|
|
@ -1678,7 +1678,7 @@ fn (mut g Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) {
|
|||
if left.left_type.is_ptr() {
|
||||
g.write('*')
|
||||
}
|
||||
needs_clone := elem_typ == table.string_type && g.pref.autofree
|
||||
needs_clone := info.elem_type == table.string_type && g.pref.autofree
|
||||
if needs_clone {
|
||||
g.write('/*1*/string_clone(')
|
||||
}
|
||||
|
|
|
@ -183,6 +183,21 @@ pub fn (t Type) has_flag(flag TypeFlag) bool {
|
|||
return int(t) & (1 << (int(flag) + 24)) > 0
|
||||
}
|
||||
|
||||
pub fn (ts TypeSymbol) debug() []string {
|
||||
mut res := []string{}
|
||||
res << 'parent_idx: $ts.parent_idx'
|
||||
res << 'mod: $ts.mod'
|
||||
res << 'name: $ts.name'
|
||||
res << 'source_name: $ts.source_name'
|
||||
res << 'info: $ts.info'
|
||||
res << 'kind: $ts.kind'
|
||||
res << 'is_public: $ts.is_public'
|
||||
res << 'is_written: $ts.is_written'
|
||||
res << 'language: $ts.language'
|
||||
res << 'methods ($ts.methods.len): ' + ts.methods.map(it.str()).join(', ')
|
||||
return res
|
||||
}
|
||||
|
||||
pub fn (t Type) debug() []string {
|
||||
mut res := []string{}
|
||||
res << 'idx: ${t.idx():5}'
|
||||
|
|
Loading…
Reference in New Issue