From 703d39eb1251c7c1353d9f1a5718e1aba2691b8c Mon Sep 17 00:00:00 2001 From: Rico Tzschichholz Date: Tue, 8 Aug 2023 07:32:15 +0200 Subject: [PATCH] WIP girparser: Allow typeof() expressions in metadata --- vala/valagirparser.vala | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala index 7b4470545..660141aa5 100644 --- a/vala/valagirparser.vala +++ b/vala/valagirparser.vala @@ -414,6 +414,16 @@ public class Vala.GirParser : CodeVisitor { return metadata; } + UnresolvedSymbol parse_symbol_name () { + var begin = this.begin; + UnresolvedSymbol sym = null; + do { + next (); + sym = new UnresolvedSymbol (sym, get_string (), get_src (begin)); + } while (current == TokenType.DOT); + return sym; + } + Expression? parse_expression () { var begin = this.begin; var src = get_current_src (); @@ -464,6 +474,16 @@ public class Vala.GirParser : CodeVisitor { } expr = new Tuple (src); break; + case TokenType.TYPEOF: + if (next () != TokenType.OPEN_PARENS) { + Report.error (get_current_src (), "expected `(', got `%s'", current.to_string ()); + break; + } + expr = new TypeofExpression (new UnresolvedType.from_symbol (parse_symbol_name (), src), src); + if (next () != TokenType.CLOSE_PARENS) { + Report.error (get_current_src (), "expected `)', got `%s'", current.to_string ()); + } + break; default: Report.error (src, "expected literal or symbol got %s", current.to_string ()); break; -- 2.47.2