mescc: Tinycc support: multi-line strings.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 16 Jul 2017 20:59:07 +0000 (22:59 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 26 Jul 2017 09:36:08 +0000 (11:36 +0200)
* module/language/c99/compiler.mes (initzer->data, expr->global):
  Handle multi-line strings.
* scaffold/tests/74-multi-line-string.c: New file.
* make.scm (add-scaffold-test): Build it.

make.scm
module/language/c99/compiler.mes
scaffold/tests/74-multi-line-string.c [new file with mode: 0644]

index 1203c121bed0b9fc1e2442157ef6bdf45f41fb6f..0428fbc9fa3a47461fbd176bb97d9f9e5b7c5c55 100755 (executable)
--- a/make.scm
+++ b/make.scm
@@ -152,7 +152,8 @@ exec ${GUILE-guile} --no-auto-compile -L . -L guile -C . -C guile -s "$0" ${1+"$
  '("70-printf"
    "71-struct-array"
    "72-typedef-struct-def"
-   "73-union"))
+   "73-union"
+   "74-multi-line-string"))
 
 (add-target (group "check-scaffold-tests/7" #:dependencies (filter (target-prefix? "check-scaffold/tests/7") %targets)))
 
index 273f33caf2504fea978294fa78fd5ccba4f78841..c9874eb751e705471fee0f50007f0e3d9b42b0e0 100644 (file)
       ((initzer (neg (p-expr (fixed ,value)))) (int->bv32 (- (cstring->number value))))
       ((initzer (ref-to (p-expr (ident ,name)))) `(,name #f #f #f))
       ((initzer (p-expr (string ,string))) `((#:string ,string) #f #f #f))
+      ((initzer (p-expr (string . ,strings))) `((#:string ,(string-join strings "")) #f #f #f))
       ((initzer (initzer-list . ,initzers)) (append-map (initzer->data info) initzers))
       (() (int->bv32 0))
       (_ (error "initzer->data: unsupported: " o)))))
        (let ((g `(#:string ,string)))
          (or (assoc g globals)
              (string->global-entry string))))
+      ((p-expr (string . ,strings))
+       (let* ((string (string-join strings ""))
+              (g `(#:string ,string)))
+         (or (assoc g globals)
+             (string->global-entry string))))
       ;;((p-expr (fixed ,value)) (int->global-entry (cstring->number value)))
       (_ #f))))
 
diff --git a/scaffold/tests/74-multi-line-string.c b/scaffold/tests/74-multi-line-string.c
new file mode 100644 (file)
index 0000000..e3d1c87
--- /dev/null
@@ -0,0 +1,37 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "30-test.i"
+#include <stdio.h>
+#include <string.h>
+
+char const* help =
+  "All"
+  " your"
+  " base"
+  " are";
+
+int
+test ()
+{
+  if (strcmp (help, "All your base are")) return 1;
+
+  return 0;
+}