mescc: Support heterogeneous variable init.
authorJan Nieuwenhuizen <janneke@gnu.org>
Fri, 4 May 2018 20:38:01 +0000 (22:38 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Fri, 4 May 2018 20:38:01 +0000 (22:38 +0200)
* module/language/c99/compiler.mes (decl->info): Support heterogeneous
  variable init.
* scaffold/tests/83-heterogenoous-init.c: Test it.
* build-aux/check-mescc.sh (tests): Add it.

build-aux/check-mescc.sh
module/language/c99/compiler.mes
scaffold/tests/83-heterogenoous-init.c [new file with mode: 0644]

index be84b9cfb55e7b5610f886fd3d5baf4f46c08fce..c6927ad8e029976173e72a01ec752b32df574f25 100755 (executable)
@@ -112,6 +112,7 @@ t
 80-setjmp
 81-qsort
 82-define
+83-heterogenoous-init
 "
 
 broken="$broken
index 90e93a269f369f6f4ced1dc96e178450c2f43866..baa98b55186ccce2ebf4d9f0da0b185c5e1fa398 100644 (file)
                       (globals (append globals (list global))))
                  (clone info #:globals globals)))))
 
-        ;; int i = 0, j = 0;
-        ((decl (decl-spec-list (type-spec ,type)) (init-declr-list (init-declr (ident ,name) . ,initzer) . ,rest))
-         (let loop ((inits `((init-declr (ident ,name) ,@initzer) ,@rest)) (info info))
-           (if (null? inits) info
-               (loop (cdr inits)
-                     ((decl->info info)
-                      `(decl (decl-spec-list (type-spec ,type)) (init-declr-list ,(car inits))))))))
-
-        ;; int *i = 0, j ..;
-        ((decl (decl-spec-list (type-spec ,type)) (init-declr-list (init-declr (ptr-declr ,pointer (ident ,name)) . ,initzer) . ,rest))
-         (let loop ((inits `((init-declr (ptr-declr ,pointer (ident ,name)) ,@initzer) ,@rest)) (info info))
+        ((decl (decl-spec-list (type-spec ,type)) (init-declr-list . ,inits))
+         (let loop ((inits inits) (info info))
            (if (null? inits) info
                (loop (cdr inits)
                      ((decl->info info)
diff --git a/scaffold/tests/83-heterogenoous-init.c b/scaffold/tests/83-heterogenoous-init.c
new file mode 100644 (file)
index 0000000..809ad2a
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) 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/>.
+ */
+
+int foo[2], *bar;
+
+int
+main ()
+{
+  bar = foo+1;
+  foo[0] = 1;
+  *bar = 1;
+  return *foo - bar[0];
+}