diff options
| author | Mel <mel@rnrd.eu> | 2026-05-24 20:14:29 +0200 |
|---|---|---|
| committer | Mel <mel@rnrd.eu> | 2026-05-24 20:14:29 +0200 |
| commit | 2a893246711442dd8407264c05991b44d1d1f66f (patch) | |
| tree | a0d4a621994ebb259331b7082a977e4ae2861bde /boot/ir.c | |
| parent | f028bc7ef3101facfa004c21f3aa5feb3dc6f107 (diff) | |
| download | catskill-2a893246711442dd8407264c05991b44d1d1f66f.tar.zst catskill-2a893246711442dd8407264c05991b44d1d1f66f.zip | |
Emit IR/C increment/decrement in expression position
Signed-off-by: Mel <mel@rnrd.eu>
Diffstat (limited to 'boot/ir.c')
| -rw-r--r-- | boot/ir.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/boot/ir.c b/boot/ir.c index d8d8aa2..16811ed 100644 --- a/boot/ir.c +++ b/boot/ir.c @@ -248,6 +248,7 @@ enum Expression_Kind EXPRESSION_SUBSCRIPT, EXPRESSION_CAST, EXPRESSION_CONSTRUCT, + EXPRESSION_INCREMENT_DECREMENT, }; struct Expression_Integer_Literal @@ -343,6 +344,13 @@ struct Expression_Construct Array(struct Construct_Field) fields; }; +struct Expression_Increment_Decrement +{ + bool prefix; + enum Increment_Decrement_Operation operation; + struct Expression* subject; +}; + union Expression_Value { struct Expression_Integer_Literal integer_literal; @@ -358,6 +366,7 @@ union Expression_Value struct Expression_Subscript subscript; struct Expression_Cast cast; struct Expression_Construct construct; + struct Expression_Increment_Decrement increment_decrement; }; struct Expression @@ -682,6 +691,18 @@ ir_make_construct(Type_Id type_id, Array(struct Construct_Field) fields, struct return expression_new(EXPRESSION_CONSTRUCT, v, span); } +struct Expression* +ir_make_increment_decrement( + struct Expression* subject, enum Increment_Decrement_Operation op, bool prefix, + struct Span span) +{ + union Expression_Value v = { 0 }; + v.increment_decrement.subject = subject; + v.increment_decrement.operation = op; + v.increment_decrement.prefix = prefix; + return expression_new(EXPRESSION_INCREMENT_DECREMENT, v, span); +} + struct Type_Ref type_ref_bare(Type_Id type_id) { |
