[vala/wip/issue/658: 31/48] corrected anonymous delegate parser and fail tests




commit 1d59dc1b2d29a3c614dfac136262c138c7a3360a
Author: Nick Schrader <nick schrader mailbox org>
Date:   Sat Oct 17 01:06:14 2020 -0300

    corrected anonymous delegate parser and fail tests

 tests/Makefile.am                          |  3 +++
 tests/delegates/anonymous-initializer.test | 19 +++++++++++++++++++
 tests/delegates/anonymous-throws.test      | 21 +++++++++++++++++++++
 tests/delegates/anonymous-variadic.test    | 19 +++++++++++++++++++
 vala/valaparser.vala                       | 11 -----------
 5 files changed, 62 insertions(+), 11 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 3d40ea966..034748ee4 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -340,6 +340,9 @@ TESTS = \
        delegates/anonymous.vala \
        delegates/anonymous-array.vala \
        delegates/anonymous-type-param.vala \
+       delegates/anonymous-throws.test \
+       delegates/anonymous-variadic.test \
+       delegates/anonymous-initializer.test \
        delegates/casting.vala \
        delegates/compatible.vala \
        delegates/delegate_only.vala \
diff --git a/tests/delegates/anonymous-initializer.test b/tests/delegates/anonymous-initializer.test
new file mode 100644
index 000000000..f47ebbaeb
--- /dev/null
+++ b/tests/delegates/anonymous-initializer.test
@@ -0,0 +1,19 @@
+Invalid Code
+
+/*
+ * 11.18-11.20: error: syntax error, following expression/statement delimiter `)' missing
+ * void f (delegate(int=123) => int y) {
+ *                  ^^^
+ */
+
+void main () {
+    f (t);
+}
+
+void f (delegate(int=123) => int y) {
+    y (1);
+}
+
+int t (int a) {
+    return a;
+}
diff --git a/tests/delegates/anonymous-throws.test b/tests/delegates/anonymous-throws.test
new file mode 100644
index 000000000..ff11a805d
--- /dev/null
+++ b/tests/delegates/anonymous-throws.test
@@ -0,0 +1,21 @@
+Invalid Code
+
+/*
+ * 11.30-11.30: error: syntax error, following expression/statement delimiter `)' missing
+ * void f (delegate(int) => int y throws Error) {
+ *                              ^
+ */
+
+void main () {
+    f (t);
+}
+
+void f (delegate(int) => int y throws Error) {
+    try {
+        y (1);
+    } catch {}
+}
+
+int t (int a) throws Error {
+    return a;
+}
diff --git a/tests/delegates/anonymous-variadic.test b/tests/delegates/anonymous-variadic.test
new file mode 100644
index 000000000..fabd3a422
--- /dev/null
+++ b/tests/delegates/anonymous-variadic.test
@@ -0,0 +1,19 @@
+Invalid Code
+
+/*
+ * 11.23-11.25: error: syntax error, expected identifier
+ * void f (delegate(int, ...) => int y) {
+ *                     ^^^
+ */
+
+void main () {
+    f (t);
+}
+
+void f (delegate(int, ...) => int y) {
+    y (1);
+}
+
+int t (int a, ...) {
+    return a;
+}
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index 6f7007fe2..77bbb9222 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -3750,13 +3750,6 @@ public class Vala.Parser : CodeVisitor {
                }
                expect (TokenType.CLOSE_PARENS);
 
-               DataType error_type = null;
-               if (accept (TokenType.THROWS)) {
-                       do {
-                               error_type = parse_type (true, false);
-                       } while (accept (TokenType.COMMA));
-               }
-
                expect (TokenType.LAMBDA);
                var type = parse_type (true, false);
 
@@ -3772,10 +3765,6 @@ public class Vala.Parser : CodeVisitor {
                        d.add_parameter (param);
                }
 
-               if (error_type != null) {
-                       d.add_error_type (error_type);
-               }
-
                parent.add_delegate (d);
                return new DelegateType (d);
        }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]