txlyre před 1 rokem
rodič
revize
d99968dacd
3 změnil soubory, kde provedl 11 přidání a 2 odebrání
  1. 0 0
      langs/wm/wclib/time.wc
  2. 2 2
      langs/wm/wm.c
  3. 9 0
      langs/wm/wmc.py

+ 0 - 0
langs/wm/wclib/time.wc


+ 2 - 2
langs/wm/wm.c

@@ -57,7 +57,7 @@ V pu(L v){if(sp>=0&&sp>=SZ)e("stack overflow (size = %d).",SZ);if(sp<0)sp=0;m[MZ
 L po(){if(sp<0)e("stack underflow.");R m[MZ+--sp];}
 L riD(D d){L l;memcpy(&l,&d,SIZ(l));R l;}
 D riL(L l){D d;memcpy(&d,&l,SIZ(d));R d;}
-L eX(I k){exit(k);R -1;}L ouD(L a){D d=riL(a);printf("%g",d);R a;}
+L eX(I k){if(DD)d();exit(k);R -1;}L ouD(L a){D d=riL(a);printf("%g",d);R a;}
 D dvD(D a,D b){if(b==0)e("division by zero.");R a/b;}
 D mdD(D a,D b){if(b==0)e("modulo by zero.");R fmod(a,b);}
 V cP(L v){L d=r(v);L a,b,c;
@@ -114,4 +114,4 @@ main(I c,S*as){I o;S f=0;
        CS('z',SZ=strtol(optarg,0,10);if(SZ<=0){fputs("bad -z.\n",stderr);Rk;});
        CS('?',exit(K););}}
  I i;for(i=optind;i<c;i++)f=as[i];EZ=MZ;MZ+=SZ;MZ+=JZ;
- m=a(SIZ(L)*MZ);if(!f)l("<stdin>",stdin);else{FILE*fd=fopen(f,"rb");l(f,fd);fclose(fd);}rn();if(DD){d();}free(m);for(i=0;i<mi;i++)if(mm[i])free(mm[i]);}
+ m=a(SIZ(L)*MZ);if(!f)l("<stdin>",stdin);else{FILE*fd=fopen(f,"rb");l(f,fd);fclose(fd);}rn();if(DD)d();free(m);for(i=0;i<mi;i++)if(mm[i])free(mm[i]);}

+ 9 - 0
langs/wm/wmc.py

@@ -71,6 +71,7 @@ args:
      | op1 "?" op1 ":" expr -> ifexpr
 ?op1: op2
     | vardec
+    | arrdec
     | op1 "==" op1 -> equals
     | op1 "!=" op1 -> not_equals
     | op1 "+" op2 -> plus
@@ -778,6 +779,14 @@ class WMC:
       buffer.emit(
         self.compile_funcall(node, dest='Y')
       )
+    elif node.data == "vardec":
+      buffer.emit(
+        self.compile_op(node)
+      )
+    elif node.data == "arrdec":
+      buffer.emit(
+        self.compile_arrdec(node)
+      )
     else:
       raise Exception(f"Not implemented: {node}")