From 2b69b8accac817f23bd51ca41d14deec131d83c5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Tue, 25 Oct 2022 21:02:32 +0800 Subject: [PATCH] vala: Report error in real literal if exponent has no digits --- tests/Makefile.am | 3 +++ tests/semantic/realliteral-exponent-has-no-digits.test | 5 +++++ tests/semantic/realliteral-exponent-has-no-digits2.test | 5 +++++ tests/semantic/realliteral-exponent-has-no-digits3.test | 5 +++++ vala/valarealliteral.vala | 5 +++++ 5 files changed, 23 insertions(+) create mode 100644 tests/semantic/realliteral-exponent-has-no-digits.test create mode 100644 tests/semantic/realliteral-exponent-has-no-digits2.test create mode 100644 tests/semantic/realliteral-exponent-has-no-digits3.test diff --git a/tests/Makefile.am b/tests/Makefile.am index 6a2acf56c..10ff6183f 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1243,6 +1243,9 @@ TESTS = \ semantic/property-too-few-type-arguments.test \ semantic/property-too-many-type-arguments.test \ semantic/property-void.test \ + semantic/realliteral-exponent-has-no-digits.test \ + semantic/realliteral-exponent-has-no-digits2.test \ + semantic/realliteral-exponent-has-no-digits3.test \ semantic/reference-transfer-not-supported.test \ semantic/reference-transfer-unavailable.test \ semantic/return-in-nonvoid.test \ diff --git a/tests/semantic/realliteral-exponent-has-no-digits.test b/tests/semantic/realliteral-exponent-has-no-digits.test new file mode 100644 index 000000000..fbe418a07 --- /dev/null +++ b/tests/semantic/realliteral-exponent-has-no-digits.test @@ -0,0 +1,5 @@ +Invalid Code + +void main () { + double foo = 18.93e; +} diff --git a/tests/semantic/realliteral-exponent-has-no-digits2.test b/tests/semantic/realliteral-exponent-has-no-digits2.test new file mode 100644 index 000000000..b0d48fa09 --- /dev/null +++ b/tests/semantic/realliteral-exponent-has-no-digits2.test @@ -0,0 +1,5 @@ +Invalid Code + +void main () { + double foo = 20.03e+; +} diff --git a/tests/semantic/realliteral-exponent-has-no-digits3.test b/tests/semantic/realliteral-exponent-has-no-digits3.test new file mode 100644 index 000000000..0256423ef --- /dev/null +++ b/tests/semantic/realliteral-exponent-has-no-digits3.test @@ -0,0 +1,5 @@ +Invalid Code + +void main () { + double foo = 7.11e-; +} diff --git a/vala/valarealliteral.vala b/vala/valarealliteral.vala index 2924cd764..c992fba6f 100644 --- a/vala/valarealliteral.vala +++ b/vala/valarealliteral.vala @@ -71,6 +71,11 @@ public class Vala.RealLiteral : Literal { type_name = "double"; } + if (value.has_suffix ("e") || value.has_suffix ("+") || value.has_suffix ("-")) { + Report.error (source_reference, "exponent has no digits"); + error = true; + } + var st = (Struct) context.root.scope.lookup (type_name); // ensure attributes are already processed st.check (context); -- 2.47.2