diff --git a/tests/Makefile.am b/tests/Makefile.am index d42298f6fff869f4f6e73313d1cd043f802ccfd6..f35f5aeca5fe9be617423904433fb111f7e3694d 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -169,6 +169,7 @@ TESTS = \ methods/lambda.vala \ methods/closures.vala \ methods/contains.vala \ + methods/ellipsis-preceding.test \ methods/extern.vala \ methods/iterator.vala \ methods/parameter-fixed-array-initializer.vala \ diff --git a/tests/methods/ellipsis-preceding.test b/tests/methods/ellipsis-preceding.test new file mode 100644 index 0000000000000000000000000000000000000000..b687a339c8cb2065fe8089baf2bbfa6aa13ccda1 --- /dev/null +++ b/tests/methods/ellipsis-preceding.test @@ -0,0 +1,7 @@ +Invalid Code + +void foo (int i, ..., int j) { +} + +void main () { +} diff --git a/vala/valamethod.vala b/vala/valamethod.vala index 9ad3c205900e29110e1cf16b31c9722b635d864c..f03df3a4c156811a12fec42f87b17abaea0af122 100644 --- a/vala/valamethod.vala +++ b/vala/valamethod.vala @@ -849,6 +849,7 @@ public class Vala.Method : Subroutine, Callable { var optional_param = false; var params_array_param = false; + var ellipsis_param = false; foreach (Parameter param in parameters) { if (!param.check (context)) { error = true; @@ -873,11 +874,18 @@ public class Vala.Method : Subroutine, Callable { optional_param = true; } + // Disallow parameter after params array or ellipsis if (params_array_param) { Report.error (param.source_reference, "parameter follows params-array parameter"); } else if (param.params_array) { params_array_param = true; } + if (ellipsis_param) { + Report.error (param.source_reference, "parameter follows ellipsis parameter"); + } else if (param.ellipsis) { + ellipsis_param = true; + } + // Add local variable to provide access to params arrays which will be constructed out of the given va-args if (param.params_array && body != null) { if (params_array_var != null) {