summaryrefslogtreecommitdiff
path: root/vala/valaparser.vala
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2022-02-06 08:57:35 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2022-02-06 12:27:54 +0100
commit7b3fc94ce5d057bd7d26ce0e2d891a58710f6903 (patch)
tree1567ec21b08cdb7d8295905acde08da81bc5d4ed /vala/valaparser.vala
parent406b3a6de4bdd22f6495f85cae44914a3c6d2027 (diff)
downloadvala-7b3fc94ce5d057bd7d26ce0e2d891a58710f6903.tar.gz
parser: Allow usage of dynamic on VarType
dynamic var foo = bar.get_foo(); Fixes https://gitlab.gnome.org/GNOME/vala/issues/187
Diffstat (limited to 'vala/valaparser.vala')
-rw-r--r--vala/valaparser.vala14
1 files changed, 14 insertions, 0 deletions
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index 1e84c8bfa..a8f083a82 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -2063,15 +2063,20 @@ public class Vala.Parser : CodeVisitor {
void parse_local_variable_declarations (Block block) throws ParseError {
var begin = get_location ();
DataType variable_type;
+ bool is_dynamic = accept (TokenType.DYNAMIC);
if (accept (TokenType.UNOWNED) && accept (TokenType.VAR)) {
variable_type = new VarType (false);
variable_type.nullable = accept (TokenType.INTERR);
+ variable_type.is_dynamic = is_dynamic;
} else {
rollback (begin);
+ is_dynamic = accept (TokenType.DYNAMIC);
if (accept (TokenType.VAR)) {
variable_type = new VarType ();
variable_type.nullable = accept (TokenType.INTERR);
+ variable_type.is_dynamic = is_dynamic;
} else {
+ rollback (begin);
variable_type = parse_type (true, true);
}
}
@@ -2375,15 +2380,20 @@ public class Vala.Parser : CodeVisitor {
expect (TokenType.OPEN_PARENS);
var var_or_type = get_location ();
DataType type;
+ bool is_dynamic = accept (TokenType.DYNAMIC);
if (accept (TokenType.UNOWNED) && accept (TokenType.VAR)) {
type = new VarType (false);
type.nullable = accept (TokenType.INTERR);
+ type.is_dynamic = is_dynamic;
} else {
rollback (var_or_type);
+ is_dynamic = accept (TokenType.DYNAMIC);
if (accept (TokenType.VAR)) {
type = new VarType ();
type.nullable = accept (TokenType.INTERR);
+ type.is_dynamic = is_dynamic;
} else {
+ rollback (var_or_type);
type = parse_type (true, true);
if (accept (TokenType.IN)) {
Report.error (type.source_reference, "syntax error, expected `unowned var', `var' or type");
@@ -2551,14 +2561,18 @@ public class Vala.Parser : CodeVisitor {
// Try "with (var identifier = expr)"
rollback (expr_or_decl);
DataType variable_type;
+ bool is_dynamic = accept (TokenType.DYNAMIC);
if (accept (TokenType.UNOWNED) && accept (TokenType.VAR)) {
variable_type = new VarType (false);
variable_type.nullable = accept (TokenType.INTERR);
+ variable_type.is_dynamic = is_dynamic;
} else {
rollback (expr_or_decl);
+ is_dynamic = accept (TokenType.DYNAMIC);
if (accept (TokenType.VAR)) {
variable_type = new VarType ();
variable_type.nullable = accept (TokenType.INTERR);
+ variable_type.is_dynamic = is_dynamic;
} else {
variable_type = parse_type (true, true);
}