shithub: MicroHs

Download patch

ref: d8a6814c988e23f76256e0a6f947c94c1358b0a1
parent: 32f5edb5bb03a2a9915983f79072beb9f485b314
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sun Feb 25 07:53:50 EST 2024

Use combEVAL

--- a/src/runtime/eval.c
+++ b/src/runtime/eval.c
@@ -524,6 +524,7 @@
 NODEPTR combFalse, combTrue, combUnit, combCons, combPair;
 NODEPTR combCC, combZ, combIOBIND, combIORETURN, combIOCCBIND;
 NODEPTR combLT, combEQ, combGT;
+NODEPTR combEVAL1, combEVAL2;
 
 /* One node of each kind for primitives, these are never GCd. */
 /* We use linear search in this, because almost all lookups
@@ -682,6 +683,8 @@
     case T_IO_BIND: combIOBIND = n; break;
     case T_IO_RETURN: combIORETURN = n; break;
     case T_IO_CCBIND: combIOCCBIND = n; break;
+    case T_EVAL1: combEVAL1 = n; break;
+    case T_EVAL2: combEVAL2 = n; break;
 #if WANT_STDIO
     case T_IO_STDIN:  SETTAG(n, T_PTR); PTR(n) = stdin;  break;
     case T_IO_STDOUT: SETTAG(n, T_PTR); PTR(n) = stdout; break;
@@ -706,6 +709,8 @@
     case T_IO_BIND: combIOBIND = n; break;
     case T_IO_RETURN: combIORETURN = n; break;
     case T_IO_CCBIND: combIOCCBIND = n; break;
+    case T_EVAL1: combEVAL1 = n; break;
+    case T_EVAL2: combEVAL2 = n; break;
 #if WANT_STDIO
     case T_IO_STDIN:  SETTAG(n, T_PTR); PTR(n) = stdin;  break;
     case T_IO_STDOUT: SETTAG(n, T_PTR); PTR(n) = stdout; break;
@@ -2345,7 +2350,7 @@
     case T_ADD:
     case T_SUB:
       n = ARG(TOP(1));
-      PUSH(cells + T_EVAL2);
+      PUSH(combEVAL2);
       break;
     case T_MUL:  ARITHBINU(*);
     case T_QUOT: ARITHBIN(/);
@@ -2583,7 +2588,7 @@
     
     if (tag == T_EVAL2) {
       n = ARG(TOP(1));
-      TOP(0) = cells + T_EVAL1;
+      TOP(0) = combEVAL1;
       goto top;
     } else if (tag == T_EVAL1) {
       /* First argument */
--