From: Luca Bruno Date: Fri, 24 Dec 2010 13:03:39 +0000 (+0100) Subject: girparser: Support negative integer literals in metadata. X-Git-Tag: 0.13.0~288 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=11e99754c4595b3873448c6bf49bb71ff8a69b1c;p=thirdparty%2Fvala.git girparser: Support negative integer literals in metadata. --- diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala index 59a7a0203..b93725774 100644 --- a/vala/valagirparser.vala +++ b/vala/valagirparser.vala @@ -200,9 +200,17 @@ public class Vala.GirParser : CodeVisitor { } public int get_integer (ArgumentType arg) { - var lit = get_expression (arg) as IntegerLiteral; - if (lit != null) { - return int.parse (lit.value); + var unary = get_expression (arg) as UnaryExpression; + if (unary != null && unary.operator == UnaryOperator.MINUS) { + var lit = unary.inner as IntegerLiteral; + if (lit != null) { + return -int.parse (lit.value); + } + } else { + var lit = get_expression (arg) as IntegerLiteral; + if (lit != null) { + return int.parse (lit.value); + } } return 0; @@ -401,6 +409,7 @@ public class Vala.GirParser : CodeVisitor { } Expression? parse_expression () { + var begin = this.begin; var src = get_current_src (); Expression expr = null; switch (current) { @@ -413,6 +422,15 @@ public class Vala.GirParser : CodeVisitor { case TokenType.FALSE: expr = new BooleanLiteral (false, src); break; + case TokenType.MINUS: + next (); + var inner = parse_expression (); + if (inner == null) { + Report.error (src, "expected expression after `-', got `%s'".printf (current.to_string ())); + } else { + expr = new UnaryExpression (UnaryOperator.MINUS, inner, get_src (begin)); + } + return expr; case TokenType.INTEGER_LITERAL: expr = new IntegerLiteral (get_string (), src); break;