blueloveTH 1 год назад
Родитель
Сommit
14a01c0e6d
1 измененных файлов с 53 добавлено и 53 удалено
  1. 53 53
      src/compiler/compiler.c

+ 53 - 53
src/compiler/compiler.c

@@ -6,7 +6,6 @@
 #include <ctype.h>
 
 /* expr.h */
-
 typedef struct Expr Expr;
 typedef struct Ctx Ctx;
 
@@ -39,21 +38,22 @@ typedef struct ExprVt {
     ((self)->vt->emit_inplace ? vtcall(emit_inplace, self, ctx) : vtemit_(self, ctx))
 #define vtemit_istore(self, ctx)                                                                   \
     ((self)->vt->emit_istore ? vtcall(emit_istore, self, ctx) : vtemit_store(self, ctx))
-
-#define COMMON_HEADER                                                                              \
+#define vtdelete(self)                                                                             \
+    do {                                                                                           \
+        if(self) {                                                                                 \
+            if((self)->vt->dtor) (self)->vt->dtor(self);                                           \
+            PoolExpr_dealloc(self);                                                                \
+        }                                                                                          \
+    } while(0)
+
+#define EXPR_COMMON_HEADER                                                                         \
     const ExprVt* vt;                                                                              \
     int line;
 
 typedef struct Expr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
 } Expr;
 
-static void Expr__delete(Expr* self) {
-    if(!self) return;
-    if(self->vt->dtor) self->vt->dtor(self);
-    PoolExpr_dealloc(self);
-}
-
 /* context.h */
 typedef struct Ctx {
     CodeObject* co;  // 1 CodeEmitContext <=> 1 CodeObject*
@@ -104,7 +104,7 @@ void Ctx__s_emit_decorators(Ctx*, int count);
 
 /* expr.c */
 typedef struct NameExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     StrName name;
     NameScope scope;
 } NameExpr;
@@ -167,7 +167,7 @@ NameExpr* NameExpr__new(StrName name, NameScope scope) {
 }
 
 typedef struct StarredExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     Expr* child;
     int level;
 } StarredExpr;
@@ -201,14 +201,14 @@ StarredExpr* StarredExpr__new(Expr* child, int level) {
 // InvertExpr, NotExpr, NegatedExpr
 // NOTE: NegatedExpr always contains a non-const child. Should not generate -1 or -0.1
 typedef struct UnaryExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     Expr* child;
     Opcode opcode;
 } UnaryExpr;
 
 void UnaryExpr__dtor(Expr* self_) {
     UnaryExpr* self = (UnaryExpr*)self_;
-    Expr__delete(self->child);
+    vtdelete(self->child);
 }
 
 static void UnaryExpr__emit_(Expr* self_, Ctx* ctx) {
@@ -230,7 +230,7 @@ UnaryExpr* UnaryExpr__new(Expr* child, Opcode opcode) {
 
 // LongExpr, BytesExpr
 typedef struct RawStringExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     c11_string value;
     Opcode opcode;
 } RawStringExpr;
@@ -254,7 +254,7 @@ RawStringExpr* RawStringExpr__new(c11_string value, Opcode opcode) {
 }
 
 typedef struct ImagExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     double value;
 } ImagExpr;
 
@@ -278,7 +278,7 @@ ImagExpr* ImagExpr__new(double value) {
 }
 
 typedef struct LiteralExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     const TokenValue* value;
 } LiteralExpr;
 
@@ -320,7 +320,7 @@ LiteralExpr* LiteralExpr__new(const TokenValue* value) {
 }
 
 typedef struct SliceExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     Expr* start;
     Expr* stop;
     Expr* step;
@@ -328,9 +328,9 @@ typedef struct SliceExpr {
 
 void SliceExpr__dtor(Expr* self_) {
     SliceExpr* self = (SliceExpr*)self_;
-    Expr__delete(self->start);
-    Expr__delete(self->stop);
-    Expr__delete(self->step);
+    vtdelete(self->start);
+    vtdelete(self->stop);
+    vtdelete(self->step);
 }
 
 void SliceExpr__emit_(Expr* self_, Ctx* ctx) {
@@ -364,7 +364,7 @@ SliceExpr* SliceExpr__new() {
 
 // ListExpr, DictExpr, SetExpr, TupleExpr
 typedef struct SequenceExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     c11_array /*T=Expr* */ items;
     Opcode opcode;
 } SequenceExpr;
@@ -380,7 +380,7 @@ static void SequenceExpr__emit_(Expr* self_, Ctx* ctx) {
 
 void SequenceExpr__dtor(Expr* self_) {
     SequenceExpr* self = (SequenceExpr*)self_;
-    c11__foreach(Expr*, &self->items, e) Expr__delete(*e);
+    c11__foreach(Expr*, &self->items, e) vtdelete(*e);
     c11_array__dtor(&self->items);
 }
 
@@ -483,7 +483,7 @@ SequenceExpr* TupleExpr__new(int count) {
 }
 
 typedef struct CompExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     Expr* expr;  // loop expr
     Expr* vars;  // loop vars
     Expr* iter;  // loop iter
@@ -495,10 +495,10 @@ typedef struct CompExpr {
 
 void CompExpr__dtor(Expr* self_) {
     CompExpr* self = (CompExpr*)self_;
-    Expr__delete(self->expr);
-    Expr__delete(self->vars);
-    Expr__delete(self->iter);
-    Expr__delete(self->cond);
+    vtdelete(self->expr);
+    vtdelete(self->vars);
+    vtdelete(self->iter);
+    vtdelete(self->cond);
 }
 
 void CompExpr__emit_(Expr* self_, Ctx* ctx) {
@@ -543,7 +543,7 @@ CompExpr* CompExpr__new(Opcode op0, Opcode op1) {
 }
 
 typedef struct LambdaExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     int index;
 } LambdaExpr;
 
@@ -563,7 +563,7 @@ LambdaExpr* LambdaExpr__new(int index) {
 }
 
 typedef struct FStringExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     c11_string src;
 } FStringExpr;
 
@@ -744,7 +744,7 @@ FStringExpr* FStringExpr__new(c11_string src) {
 
 // AndExpr, OrExpr
 typedef struct LogicBinaryExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     Expr* lhs;
     Expr* rhs;
     Opcode opcode;
@@ -752,8 +752,8 @@ typedef struct LogicBinaryExpr {
 
 void LogicBinaryExpr__dtor(Expr* self_) {
     LogicBinaryExpr* self = (LogicBinaryExpr*)self_;
-    Expr__delete(self->lhs);
-    Expr__delete(self->rhs);
+    vtdelete(self->lhs);
+    vtdelete(self->rhs);
 }
 
 void LogicBinaryExpr__emit_(Expr* self_, Ctx* ctx) {
@@ -777,13 +777,13 @@ LogicBinaryExpr* LogicBinaryExpr__new(Expr* lhs, Expr* rhs, Opcode opcode) {
 }
 
 typedef struct GroupedExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     Expr* child;
 } GroupedExpr;
 
 void GroupedExpr__dtor(Expr* self_) {
     GroupedExpr* self = (GroupedExpr*)self_;
-    Expr__delete(self->child);
+    vtdelete(self->child);
 }
 
 void GroupedExpr__emit_(Expr* self_, Ctx* ctx) {
@@ -815,7 +815,7 @@ GroupedExpr* GroupedExpr__new(Expr* child) {
 }
 
 typedef struct BinaryExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     Expr* lhs;
     Expr* rhs;
     TokenIndex op;
@@ -824,8 +824,8 @@ typedef struct BinaryExpr {
 
 static void BinaryExpr__dtor(Expr* self_) {
     BinaryExpr* self = (BinaryExpr*)self_;
-    Expr__delete(self->lhs);
-    Expr__delete(self->rhs);
+    vtdelete(self->lhs);
+    vtdelete(self->rhs);
 }
 
 static Opcode cmp_token2op(TokenIndex token) {
@@ -915,7 +915,7 @@ static void BinaryExpr__emit_(Expr* self_, Ctx* ctx) {
 }
 
 typedef struct TernaryExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     Expr* cond;
     Expr* true_expr;
     Expr* false_expr;
@@ -923,9 +923,9 @@ typedef struct TernaryExpr {
 
 void TernaryExpr__dtor(Expr* self_) {
     TernaryExpr* self = (TernaryExpr*)self_;
-    Expr__delete(self->cond);
-    Expr__delete(self->true_expr);
-    Expr__delete(self->false_expr);
+    vtdelete(self->cond);
+    vtdelete(self->true_expr);
+    vtdelete(self->false_expr);
 }
 
 void TernaryExpr__emit_(Expr* self_, Ctx* ctx) {
@@ -952,15 +952,15 @@ TernaryExpr* TernaryExpr__new() {
 }
 
 typedef struct SubscrExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     Expr* lhs;
     Expr* rhs;
 } SubscrExpr;
 
 void SubscrExpr__dtor(Expr* self_) {
     SubscrExpr* self = (SubscrExpr*)self_;
-    Expr__delete(self->lhs);
-    Expr__delete(self->rhs);
+    vtdelete(self->lhs);
+    vtdelete(self->rhs);
 }
 
 void SubscrExpr__emit_(Expr* self_, Ctx* ctx) {
@@ -1034,7 +1034,7 @@ SubscrExpr* SubscrExpr__new(Expr* lhs, Expr* rhs) {
 }
 
 typedef struct AttribExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     Expr* child;
     StrName name;
 } AttribExpr;
@@ -1096,7 +1096,7 @@ typedef struct CallExprKwArg {
 } CallExprKwArg;
 
 typedef struct CallExpr {
-    COMMON_HEADER
+    EXPR_COMMON_HEADER
     Expr* callable;
     c11_vector /*T=Expr* */ args;
     // **a will be interpreted as a special keyword argument: {"**": a}
@@ -1105,9 +1105,9 @@ typedef struct CallExpr {
 
 void CallExpr__dtor(Expr* self_) {
     CallExpr* self = (CallExpr*)self_;
-    Expr__delete(self->callable);
-    c11__foreach(Expr*, &self->args, e) Expr__delete(*e);
-    c11__foreach(CallExprKwArg, &self->kwargs, e) Expr__delete(e->val);
+    vtdelete(self->callable);
+    c11__foreach(Expr*, &self->args, e) vtdelete(*e);
+    c11__foreach(CallExprKwArg, &self->kwargs, e) vtdelete(e->val);
     c11_vector__dtor(&self->args);
     c11_vector__dtor(&self->kwargs);
 }
@@ -1207,7 +1207,7 @@ void Ctx__s_emit_top(Ctx* self) {
     Expr* top = c11_vector__back(Expr*, &self->s_expr);
     top->vt->emit_(top, self);
     c11_vector__pop(&self->s_expr);
-    Expr__delete(top);
+    vtdelete(top);
 }
 
 // push
@@ -1221,7 +1221,7 @@ int Ctx__s_size(Ctx* self) { return self->s_expr.count; }
 
 // pop -> delete
 void Ctx__s_pop(Ctx* self) {
-    Expr__delete(c11_vector__back(Expr*, &self->s_expr));
+    vtdelete(c11_vector__back(Expr*, &self->s_expr));
     c11_vector__pop(&self->s_expr);
 }
 
@@ -1236,7 +1236,7 @@ Expr* Ctx__s_popx(Ctx* self) {
 void Ctx__s_clean(Ctx* self) {
     c11_smallmap_s2n__dtor(&self->co_consts_string_dedup_map);  // ??
     for(int i = 0; i < self->s_expr.count; i++) {
-        Expr__delete(c11__getitem(Expr*, &self->s_expr, i));
+        vtdelete(c11__getitem(Expr*, &self->s_expr, i));
     }
     c11_vector__clear(&self->s_expr);
 }