mescc: Support assignment test.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sat, 18 Mar 2017 07:17:18 +0000 (08:17 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 18 Mar 2017 07:17:18 +0000 (08:17 +0100)
* module/language/c99/compiler.mes (test->jump->info): Handle assignment.
* doc/examples/t.c (test): Test it.

module/language/c99/compiler.mes
scaffold/t.c

index d66e1d41e6beb64c830dad4cbdefc438cb14e73b..59db6ac8b33d243ee1abbc51cc9961166d8d7d12 100644 (file)
@@ -1014,7 +1014,7 @@ _)))))
       )))
 
 (define (test->jump->info info)
-  (define (jump type)
+  (define (jump type . test)
     (lambda (o)
       (let* ((text (.text info))
              (info (clone info #:text '()))
@@ -1025,6 +1025,7 @@ _)))))
          (clone info #:text
                 (append text
                         (.text info)
+                        (if (null? test) '() (car test))
                         (jump-text body-length)))))))
   (lambda (o)
     (pmatch o
@@ -1074,18 +1075,19 @@ _)))))
                           jump-text
                           (.text (b-jump body-length)))))))
 
-      ((array-ref . _) ((jump (lambda (n)
-                                (append
-                                 (i386:accu-zero?)
-                                 (i386:jump-byte-z n)))) o))
-      ((de-ref _) ((jump (lambda (n)
-                           (append
-                            (i386:accu-zero?)
-                            (i386:jump-byte-z n)))) o))
-      (_ ((jump (lambda (n)
-                  (append
-                   (i386:accu-zero?)
-                   (i386:Xjump-z n)))) o)))))
+      ((array-ref . _) ((jump i386:jump-byte-z
+                              (list (lambda (f g ta t d) (i386:accu-zero?)))) o))
+
+      ((de-ref _) ((jump i386:jump-byte-z
+                         (list (lambda (f g ta t d) (i386:accu-zero?)))) o))
+
+      ((assn-expr (p-expr (ident ,name)) ,op ,expr)
+       ((jump i386:Xjump-z
+              (append
+               ((ident->accu info) name)
+               (list (lambda (f g ta t d) (i386:accu-zero?))))) o))
+
+      (_ ((jump i386:Xjump-z (list (lambda (f g ta t d) (i386:accu-zero?)))) o)))))
 
 (define (cstring->number s)
   (cond ((string-prefix? "0x" s) (string->number (string-drop s 2) 16))
index 82165c41d7be3e4ed6328e1813bfeb4b07a5d93a..b119329551beda4fb5af1cf7284143f108ba74f9 100644 (file)
@@ -528,6 +528,12 @@ test (char *p)
   i -= 2;
   if (i != 0) return 1;
 
+  puts ("t: if (f = 0) ?\n");
+  if (f = 0) return 1;
+
+  puts ("t: if (!(t = 1)) ?\n");
+  if (!(t = 1)) return 1;
+
   puts ("t: (one == 1) ?\n");
   (one == 1) ? 1 : exit (1);
 
@@ -728,17 +734,6 @@ test (char *p)
 }
 #endif
 
-int
-init ()
-{
-  // g_cells[0].cdr = 0;
-  // g_cells[1].cdr = 1;
-  g_functions[0] = g_foo;
-  g_functions[1] = g_bar;
-    
-  return 0;
-}
-    
 int
 main (int argc, char *argv[])
 {