cgen: alias & map types & add map_string/map_int aliases
parent
dfaba54376
commit
853bb4c41e
|
@ -44,7 +44,7 @@ pub fn (g mut Gen) init() {
|
||||||
g.definitions.writeln(c_builtin_types)
|
g.definitions.writeln(c_builtin_types)
|
||||||
g.definitions.writeln(c_headers)
|
g.definitions.writeln(c_headers)
|
||||||
g.write_builtin_types()
|
g.write_builtin_types()
|
||||||
g.write_array_types()
|
g.write_typedef_types()
|
||||||
g.write_sorted_types()
|
g.write_sorted_types()
|
||||||
g.write_multi_return_types()
|
g.write_multi_return_types()
|
||||||
g.definitions.writeln('// end of definitions #endif')
|
g.definitions.writeln('// end of definitions #endif')
|
||||||
|
@ -67,20 +67,34 @@ pub fn (g &Gen) styp(t string) string {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
pub fn (g mut Gen) write_typedef_types() {
|
||||||
pub fn (g mut Gen) write_array_types() {
|
|
||||||
for typ in g.table.types {
|
for typ in g.table.types {
|
||||||
if typ.kind == .array {
|
match typ.kind {
|
||||||
styp := typ.name.replace('.', '__')
|
.alias {
|
||||||
g.definitions.writeln('typedef array $styp;')
|
parent := &g.table.types[typ.parent_idx]
|
||||||
}
|
styp := typ.name.replace('.', '__')
|
||||||
else if typ.kind == .array_fixed {
|
parent_styp := parent.name.replace('.', '__')
|
||||||
styp := typ.name.replace('.', '__')
|
g.definitions.writeln('typedef $parent_styp $styp;')
|
||||||
// array_fixed_char_300 => char x[300]
|
}
|
||||||
mut fixed := styp[12..]
|
.array {
|
||||||
len := styp.after('_')
|
styp := typ.name.replace('.', '__')
|
||||||
fixed = fixed[..fixed.len - len.len - 1]
|
g.definitions.writeln('typedef array $styp;')
|
||||||
g.definitions.writeln('typedef $fixed $styp [$len];')
|
}
|
||||||
|
.array_fixed {
|
||||||
|
styp := typ.name.replace('.', '__')
|
||||||
|
// array_fixed_char_300 => char x[300]
|
||||||
|
mut fixed := styp[12..]
|
||||||
|
len := styp.after('_')
|
||||||
|
fixed = fixed[..fixed.len - len.len - 1]
|
||||||
|
g.definitions.writeln('typedef $fixed $styp [$len];')
|
||||||
|
}
|
||||||
|
.map {
|
||||||
|
styp := typ.name.replace('.', '__')
|
||||||
|
g.definitions.writeln('typedef map $styp;')
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -248,11 +248,18 @@ pub fn (t mut Table) register_builtin_type_symbols() {
|
||||||
kind: .map
|
kind: .map
|
||||||
name: 'map'
|
name: 'map'
|
||||||
})
|
})
|
||||||
// TODO: remove
|
// TODO: remove. for v1 map compatibility
|
||||||
|
map_string_string_idx := t.find_or_register_map(string_type, string_type)
|
||||||
|
map_string_int_idx := t.find_or_register_map(string_type, int_type)
|
||||||
t.register_type_symbol(TypeSymbol{
|
t.register_type_symbol(TypeSymbol{
|
||||||
parent_idx: map_type_idx
|
kind: .alias
|
||||||
kind: .struct_
|
|
||||||
name: 'map_string'
|
name: 'map_string'
|
||||||
|
parent_idx: map_string_string_idx
|
||||||
|
})
|
||||||
|
t.register_type_symbol(TypeSymbol{
|
||||||
|
kind: .alias
|
||||||
|
name: 'map_int'
|
||||||
|
parent_idx: map_string_int_idx
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue