summaryrefslogtreecommitdiff
path: root/vala/valagenieparser.vala
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2010-08-21 13:01:26 +0200
committerJürg Billeter <j@bitron.ch>2010-09-09 15:54:17 +0200
commit3b5d28eafcff393571e45c3e73779d072e8382e1 (patch)
treec153904034e51cf10bfc047428f3548e526a6b90 /vala/valagenieparser.vala
parentd3281263e9d81f912c253d8a06a95c4bbc46cc22 (diff)
downloadvala-3b5d28eafcff393571e45c3e73779d072e8382e1.tar.gz
Simplify attribute objects
Diffstat (limited to 'vala/valagenieparser.vala')
-rw-r--r--vala/valagenieparser.vala28
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);