gen: add type name to comp for (#10881)

pull/10353/head
Louis Schmieder 2021-07-21 22:45:08 +02:00 committed by GitHub
parent 713a079684
commit dd3ee20566
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 5 additions and 0 deletions

View File

@ -108,6 +108,7 @@ pub:
args []MethodArgs args []MethodArgs
return_type int return_type int
typ int typ int
type_name string
} }
// FieldData holds information about a field. Fields reside on structs. // FieldData holds information about a field. Fields reside on structs.
@ -119,6 +120,7 @@ pub:
is_mut bool is_mut bool
is_shared bool is_shared bool
typ int typ int
type_name string
} }
enum AttributeKind { enum AttributeKind {

View File

@ -459,6 +459,7 @@ fn (mut g Gen) comp_for(node ast.CompFor) {
ret_typ := method.return_type.idx() ret_typ := method.return_type.idx()
g.writeln('\t${node.val_var}.typ = $styp;') g.writeln('\t${node.val_var}.typ = $styp;')
g.writeln('\t${node.val_var}.return_type = $ret_typ;') g.writeln('\t${node.val_var}.return_type = $ret_typ;')
g.writeln('\t${node.val_var}.type_name = _SLIT("${g.table.get_type_symbol(ret_typ).name}");')
// //
g.comptime_var_type_map['${node.val_var}.return_type'] = ret_typ g.comptime_var_type_map['${node.val_var}.return_type'] = ret_typ
g.comptime_var_type_map['${node.val_var}.typ'] = styp g.comptime_var_type_map['${node.val_var}.typ'] = styp
@ -502,6 +503,7 @@ fn (mut g Gen) comp_for(node ast.CompFor) {
// g.writeln('\t${node.val_var}.typ = _SLIT("$field_sym.name");') // g.writeln('\t${node.val_var}.typ = _SLIT("$field_sym.name");')
styp := field.typ styp := field.typ
g.writeln('\t${node.val_var}.typ = $styp;') g.writeln('\t${node.val_var}.typ = $styp;')
g.writeln('\t${node.val_var}.type_name = _SLIT("${g.table.get_type_symbol(styp).name}");')
g.writeln('\t${node.val_var}.is_pub = $field.is_pub;') g.writeln('\t${node.val_var}.is_pub = $field.is_pub;')
g.writeln('\t${node.val_var}.is_mut = $field.is_mut;') g.writeln('\t${node.val_var}.is_mut = $field.is_mut;')
g.writeln('\t${node.val_var}.is_shared = ${field.typ.has_flag(.shared_f)};') g.writeln('\t${node.val_var}.is_shared = ${field.typ.has_flag(.shared_f)};')

View File

@ -68,6 +68,7 @@ fn test_comptime_for_fields() {
$for field in App.fields { $for field in App.fields {
println(' field: $field.name | ' + no_lines('$field')) println(' field: $field.name | ' + no_lines('$field'))
$if field.typ is string { $if field.typ is string {
assert field.type_name == 'string'
assert field.name in ['a', 'b', 'g'] assert field.name in ['a', 'b', 'g']
} }
$if field.typ is f32 { $if field.typ is f32 {