]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
support hexadecimal and octal integer literals, support hexadecimal escape
authorJürg Billeter <j@bitron.ch>
Thu, 10 Aug 2006 20:48:38 +0000 (20:48 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Thu, 10 Aug 2006 20:48:38 +0000 (20:48 +0000)
2006-08-10  Jürg Billeter  <j@bitron.ch>

* vala/scanner.l: support hexadecimal and octal integer literals,
  support hexadecimal escape sequences, support BASE and THIS
* vala/parser.y: use BASE and THIS keywords
* vala/valasemanticanalyzer.vala: don't use new base keyword as variable
  name
* vala/valacodegenerator.vala: simplify code
* vala/valainterfacewriter.vala: obey base keyword

svn path=/trunk/; revision=99

vala/ChangeLog
vala/vala/parser.y
vala/vala/scanner.l
vala/vala/valacodegenerator.vala
vala/vala/valainterfacewriter.vala
vala/vala/valasemanticanalyzer.vala

index 7e9f942ed1b16dfd0ca5fe4eb62dbbf37e941218..b427c7fba3df95fdc79389883f353400a5547a1b 100644 (file)
@@ -1,3 +1,13 @@
+2006-08-10  Jürg Billeter  <j@bitron.ch>
+
+       * vala/scanner.l: support hexadecimal and octal integer literals,
+         support hexadecimal escape sequences, support BASE and THIS
+       * vala/parser.y: use BASE and THIS keywords
+       * vala/valasemanticanalyzer.vala: don't use new base keyword as variable
+         name
+       * vala/valacodegenerator.vala: simplify code
+       * vala/valainterfacewriter.vala: obey base keyword
+
 2006-08-10  Jürg Billeter  <j@bitron.ch>
 
        * vala/valacodegenerator.vala: fix memory management in switch
index 591387b3c937dcbc3fa14f3e41732d67cd24f8b2..1c82cd4e0d97d476540813f0039f3b0d71aa0fac 100644 (file)
@@ -150,6 +150,7 @@ static void yyerror (YYLTYPE *locp, ValaParser *parser, const char *msg);
 %token PERCENT "%"
 
 %token ABSTRACT "abstract"
+%token BASE "base"
 %token BREAK "break"
 %token CALLBACK "callback"
 %token CASE "case"
@@ -184,6 +185,7 @@ static void yyerror (YYLTYPE *locp, ValaParser *parser, const char *msg);
 %token STATIC "static"
 %token STRUCT "struct"
 %token SWITCH "switch"
+%token THIS "this"
 %token VALA_TRUE "true"
 %token TYPEOF "typeof"
 %token USING "using"
@@ -213,6 +215,8 @@ static void yyerror (YYLTYPE *locp, ValaParser *parser, const char *msg);
 %type <expression> member_access
 %type <expression> invocation_expression
 %type <expression> element_access
+%type <expression> this_access
+%type <expression> base_access
 %type <expression> post_increment_expression
 %type <expression> post_decrement_expression
 %type <expression> object_creation_expression
@@ -526,6 +530,8 @@ primary_expression
        | member_access
        | invocation_expression
        | element_access
+       | this_access
+       | base_access
        | post_increment_expression
        | post_decrement_expression
        | object_creation_expression
@@ -613,6 +619,24 @@ element_access
          }
        ;
 
+this_access
+       : THIS
+         {
+               ValaSourceReference *src = src(@1);
+               $$ = VALA_EXPRESSION (vala_member_access_new (NULL, "this", src));
+               g_object_unref (src);
+         }
+       ;
+
+base_access
+       : BASE
+         {
+               ValaSourceReference *src = src(@1);
+               $$ = VALA_EXPRESSION (vala_member_access_new (NULL, "base", src));
+               g_object_unref (src);
+         }
+       ;
+
 post_increment_expression
        : primary_expression OP_INC
          {
index dd00b3434657aea543a7b0bdcbd9843661d503f0..c6e6d87700807a282c59e505ca41c2d9be6ba7fc 100644 (file)
@@ -40,13 +40,24 @@ static gboolean file_comment = FALSE;
 
 %x IN_COMMENT
 
-space                  [ \t\n]*
-ident                  [[:alnum:]_]+
-literal_integer                [[:digit:]]+
-literal_real           [[:digit:]]+"."[[:digit:]]*
-literal_character      \'([^\'\\]|\\[\'\"\?\\abfnrtv])*\'
-literal_string         \"([^\"\\]|\\[\'\"\?\\abfnrtv])*\"
-literal                        ({literal_integer}|{literal_real}|{literal_character}|{literal_string})
+space                          [ \t\n]*
+ident                          [[:alnum:]_]+
+decimal_integer_literal                (0|[1-9][[:digit:]]*)
+real_literal                   [[:digit:]]+"."[[:digit:]]*
+hex_digit                      [[:digit:]A-fa-f]
+octal_digit                    [0-7]
+octal_integer_literal          0{octal_digit}+
+hexadecimal_integer_literal    0x{hex_digit}+
+single_character               [^\'\\]
+single_string_literal_character        [^\"\\]
+simple_escape_sequence         \\[\'\"\?\\abfnrtv]
+hexadecimal_escape_sequence    \\x{hex_digit}{hex_digit}?{hex_digit}?{hex_digit}?
+character                      ({single_character}|{simple_escape_sequence})
+string_literal_character       ({single_string_literal_character}|{simple_escape_sequence})
+character_literal              \'{character}*\'
+string_literal                 \"{string_literal_character}*\"
+integer_literal                        ({decimal_integer_literal}|{hexadecimal_integer_literal}|{octal_integer_literal})
+literal                                ({integer_literal}|{real_literal}|{character_literal}|{string_literal})
 
 %%
 
@@ -115,6 +126,7 @@ literal                     ({literal_integer}|{literal_real}|{literal_character}|{literal_string}
 "@"[[:alnum:]_]+       { uploc; yylval->str = g_strdup (yytext + 1); return IDENTIFIER; }
 
 "abstract"     { uploc; return ABSTRACT; }
+"base"         { uploc; return BASE; }
 "break"                { uploc; return BREAK; }
 "callback"     { uploc; return CALLBACK; }
 "case"         { uploc; return CASE; }
@@ -149,6 +161,7 @@ literal                     ({literal_integer}|{literal_real}|{literal_character}|{literal_string}
 "struct"       { uploc; return STRUCT; }
 "switch"       { uploc; return SWITCH; }
 "return"       { uploc; return RETURN; }
+"this"         { uploc; return THIS; }
 "true"         { uploc; return VALA_TRUE; }
 "typeof"       { uploc; return TYPEOF; }
 "using"                { uploc; return USING; }
@@ -157,11 +170,11 @@ literal                   ({literal_integer}|{literal_real}|{literal_character}|{literal_string}
 "weak"         { uploc; return WEAK; }
 "while"                { uploc; return WHILE; }
 
-{literal_real}         { uploc; yylval->str = g_strdup (yytext); return REAL_LITERAL; }
-{literal_integer}      { uploc; yylval->str = g_strdup (yytext); return INTEGER_LITERAL; }
+{real_literal}         { uploc; yylval->str = g_strdup (yytext); return REAL_LITERAL; }
+{integer_literal}      { uploc; yylval->str = g_strdup (yytext); return INTEGER_LITERAL; }
 
-{literal_character}    { uploc; yylval->str = g_strdup (yytext); return CHARACTER_LITERAL; }
-{literal_string}       { uploc; yylval->str = g_strdup (yytext); return STRING_LITERAL; }
+{character_literal}    { uploc; yylval->str = g_strdup (yytext); return CHARACTER_LITERAL; }
+{string_literal}       { uploc; yylval->str = g_strdup (yytext); return STRING_LITERAL; }
 
 {ident}                        { uploc; yylval->str = g_strdup (yytext); return IDENTIFIER; }
 
index 0a6a0071a3c4ffae107685481b20292f73db397a..ec5b679af32ee381f4c56073e160491e4dfa08d9 100644 (file)
@@ -2075,11 +2075,9 @@ public class Vala.CodeGenerator : CodeVisitor {
        }
 
        public override void visit_postfix_expression (PostfixExpression! expr) {
-               if (expr.increment) {
-                       expr.ccodenode = new CCodeUnaryExpression (CCodeUnaryOperator.POSTFIX_INCREMENT, (CCodeExpression) expr.inner.ccodenode);
-               } else {
-                       expr.ccodenode = new CCodeUnaryExpression (CCodeUnaryOperator.POSTFIX_DECREMENT, (CCodeExpression) expr.inner.ccodenode);
-               }
+               var op = expr.increment ? CCodeUnaryOperator.POSTFIX_INCREMENT : CCodeUnaryOperator.POSTFIX_DECREMENT;
+       
+               expr.ccodenode = new CCodeUnaryExpression (op, (CCodeExpression) expr.inner.ccodenode);
                
                visit_expression (expr);
        }
index 5494cd2ab8d82123eadc5fc9fe48c2a425b092b1..0f030dac3770b2b296b8d2d8af58743c5a55bdb2 100644 (file)
@@ -254,8 +254,9 @@ public class Vala.InterfaceWriter : CodeVisitor {
                }
                        
                write_string (" ");
-               if (f.name == "callback" || f.name == "flags" ||
-                   f.name == "in" || f.name == "out") {
+               if (f.name == "base" || f.name == "callback" ||
+                   f.name == "flags" || f.name == "in" ||
+                   f.name == "out") {
                        write_string ("@");
                }
                write_identifier (f.name);
index f7db01c533d73c0f544e43d19b1054f50cbeaf53..0c4ad2f9b3c3cf45bca07b4a4c1efcc0c43315fc 100644 (file)
@@ -585,8 +585,8 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                        }
                
                        if (expr.inner is MemberAccess) {
-                               var base = (MemberAccess) expr.inner;
-                               base_symbol = base.symbol_reference;
+                               var base_expr = (MemberAccess) expr.inner;
+                               base_symbol = base_expr.symbol_reference;
                                if (base_symbol.node is Namespace ||
                                    base_symbol.node is DataType) {
                                        expr.symbol_reference = base_symbol.lookup (expr.member_name);