about summary refs log tree commit diff
path: root/src/instruction/delete.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/instruction/delete.c')
-rw-r--r--src/instruction/delete.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/instruction/delete.c b/src/instruction/delete.c
new file mode 100644
index 0000000..81e70f9
--- /dev/null
+++ b/src/instruction/delete.c
@@ -0,0 +1,32 @@
+#include "3cl.h"
+
+#include <stdio.h>
+
+#include "readchar.h"
+#include "stack.h"
+#include "utils.h"
+#include "variable.h"
+
+
+struct CCLFrame *ccl_instruction_assign(struct CCL *ccl, struct CCLFrame *frame)
+{
+    if (ccl->stack.cur < 1)
+        die(1, "stack size is %d (%d required)", ccl->stack.cur, 1);
+
+    CCLNum value = ccl_stack_pop(&ccl->stack);
+
+    char name = ccl_readchar(ccl, frame, CCL_RC_CCL_VARUS);
+    if (name == '\0')
+        die(1, "Unexpected EOF");
+
+    if (name == '_')
+        return frame;
+
+    struct CCLVariable *var = ccl_variable_getany(ccl, frame, name);
+    if (var == NULL)
+        ccl_variable_set(&ccl->rootframe.vars, name, value);
+    else
+        var->value = value;
+
+    return frame;
+}