shithub: mc

Download patch

ref: 4cbf921e4eb323a3c8817e1471632fd25021a2a1
parent: 9ddae457b5c0790d6293dcb24b445079017d2afe
author: Ori Bernstein <[email protected]>
date: Thu Jun 7 13:17:29 EDT 2012

Implement Osize operator

--- a/8/reduce.c
+++ b/8/reduce.c
@@ -327,7 +327,7 @@
         case Tyslice:   u = mkexpr(-1, Oslbase, t, NULL); break;
         default: die("Unslicable type %s", tystr(n->expr.type));
     }
-    /* safe: all types have a sub[0] that we want to grab */
+    /* safe: all types we allow here have a sub[0] that we want to grab */
     sz = tysize(n->expr.type->sub[0]);
     v = mkexpr(-1, Omul, u, mkexpr(-1, Olit, mkint(-1, sz), NULL), NULL);
     return mkexpr(-1, Oadd, u, v, NULL);
@@ -376,9 +376,11 @@
     switch (exprop(n)) {
         case Obad:
         case Olor: case Oland:
-        case Osize:
             die("Have not implemented lowering op %s", opstr(exprop(n)));
             break;
+        case Osize:
+            r = mkexpr(-1, Olit, mkint(-1, size(args[0])), NULL);
+            break;
         case Oslice:
             args[1] = rval(s, args[1]);
             args[2] = rval(s, args[2]);
@@ -441,8 +443,7 @@
             t = mkexpr(-1, Ostor, r, v, NULL);
             lappend(&s->incqueue, &s->nqueue, t);
             break;
-        case Olit:
-        case Ovar:
+        case Olit: case Ovar:
             r = n;
             break;
         case Oret: