summary refs log tree commit diff
path: root/src/instruction/delete.c
diff options
context:
space:
mode:
authorNakidai <nakidai@disroot.org>2025-03-23 20:56:47 +0300
committerNakidai <nakidai@disroot.org>2025-03-23 20:56:47 +0300
commit159666bae6cc185a5abac154b85c49406f32f30c (patch)
treea5f424eb11e83dd1831b824229e359583bcc9f5d /src/instruction/delete.c
parentc74aea420c662039072f606b2d5ef1c73426e481 (diff)
download3cl-159666bae6cc185a5abac154b85c49406f32f30c.tar.gz
3cl-159666bae6cc185a5abac154b85c49406f32f30c.zip
Last time I was here 8 months ago, idk what is this
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;
+}