From 1dedd1d2833ed3fef11feec707cb9cfdf87e9000 Mon Sep 17 00:00:00 2001 From: Minero Aoki Date: Tue, 1 Jan 2008 16:32:15 +0000 Subject: [PATCH] * net/loveruby/cflat/compiler/TypeChecker.java: better error message. * test/test.sh: run following tests. * test/deref-semcheck1.cb: check if dereferencing int causes compile error. * test/deref-semcheck2.cb: check if dereferencing char causes compile error. * test/deref-semcheck3.cb: check if dereferencing struct causes compile error. git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3767 1b9489fe-b721-0410-924e-b54b9192deb8 --- ChangeLog | 16 ++++++++++++++++ net/loveruby/cflat/compiler/TypeChecker.java | 11 ++++++----- test/deref-semcheck1.cb | 1 + test/deref-semcheck2.cb | 1 + test/deref-semcheck3.cb | 6 ++++++ test/test.sh | 3 +++ 6 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 test/deref-semcheck1.cb create mode 100644 test/deref-semcheck2.cb create mode 100644 test/deref-semcheck3.cb diff --git a/ChangeLog b/ChangeLog index d6a9892..d465da4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +Wed Jan 2 01:32:12 2008 Minero Aoki + + * net/loveruby/cflat/compiler/TypeChecker.java: better error + message. + + * test/test.sh: run following tests. + + * test/deref-semcheck1.cb: check if dereferencing int causes + compile error. + + * test/deref-semcheck2.cb: check if dereferencing char causes + compile error. + + * test/deref-semcheck3.cb: check if dereferencing struct causes + compile error. + Wed Jan 2 01:24:05 2008 Minero Aoki * net/loveruby/cflat/compiler/TypeChecker.java: check member diff --git a/net/loveruby/cflat/compiler/TypeChecker.java b/net/loveruby/cflat/compiler/TypeChecker.java index 2c41177..c466f0c 100644 --- a/net/loveruby/cflat/compiler/TypeChecker.java +++ b/net/loveruby/cflat/compiler/TypeChecker.java @@ -394,16 +394,17 @@ class TypeChecker extends Visitor { } protected void incompatibleTypeError(Type l, Type r) { - errorHandler.error("incompatible type: " + - l.textize() + " and " + r.textize()); + errorHandler.error("incompatible type: " + + l.textize() + " and " + r.textize()); } protected void notIntegerError(Type type) { - errorHandler.error("non-integer argument for unary op: " + - type.textize()); + errorHandler.error("non-integer argument for unary op: " + + type.textize()); } protected void notPointerError(Type type) { - errorHandler.error("non-pointer argument: " + type.textize()); + errorHandler.error("dereferencing non-pointer expression: " + + type.textize()); } } diff --git a/test/deref-semcheck1.cb b/test/deref-semcheck1.cb new file mode 100644 index 0000000..4354d0f --- /dev/null +++ b/test/deref-semcheck1.cb @@ -0,0 +1 @@ +int main(int argc, char **argv) { return *1; } diff --git a/test/deref-semcheck2.cb b/test/deref-semcheck2.cb new file mode 100644 index 0000000..fb38a8b --- /dev/null +++ b/test/deref-semcheck2.cb @@ -0,0 +1 @@ +int main(int argc, char **argv) { return *'c'; } diff --git a/test/deref-semcheck3.cb b/test/deref-semcheck3.cb new file mode 100644 index 0000000..c3467a9 --- /dev/null +++ b/test/deref-semcheck3.cb @@ -0,0 +1,6 @@ +struct st { int x; }; + +int main(int argc, char **argv) { + struct st s; + return *s; +} diff --git a/test/test.sh b/test/test.sh index 7ceca45..309cae5 100755 --- a/test/test.sh +++ b/test/test.sh @@ -135,6 +135,9 @@ assert_error $CBC union-semcheck6.cb assert_out "5;5" ./pointer assert_out "1;2" ./ptrmemb +assert_error $CBC deref-semcheck1.cb +assert_error $CBC deref-semcheck2.cb +assert_error $CBC deref-semcheck3.cb assert_out "2;64;-128;0" ./charops assert_out "2;64;128;0" ./ucharops