diff options
| author | mirenn <me@mirenn.dev> | 2026-03-13 16:25:39 +0100 |
|---|---|---|
| committer | mirenn <me@mirenn.dev> | 2026-04-14 09:47:36 +0200 |
| commit | 47d6cc352e11130646220381820555eac47ba088 (patch) | |
| tree | 81b8050d6d290abc20b46ae1056bd1d0c2100102 /src/builtin_OP-INT.inc.c | |
| parent | 6bb1a9b95b09663436c2fe30a8e2185a3f741af1 (diff) | |
| download | inpla-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.c | 257 |
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; +} +} |
