diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-02-06 08:57:35 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-02-06 12:27:54 +0100 |
commit | 7b3fc94ce5d057bd7d26ce0e2d891a58710f6903 (patch) | |
tree | 1567ec21b08cdb7d8295905acde08da81bc5d4ed /vala/valaparser.vala | |
parent | 406b3a6de4bdd22f6495f85cae44914a3c6d2027 (diff) | |
download | vala-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.vala | 14 |
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); } |