api refactoring
[m6w6/ext-psi] / src / types / let_stmt.h
diff --git a/src/types/let_stmt.h b/src/types/let_stmt.h
new file mode 100644 (file)
index 0000000..8415e49
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef _PSI_TYPES_LET_STMT_H
+#define _PSI_TYPES_LET_STMT_H
+
+typedef struct let_stmt {
+       decl_var *var;
+       let_val *val;
+} let_stmt;
+
+static inline let_stmt *init_let_stmt(decl_var *var, let_val *val) {
+       let_stmt *let = calloc(1, sizeof(*let));
+       let->var = var;
+       let->val = val;
+       return let;
+}
+
+static inline void free_let_stmt(let_stmt *stmt) {
+       if (stmt->val) {
+               if (stmt->val->kind == PSI_LET_TMP && stmt->var->arg) {
+                       free_decl_arg(stmt->var->arg);
+               }
+               free_let_val(stmt->val);
+       }
+       free_decl_var(stmt->var);
+       free(stmt);
+}
+
+#endif