about summary refs log tree commit diff
path: root/boot/lower.c
diff options
context:
space:
mode:
Diffstat (limited to 'boot/lower.c')
-rw-r--r--boot/lower.c57
1 files changed, 9 insertions, 48 deletions
diff --git a/boot/lower.c b/boot/lower.c
index f3c04d3..fb2d29a 100644
--- a/boot/lower.c
+++ b/boot/lower.c
@@ -308,10 +308,7 @@ lower_synthesize_structural(struct Lower_Context* ctx, struct Tree_Type* tree_ty
         type->value.structure.fields = array_new(struct Field, 4);
 
         struct Type_Ref inner = lower_intern_type_ref(ctx, tree_type->value.array.element_type);
-        struct Type_Ref data_ref = {
-            .type_id = inner.type_id,
-            .mods = array_new(enum Type_Modifier, 4),
-        };
+        struct Type_Ref data_ref = type_ref_bare(inner.type_id);
         FOR_EACH_ARRAY (enum Type_Modifier, m, &inner.mods) array_push(&data_ref.mods, m);
         enum Type_Modifier ptr = TYPE_MOD_REFERENCE;
         array_push(&data_ref.mods, &ptr);
@@ -403,10 +400,7 @@ lower_synthesize_structural(struct Lower_Context* ctx, struct Tree_Type* tree_ty
 struct Type_Ref
 lower_intern_type_ref(struct Lower_Context* ctx, struct Tree_Type* tree_type)
 {
-    struct Type_Ref ref = {
-        .type_id = ctx->unit->types.primitive_void_id,
-        .mods = array_new(enum Type_Modifier, 4),
-    };
+    struct Type_Ref ref = type_ref_bare(ctx->unit->types.primitive_void_id);
 
     if (!tree_type || tree_type->type == TREE_TYPE_NONE) return ref;
 
@@ -726,38 +720,6 @@ lower_pass_1(struct Lower_Context* ctx, struct Tree* tree)
 struct Block* lower_block(struct Lower_Context* ctx, struct Tree_Block* tree_block);
 struct Statement* lower_statement(struct Lower_Context* ctx, struct Tree_Statement* tree_stmt);
 
-// small helpers used when synthesizing nodes when de-sugaring source.
-
-struct Expression*
-lower_make_name_expression(struct String name, struct Span span)
-{
-    union Expression_Value v = { 0 };
-    v.name.name = name;
-
-    return expression_new(EXPRESSION_NAME, v, span);
-}
-
-struct Expression*
-lower_make_integer_literal_expression(int64 value, struct Span span)
-{
-    union Expression_Value v = { 0 };
-    v.integer_literal.value = value;
-
-    return expression_new(EXPRESSION_INTEGER_LITERAL, v, span);
-}
-
-struct Expression*
-lower_make_binary_expression(
-    enum Binary_Operation op, struct Expression* left, struct Expression* right, struct Span span)
-{
-    union Expression_Value v = { 0 };
-    v.binary_operator.operation = op;
-    v.binary_operator.left_operand = left;
-    v.binary_operator.right_operand = right;
-
-    return expression_new(EXPRESSION_BINARY_OPERATION, v, span);
-}
-
 // turns a source expression into the lowered form.
 struct Expression*
 lower_expression(struct Lower_Context* ctx, struct Tree_Expression* tree_expr)
@@ -911,7 +873,7 @@ lower_expression(struct Lower_Context* ctx, struct Tree_Expression* tree_expr)
         fn->synthetic = true;
         lower_fill_function_signature(ctx, fn, tree_expr);
 
-        return lower_make_name_expression(name, tree_expr->span);
+        return ir_make_name(name, tree_expr->span);
     }
     case TREE_EXPRESSION_SUBSCRIPT:
     case TREE_EXPRESSION_MEMBER:
@@ -1219,21 +1181,20 @@ lower_statement(struct Lower_Context* ctx, struct Tree_Statement* tree_stmt)
             // we synthesize the right condition and step.
             if (loop->style == TREE_STATEMENT_LOOP_STYLE_FOR_EACH) {
                 struct Tree_Expression* hi = decl->initializer->value.binary_operator.right_operand;
-                struct Expression* lhs = lower_make_name_expression(name, tree_stmt->span);
+                struct Expression* lhs = ir_make_name(name, tree_stmt->span);
                 struct Expression* rhs = lower_expression(ctx, hi);
                 synth_cond = nil; // unused; we go straight to the ir form
                 (void)synth_cond;
 
                 struct Expression* cond_expr =
-                    lower_make_binary_expression(BINARY_LESS_THAN, lhs, rhs, tree_stmt->span);
+                    ir_make_binary(BINARY_LESS_THAN, lhs, rhs, tree_stmt->span);
 
                 // step: x = x + 1
-                struct Expression* iter_lhs = lower_make_name_expression(name, tree_stmt->span);
-                struct Expression* iter_rhs_left =
-                    lower_make_name_expression(name, tree_stmt->span);
-                struct Expression* one = lower_make_integer_literal_expression(1, tree_stmt->span);
+                struct Expression* iter_lhs = ir_make_name(name, tree_stmt->span);
+                struct Expression* iter_rhs_left = ir_make_name(name, tree_stmt->span);
+                struct Expression* one = ir_make_integer(1, tree_stmt->span);
                 struct Expression* iter_rhs =
-                    lower_make_binary_expression(BINARY_PLUS, iter_rhs_left, one, tree_stmt->span);
+                    ir_make_binary(BINARY_PLUS, iter_rhs_left, one, tree_stmt->span);
                 union Statement_Value iter_v = { 0 };
                 iter_v.assign.lhs = iter_lhs;
                 iter_v.assign.rhs = iter_rhs;