From 13edbaf4d8ddf694b74e39c82fcdf7833f92d8c5 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Fri, 4 May 2018 22:38:01 +0200 Subject: [PATCH] mescc: Support heterogeneous variable init. * 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 | 1 + module/language/c99/compiler.mes | 13 ++--------- scaffold/tests/83-heterogenoous-init.c | 30 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 11 deletions(-) create mode 100644 scaffold/tests/83-heterogenoous-init.c diff --git a/build-aux/check-mescc.sh b/build-aux/check-mescc.sh index be84b9cf..c6927ad8 100755 --- a/build-aux/check-mescc.sh +++ b/build-aux/check-mescc.sh @@ -112,6 +112,7 @@ t 80-setjmp 81-qsort 82-define +83-heterogenoous-init " broken="$broken diff --git a/module/language/c99/compiler.mes b/module/language/c99/compiler.mes index 90e93a26..baa98b55 100644 --- a/module/language/c99/compiler.mes +++ b/module/language/c99/compiler.mes @@ -2131,17 +2131,8 @@ (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 index 00000000..809ad2a7 --- /dev/null +++ b/scaffold/tests/83-heterogenoous-init.c @@ -0,0 +1,30 @@ +/* -*-comment-start: "//";comment-end:""-*- + * Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * 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 . + */ + +int foo[2], *bar; + +int +main () +{ + bar = foo+1; + foo[0] = 1; + *bar = 1; + return *foo - bar[0]; +}