From 8ffc16bb7446ea87a28cfd6e38bbf69bc417ef15 Mon Sep 17 00:00:00 2001 From: Jose Mendoza <56417208+StunxFS@users.noreply.github.com> Date: Wed, 3 Jul 2024 15:08:35 +0000 Subject: [PATCH] astgen: disallow `??type` --- bsc/astgen/__init__.py | 8 +++++++- tests/invalid_code/invalid_option_type.bs | 3 +++ tests/invalid_code/invalid_option_type.out | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 tests/invalid_code/invalid_option_type.bs create mode 100644 tests/invalid_code/invalid_option_type.out diff --git a/bsc/astgen/__init__.py b/bsc/astgen/__init__.py index 62dec3a..f15075a 100644 --- a/bsc/astgen/__init__.py +++ b/bsc/astgen/__init__.py @@ -562,7 +562,13 @@ def user_type_decl(self, *names): return BasicType(left, left.pos) def option_type_decl(self, *nodes): - return OptionType(nodes[1], self.mkpos(nodes[0])) + inner_type = nodes[1] + pos = self.mkpos(nodes[0]) + if isinstance(inner_type, OptionType): + report.error( + "cannot declare an option type using another option type", pos + ) + return OptionType(inner_type, pos) def array_type_decl(self, *nodes): has_size = not isinstance(nodes[1], Token) diff --git a/tests/invalid_code/invalid_option_type.bs b/tests/invalid_code/invalid_option_type.bs new file mode 100644 index 0000000..60ff861 --- /dev/null +++ b/tests/invalid_code/invalid_option_type.bs @@ -0,0 +1,3 @@ +fn main() ??int { + return 0; +} \ No newline at end of file diff --git a/tests/invalid_code/invalid_option_type.out b/tests/invalid_code/invalid_option_type.out new file mode 100644 index 0000000..d2263ac --- /dev/null +++ b/tests/invalid_code/invalid_option_type.out @@ -0,0 +1 @@ +tests/invalid_code/invalid_option_type.bs:1:11: error: cannot declare an option type using another option type