From: Jürg Billeter Date: Thu, 15 Jan 2009 09:18:37 +0000 (+0000) Subject: Accept numbers with characters as identifiers where possible X-Git-Tag: VALA_0_5_6~46 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c3fdb423bc7bac672314ae6c1a635a452375f3bc;p=thirdparty%2Fvala.git Accept numbers with characters as identifiers where possible 2009-01-15 Jürg Billeter * vala/valaparser.vala: Accept numbers with characters as identifiers where possible svn path=/trunk/; revision=2341 --- diff --git a/ChangeLog b/ChangeLog index b4c02f0e8..90af4f244 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-01-15 Jürg Billeter + + * vala/valaparser.vala: + + Accept numbers with characters as identifiers where possible + 2009-01-14 Jürg Billeter * vala/valacodewriter.vala: diff --git a/vala/valaparser.vala b/vala/valaparser.vala index c5bed7fe9..d2e85282a 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -131,6 +131,10 @@ public class Vala.Parser : CodeVisitor { return tokens[index].begin; } + string get_current_string () { + return ((string) tokens[index].begin.pos).ndup ((tokens[index].end.pos - tokens[index].begin.pos)); + } + string get_last_string () { int last_index = (index + BUFFER_SIZE - 1) % BUFFER_SIZE; return ((string) tokens[last_index].begin.pos).ndup ((tokens[last_index].end.pos - tokens[last_index].begin.pos)); @@ -239,9 +243,21 @@ public class Vala.Parser : CodeVisitor { case TokenType.YIELDS: next (); return; - default: - throw new ParseError.SYNTAX (get_error ("expected identifier")); + case TokenType.INTEGER_LITERAL: + case TokenType.REAL_LITERAL: + // also accept integer and real literals + // as long as they contain at least one character + // and no decimal point + // for example, 2D and 3D + string id = get_current_string (); + if (id[id.length - 1].isalpha () && !("." in id)) { + next (); + return; + } + break; } + + throw new ParseError.SYNTAX (get_error ("expected identifier")); } string parse_identifier () throws ParseError { @@ -249,7 +265,7 @@ public class Vala.Parser : CodeVisitor { return get_last_string (); } - Expression parse_literal () throws ParseError { + Expression parse_literal () throws ParseError { var begin = get_location (); switch (current ()) {