changeset 84:cc05c041e6a3 new_gen

Assign stuff to arrays.
author Anders Johnsen <skabet@gmail.com>
date Fri, 02 May 2008 20:17:22 +0200
parents 9e90694f5da0
children 9375bd975730
files parser/Parser.d
diffstat 1 files changed, 44 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/parser/Parser.d	Fri May 02 19:54:22 2008 +0200
+++ b/parser/Parser.d	Fri May 02 20:17:22 2008 +0200
@@ -183,7 +183,15 @@
                 if (iden.isBasicType() || iden.isIdentifier())
                 {
                     if ( n.type == Tok.Star || n.type == Tok.OpenBracket)
-                        return action.actOnDeclStmt(parseVarDecl());
+                    {
+                        int len = peekParseType;
+                        if(lexer.peek(len).type == Tok.Identifier || len == 0)
+                            return action.actOnDeclStmt(parseVarDecl());
+
+                        Exp exp = parseExpression();
+                        require(Tok.Seperator);
+                        return action.actOnExprStmt(exp);
+                    }
                         
                     if ( n.isIdentifier())
                         return action.actOnDeclStmt(parseVarDecl());
@@ -346,6 +354,41 @@
         return currentType;
     }
 
+    int peekParseType()
+    {
+        int i;
+        Token type = lexer.peek(i);
+
+        Id currentType;
+
+        if ( !(type.isBasicType || type.type == Tok.Identifier) )
+            return i;
+
+        currentType = Id(type);
+        type = lexer.peek(++i);
+
+        while(type.type == Tok.Star || type.type == Tok.OpenBracket)
+        {
+            if(type.type == Tok.Star)
+            {
+                i++;
+            }
+            else
+            {
+                if(lexer.peek(i++).type != Tok.OpenBracket)
+                    return 0;
+                if(lexer.peek(i++).type != Tok.Integer)
+                    return 0;
+                if(lexer.peek(i++).type != Tok.CloseBracket)
+                    return 0;
+                
+            }
+            type = lexer.peek(i);
+        }
+
+        return i;
+    }
+
 private:
     // -- Expression parsing -- //
     Exp parsePostfixExp(Exp target)