From: wxx <769218589@qq.com> Date: Thu, 14 Oct 2021 09:48:00 +0000 (+0800) Subject: vala: Parameter following ellipsis parameter is not allowed X-Git-Tag: 0.48.20~67 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=201e6423e1b9eb724f477c318e9ed9ff9db0525f;p=thirdparty%2Fvala.git vala: Parameter following ellipsis parameter is not allowed Fixes https://gitlab.gnome.org/GNOME/vala/issues/1237 --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 541fb6554..ae349562d 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -167,6 +167,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 000000000..b687a339c --- /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 9c34c7ad0..eeb3f1e44 100644 --- a/vala/valamethod.vala +++ b/vala/valamethod.vala @@ -842,6 +842,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; @@ -866,11 +867,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) {