v3.transform
fn transform #
fn transform(mut a flat.FlatAst, tc &types.TypeChecker)
--- entry point ---
struct FieldInfo #
struct FieldInfo {
pub:
name string
typ string
default_expr flat.NodeId
}
struct SmartcastContext #
struct SmartcastContext {
pub:
expr_name string // the expression being smartcast (e.g. "node")
variant_name string // the variant type name (e.g. "Ident")
sum_type_name string // the parent sum type name (e.g. "Expr")
}
struct StructInfo #
struct StructInfo {
pub:
name string
module string
fields []FieldInfo
}
struct Transformer #
struct Transformer {
mut:
a &flat.FlatAst = unsafe { nil }
tc &types.TypeChecker = unsafe { nil }
structs map[string]StructInfo
globals map[string]string
sum_types map[string][]string
fn_ret_types map[string]string
enum_types map[string][]string
cur_file string
cur_module string
cur_fn_name string
cur_fn_ret_type string
var_types []VarTypeBinding
temp_counter int
pending_stmts []flat.NodeId
smartcast_stack []SmartcastContext
}
fn (Transformer) drain_pending #
fn (mut t Transformer) drain_pending(mut result []flat.NodeId)
fn (Transformer) find_smartcast #
fn (t &Transformer) find_smartcast(expr_name string) ?SmartcastContext
fn (Transformer) get_global_type #
fn (t &Transformer) get_global_type(name string) ?string
fn (Transformer) get_struct_info #
fn (t &Transformer) get_struct_info(name string) ?StructInfo
--- public query helpers ---
fn (Transformer) is_sum_variant #
fn (t &Transformer) is_sum_variant(name string) bool
fn (Transformer) make_array_init #
fn (mut t Transformer) make_array_init(elem_type string) flat.NodeId
fn (Transformer) make_assign #
fn (mut t Transformer) make_assign(lhs flat.NodeId, rhs flat.NodeId) flat.NodeId
fn (Transformer) make_assign_op #
fn (mut t Transformer) make_assign_op(lhs flat.NodeId, rhs flat.NodeId, op flat.Op) flat.NodeId
fn (Transformer) make_block #
fn (mut t Transformer) make_block(stmts []flat.NodeId) flat.NodeId
fn (Transformer) make_bool_literal #
fn (mut t Transformer) make_bool_literal(value bool) flat.NodeId
fn (Transformer) make_call #
fn (mut t Transformer) make_call(fn_name string, args []flat.NodeId) flat.NodeId
fn (Transformer) make_call_typed #
fn (mut t Transformer) make_call_typed(fn_name string, args []flat.NodeId, typ string) flat.NodeId
fn (Transformer) make_cast #
fn (mut t Transformer) make_cast(target_type string, expr flat.NodeId, typ string) flat.NodeId
fn (Transformer) make_decl_assign #
fn (mut t Transformer) make_decl_assign(name string, rhs flat.NodeId) flat.NodeId
fn (Transformer) make_empty #
fn (mut t Transformer) make_empty() flat.NodeId
fn (Transformer) make_expr_stmt #
fn (mut t Transformer) make_expr_stmt(expr flat.NodeId) flat.NodeId
fn (Transformer) make_float_literal #
fn (mut t Transformer) make_float_literal(value string) flat.NodeId
fn (Transformer) make_ident #
fn (mut t Transformer) make_ident(name string) flat.NodeId
fn (Transformer) make_if #
fn (mut t Transformer) make_if(cond flat.NodeId, then_block flat.NodeId, else_block flat.NodeId) flat.NodeId
fn (Transformer) make_index #
fn (mut t Transformer) make_index(base flat.NodeId, index flat.NodeId, typ string) flat.NodeId
fn (Transformer) make_infix #
fn (mut t Transformer) make_infix(op flat.Op, lhs flat.NodeId, rhs flat.NodeId) flat.NodeId
fn (Transformer) make_int_literal #
fn (mut t Transformer) make_int_literal(value int) flat.NodeId
fn (Transformer) make_map_init #
fn (mut t Transformer) make_map_init(map_type string) flat.NodeId
fn (Transformer) make_method_call #
fn (mut t Transformer) make_method_call(receiver flat.NodeId, method_name string, args []flat.NodeId) flat.NodeId
fn (Transformer) make_paren #
fn (mut t Transformer) make_paren(expr flat.NodeId) flat.NodeId
fn (Transformer) make_postfix #
fn (mut t Transformer) make_postfix(expr flat.NodeId, op flat.Op) flat.NodeId
fn (Transformer) make_prefix #
fn (mut t Transformer) make_prefix(op flat.Op, expr flat.NodeId) flat.NodeId
fn (Transformer) make_selector #
fn (mut t Transformer) make_selector(base flat.NodeId, field string, typ string) flat.NodeId
fn (Transformer) make_selector_op #
fn (mut t Transformer) make_selector_op(base flat.NodeId, field string, typ string, op flat.Op) flat.NodeId
fn (Transformer) make_sizeof_type #
fn (mut t Transformer) make_sizeof_type(type_name string) flat.NodeId
fn (Transformer) make_string_literal #
fn (mut t Transformer) make_string_literal(value string) flat.NodeId
fn (Transformer) make_struct_init #
fn (mut t Transformer) make_struct_init(name string) flat.NodeId
fn (Transformer) new_temp #
fn (mut t Transformer) new_temp(prefix string) string
--- helper methods ---
fn (Transformer) pop_smartcast #
fn (mut t Transformer) pop_smartcast()
fn (Transformer) push_smartcast #
fn (mut t Transformer) push_smartcast(expr_name string, variant string, sum_type string)
fn (Transformer) transform_expr #
fn (mut t Transformer) transform_expr(id flat.NodeId) flat.NodeId
fn (Transformer) transform_lvalue #
fn (mut t Transformer) transform_lvalue(id flat.NodeId) flat.NodeId
fn (Transformer) transform_stmt #
fn (mut t Transformer) transform_stmt(id flat.NodeId) []flat.NodeId
fn (Transformer) transform_stmts #
fn (mut t Transformer) transform_stmts(ids []flat.NodeId) []flat.NodeId
--- statement list driver ---
- fn transform
- struct FieldInfo
- struct SmartcastContext
- struct StructInfo
- struct Transformer
- fn drain_pending
- fn find_smartcast
- fn get_global_type
- fn get_struct_info
- fn is_sum_variant
- fn make_array_init
- fn make_assign
- fn make_assign_op
- fn make_block
- fn make_bool_literal
- fn make_call
- fn make_call_typed
- fn make_cast
- fn make_decl_assign
- fn make_empty
- fn make_expr_stmt
- fn make_float_literal
- fn make_ident
- fn make_if
- fn make_index
- fn make_infix
- fn make_int_literal
- fn make_map_init
- fn make_method_call
- fn make_paren
- fn make_postfix
- fn make_prefix
- fn make_selector
- fn make_selector_op
- fn make_sizeof_type
- fn make_string_literal
- fn make_struct_init
- fn new_temp
- fn pop_smartcast
- fn push_smartcast
- fn transform_expr
- fn transform_lvalue
- fn transform_stmt
- fn transform_stmts