diff options
author | Jürg Billeter <j@bitron.ch> | 2010-08-21 13:01:26 +0200 |
---|---|---|
committer | Jürg Billeter <j@bitron.ch> | 2010-09-09 15:54:17 +0200 |
commit | 3b5d28eafcff393571e45c3e73779d072e8382e1 (patch) | |
tree | c153904034e51cf10bfc047428f3548e526a6b90 /vala/valagenieparser.vala | |
parent | d3281263e9d81f912c253d8a06a95c4bbc46cc22 (diff) | |
download | vala-3b5d28eafcff393571e45c3e73779d072e8382e1.tar.gz |
Simplify attribute objects
Diffstat (limited to 'vala/valagenieparser.vala')
-rw-r--r-- | vala/valagenieparser.vala | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/vala/valagenieparser.vala b/vala/valagenieparser.vala index 5b4b39f6d..0649c28c0 100644 --- a/vala/valagenieparser.vala +++ b/vala/valagenieparser.vala @@ -2284,6 +2284,31 @@ public class Vala.Genie.Parser : CodeVisitor { return new DeleteStatement (expr, get_src (begin)); } + string parse_attribute_value () throws ParseError { + switch (current ()) { + case TokenType.NULL: + case TokenType.TRUE: + case TokenType.FALSE: + case TokenType.INTEGER_LITERAL: + case TokenType.REAL_LITERAL: + case TokenType.STRING_LITERAL: + next (); + return get_last_string (); + case TokenType.MINUS: + next (); + switch (current ()) { + case TokenType.INTEGER_LITERAL: + case TokenType.REAL_LITERAL: + next (); + return "-" + get_last_string (); + default: + throw new ParseError.SYNTAX (get_error ("expected number")); + } + default: + throw new ParseError.SYNTAX (get_error ("expected literal")); + } + } + List<Attribute>? parse_attributes () throws ParseError { if (current () != TokenType.OPEN_BRACKET) { return null; @@ -2299,8 +2324,7 @@ public class Vala.Genie.Parser : CodeVisitor { do { id = parse_identifier (); expect (TokenType.ASSIGN); - var expr = parse_expression (); - attr.add_argument (id, expr); + attr.add_argument (id, parse_attribute_value ()); } while (accept (TokenType.COMMA)); } expect (TokenType.CLOSE_PARENS); |