Mercurial > projects > dang
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)