mescc: Tinycc support: Compound strings as function argument.
authorJan Nieuwenhuizen <janneke@gnu.org>
Mon, 14 May 2018 20:37:53 +0000 (22:37 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Mon, 14 May 2018 20:37:53 +0000 (22:37 +0200)
* module/language/c99/compiler.mes (expr->accu): Handle compound
  strings as function argument.
* module/mes/M1.mes (object->M1): Call error when string not found.
* scaffold/tests/t.c: Test it.

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

index 90d24f27484406743d0ceaac14336663ea81434f..a544757e0654c51f4aad2138d280e17d34138d38 100644 (file)
                 (info (clone info #:globals globals)))
            (append-text info (list (i386:label->accu `(#:string ,string))))))
 
+        ((p-expr (string . ,strings))
+         (let* ((string (apply string-append strings))
+                (globals ((globals:add-string globals) string))
+                (info (clone info #:globals globals)))
+           (append-text info (list (i386:label->accu `(#:string ,string))))))
+
         ((p-expr (fixed ,value))
          (let ((value (cstring->number value)))
            (append-text info (wrap-as (i386:value->accu value)))))
          (let ((char (char->integer (car (string->list char)))))
            (append-text info (wrap-as (i386:value->accu char)))))
 
-        ((p-expr (string . ,strings))
-         (append-text info (list (i386:label->accu `(#:string ,(apply string-append strings))))))
-
         (,char (guard (char? char)) (append-text info (wrap-as (i386:value->accu char))))
 
         ((p-expr (ident ,name))
index 3280cd5895f29692a5b1e4f695810fcdffc0aa30..2713df2d4c4eb867c40ef199d267b222c8d18f1a 100644 (file)
       (let ((index (list-index (lambda (s) (equal? s o)) strings)))
         (if index
             (string-append "_string_" file-name "_" (number->string index))
-            "")))
+            (error "no such string:" o))))
     (define (text->M1 o)
       (cond
        ((char? o) (text->M1 (char->integer o)))
index a92504c08f1498de7da26d053b5252634f536882..9dad4c8948f63ccc4a95c73ffad9cb0e45e19da9 100644 (file)
@@ -153,6 +153,8 @@ main (int argc, char* argv[])
       if (lst[i+1] != i)
         return 30 + i;
     }
+  puts ("foo"
+        "bar");
 
   return 0;
 }