From a8d572933d3a29e73bbbe20bc49e1fe988e55cfa Mon Sep 17 00:00:00 2001 From: Shinya Sato Date: Thu, 26 Mar 2026 20:47:41 +0900 Subject: v0.13.4 --- src/builtin_OP-INT.inc.c | 140 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 src/builtin_OP-INT.inc.c (limited to 'src/builtin_OP-INT.inc.c') diff --git a/src/builtin_OP-INT.inc.c b/src/builtin_OP-INT.inc.c new file mode 100644 index 0000000..4c55728 --- /dev/null +++ b/src/builtin_OP-INT.inc.c @@ -0,0 +1,140 @@ + 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); + + // 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; + } + + } -- cgit v1.2.3