aboutsummaryrefslogtreecommitdiff
path: root/src/builtin_OP-INT.inc.c
diff options
context:
space:
mode:
authormirenn <me@mirenn.dev>2026-03-13 16:25:39 +0100
committermirenn <me@mirenn.dev>2026-04-14 09:47:36 +0200
commit47d6cc352e11130646220381820555eac47ba088 (patch)
tree81b8050d6d290abc20b46ae1056bd1d0c2100102 /src/builtin_OP-INT.inc.c
parent6bb1a9b95b09663436c2fe30a8e2185a3f741af1 (diff)
downloadinpla-main.tar.gz
inpla-main.zip
added flag to suppress unimportat outputmain
Diffstat (limited to 'src/builtin_OP-INT.inc.c')
-rw-r--r--src/builtin_OP-INT.inc.c257
1 files changed, 122 insertions, 135 deletions
diff --git a/src/builtin_OP-INT.inc.c b/src/builtin_OP-INT.inc.c
index 4c55728..0bced59 100644
--- a/src/builtin_OP-INT.inc.c
+++ b/src/builtin_OP-INT.inc.c
@@ -1,140 +1,127 @@
- switch (BASIC(a1)->id) {
- case ID_ADD:
- {
- COUNTUP_INTERACTION(vm);
-
- BASIC(a1)->id = ID_ADD2;
- VALUE a1port1 = AGENT(a1)->port[1];
- AGENT(a1)->port[1] = a2;
- a2 = a1port1;
- goto loop;
- }
- case ID_ADD2:
- {
- COUNTUP_INTERACTION(vm);
-
- // r << Add(m,n)
- long n = FIX2INT(AGENT(a1)->port[1]);
- long m = FIX2INT(a2);
- a2 = INT2FIX(m+n);
- VALUE a1port0 = AGENT(a1)->port[0];
- free_Agent(a1);
- a1 = a1port0;
- goto loop;
- }
- case ID_SUB:
- {
- COUNTUP_INTERACTION(vm);
-
- BASIC(a1)->id = ID_SUB2;
- VALUE a1port1 = AGENT(a1)->port[1];
- AGENT(a1)->port[1] = a2;
- a2 = a1port1;
- goto loop;
- }
- case ID_SUB2:
- {
- COUNTUP_INTERACTION(vm);
-
- // r << Sub(m,n)
- long n = FIX2INT(AGENT(a1)->port[1]);
- long m = FIX2INT(a2);
- a2 = INT2FIX(m-n);
- VALUE a1port0 = AGENT(a1)->port[0];
- free_Agent(a1);
- a1 = a1port0;
- goto loop;
- }
- case ID_MUL:
- {
- COUNTUP_INTERACTION(vm);
-
- BASIC(a1)->id = ID_MUL2;
- VALUE a1port1 = AGENT(a1)->port[1];
- AGENT(a1)->port[1] = a2;
- a2 = a1port1;
- goto loop;
- }
- case ID_MUL2:
- {
- COUNTUP_INTERACTION(vm);
-
- // r << Mult(m,n)
- long n = FIX2INT(AGENT(a1)->port[1]);
- long m = FIX2INT(a2);
- a2 = INT2FIX(m*n);
- VALUE a1port0 = AGENT(a1)->port[0];
- free_Agent(a1);
- a1 = a1port0;
- goto loop;
- }
- case ID_DIV:
- {
- COUNTUP_INTERACTION(vm);
-
- BASIC(a1)->id = ID_DIV2;
- VALUE a1port1 = AGENT(a1)->port[1];
- AGENT(a1)->port[1] = a2;
- a2 = a1port1;
- goto loop;
- }
- case ID_DIV2:
- {
- COUNTUP_INTERACTION(vm);
-
- // r << DIV(m,n)
- long n = FIX2INT(AGENT(a1)->port[1]);
- long m = FIX2INT(a2);
- a2 = INT2FIX(m/n);
- VALUE a1port0 = AGENT(a1)->port[0];
- free_Agent(a1);
- a1 = a1port0;
- goto loop;
- }
- case ID_MOD:
- {
- COUNTUP_INTERACTION(vm);
-
- BASIC(a1)->id = ID_MOD2;
- VALUE a1port1 = AGENT(a1)->port[1];
- AGENT(a1)->port[1] = a2;
- a2 = a1port1;
- goto loop;
- }
- case ID_MOD2:
- {
- COUNTUP_INTERACTION(vm);
-
- // r << MOD(m,n)
- long n = FIX2INT(AGENT(a1)->port[1]);
- long m = FIX2INT(a2);
- a2 = INT2FIX(m%n);
- VALUE a1port0 = AGENT(a1)->port[0];
- free_Agent(a1);
- a1 = a1port0;
- goto loop;
- }
- case ID_ERASER:
- {
- COUNTUP_INTERACTION(vm);
+switch (BASIC(a1)->id) {
+case ID_ADD: {
+ COUNTUP_INTERACTION(vm);
- // Eps ~ (int n)
- free_Agent(a1);
- return;
- }
+ BASIC(a1)->id = ID_ADD2;
+ VALUE a1port1 = AGENT(a1)->port[1];
+ AGENT(a1)->port[1] = a2;
+ a2 = a1port1;
+ goto loop;
+}
+case ID_ADD2: {
+ COUNTUP_INTERACTION(vm);
- case ID_DUP:
- {
- COUNTUP_INTERACTION(vm);
+ // r << Add(m,n)
+ double n = FIX2FLOAT(AGENT(a1)->port[1]);
+ double m = FIX2FLOAT(a2);
+ a2 = FLOAT2FIX(m + n);
+ VALUE a1port0 = AGENT(a1)->port[0];
+ free_Agent(a1);
+ a1 = a1port0;
+ goto loop;
+}
+case ID_SUB: {
+ COUNTUP_INTERACTION(vm);
- // Dup(x,y) ~ (int n) --> x~n, y~n;
- VALUE a1port = AGENT(a1)->port[0];
- PUSH(vm, a1port, a2);
+ BASIC(a1)->id = ID_SUB2;
+ VALUE a1port1 = AGENT(a1)->port[1];
+ AGENT(a1)->port[1] = a2;
+ a2 = a1port1;
+ goto loop;
+}
+case ID_SUB2: {
+ COUNTUP_INTERACTION(vm);
- a1port = AGENT(a1)->port[1];
- free_Agent(a1);
- a1 = a1port;
- goto loop;
- }
+ // r << Sub(m,n)
+ double n = FIX2FLOAT(AGENT(a1)->port[1]);
+ double m = FIX2FLOAT(a2);
+ a2 = FLOAT2FIX(m - n);
+ VALUE a1port0 = AGENT(a1)->port[0];
+ free_Agent(a1);
+ a1 = a1port0;
+ goto loop;
+}
+case ID_MUL: {
+ COUNTUP_INTERACTION(vm);
- }
+ BASIC(a1)->id = ID_MUL2;
+ VALUE a1port1 = AGENT(a1)->port[1];
+ AGENT(a1)->port[1] = a2;
+ a2 = a1port1;
+ goto loop;
+}
+case ID_MUL2: {
+ COUNTUP_INTERACTION(vm);
+
+ // r << Mult(m,n)
+ double n = FIX2FLOAT(AGENT(a1)->port[1]);
+ double m = FIX2FLOAT(a2);
+ a2 = FLOAT2FIX(m * n);
+ VALUE a1port0 = AGENT(a1)->port[0];
+ free_Agent(a1);
+ a1 = a1port0;
+ goto loop;
+}
+case ID_DIV: {
+ COUNTUP_INTERACTION(vm);
+
+ BASIC(a1)->id = ID_DIV2;
+ VALUE a1port1 = AGENT(a1)->port[1];
+ AGENT(a1)->port[1] = a2;
+ a2 = a1port1;
+ goto loop;
+}
+case ID_DIV2: {
+ COUNTUP_INTERACTION(vm);
+
+ // r << DIV(m,n)
+ double n = FIX2FLOAT(AGENT(a1)->port[1]);
+ double m = FIX2FLOAT(a2);
+ a2 = FLOAT2FIX(m / n);
+ VALUE a1port0 = AGENT(a1)->port[0];
+ free_Agent(a1);
+ a1 = a1port0;
+ goto loop;
+}
+case ID_MOD: {
+ COUNTUP_INTERACTION(vm);
+
+ BASIC(a1)->id = ID_MOD2;
+ VALUE a1port1 = AGENT(a1)->port[1];
+ AGENT(a1)->port[1] = a2;
+ a2 = a1port1;
+ goto loop;
+}
+case ID_MOD2: {
+ COUNTUP_INTERACTION(vm);
+
+ // r << MOD(m,n)
+ double n = FIX2FLOAT(AGENT(a1)->port[1]);
+ double m = FIX2FLOAT(a2);
+ a2 = FLOAT2FIX(fmod(m, n));
+ VALUE a1port0 = AGENT(a1)->port[0];
+ free_Agent(a1);
+ a1 = a1port0;
+ goto loop;
+}
+case ID_ERASER: {
+ COUNTUP_INTERACTION(vm);
+
+ // Eps ~ (int n)
+ free_Agent(a1);
+ return;
+}
+
+case ID_DUP: {
+ COUNTUP_INTERACTION(vm);
+
+ // Dup(x,y) ~ (int n) --> x~n, y~n;
+ VALUE a1port = AGENT(a1)->port[0];
+ PUSH(vm, a1port, a2);
+
+ a1port = AGENT(a1)->port[1];
+ free_Agent(a1);
+ a1 = a1port;
+ goto loop;
+}
+}