SpiderScript - A day of debugging and improvements
[tpg/acess2.git] / Usermode / Libraries / libspiderscript.so_src / parse.c
index f32f876..6e1696e 100644 (file)
@@ -201,7 +201,6 @@ tAST_Node *Parse_DoBlockLine(tParser *Parser)
        
        // Return from a method
        case TOK_RWD_RETURN:
-               //printf("return\n");
                GetToken(Parser);
                ret = AST_NewUniOp(Parser, NODETYPE_RETURN, Parse_DoExpr0(Parser));
                break;
@@ -233,11 +232,13 @@ tAST_Node *Parse_DoBlockLine(tParser *Parser)
                        init = Parse_DoExpr0(Parser);
                
                SyntaxAssert(Parser, GetToken(Parser), TOK_SEMICOLON);
+               
                if(LookAhead(Parser) != TOK_SEMICOLON)
                        cond = Parse_DoExpr0(Parser);
                
                SyntaxAssert(Parser, GetToken(Parser), TOK_SEMICOLON);
-               if(LookAhead(Parser) != TOK_SEMICOLON)
+               
+               if(LookAhead(Parser) != TOK_PAREN_CLOSE)
                        inc = Parse_DoExpr0(Parser);
                
                SyntaxAssert(Parser, GetToken(Parser), TOK_PAREN_CLOSE);
@@ -321,16 +322,22 @@ tAST_Node *Parse_DoExpr0(tParser *Parser)
                GetToken(Parser);               // Eat Token
                ret = AST_NewAssign(Parser, NODETYPE_NOP, ret, Parse_DoExpr0(Parser));
                break;
-       #if 0
-       case TOK_DIV_EQU:
+       case TOK_ASSIGN_DIV:
                GetToken(Parser);               // Eat Token
                ret = AST_NewAssign(Parser, NODETYPE_DIVIDE, ret, Parse_DoExpr0(Parser));
                break;
-       case TOK_MULT_EQU:
+       case TOK_ASSIGN_MUL:
                GetToken(Parser);               // Eat Token
                ret = AST_NewAssign(Parser, NODETYPE_MULTIPLY, ret, Parse_DoExpr0(Parser));
                break;
-       #endif
+       case TOK_ASSIGN_PLUS:
+               GetToken(Parser);               // Eat Token
+               ret = AST_NewAssign(Parser, NODETYPE_ADD, ret, Parse_DoExpr0(Parser));
+               break;
+       case TOK_ASSIGN_MINUS:
+               GetToken(Parser);               // Eat Token
+               ret = AST_NewAssign(Parser, NODETYPE_SUBTRACT, ret, Parse_DoExpr0(Parser));
+               break;
        default:
                #if DEBUG >= 2
                printf("Parse_DoExpr0: Parser->Token = %i\n", Parser->Token);
@@ -662,11 +669,11 @@ tAST_Node *Parse_GetVariable(tParser *Parser)
 }
 
 /**
- * \brief Get an identifier (constand or function call)
+ * \brief Get an identifier (constant or function call)
  */
 tAST_Node *Parse_GetIdent(tParser *Parser)
 {
-       tAST_Node       *ret;
+       tAST_Node       *ret = NULL;
        char    *name;
        SyntaxAssert(Parser, GetToken(Parser), TOK_IDENT );
        name = strndup( Parser->TokenStr, Parser->TokenLen );
@@ -674,7 +681,9 @@ tAST_Node *Parse_GetIdent(tParser *Parser)
        #if 0
        while( GetToken(Parser) == TOK_SCOPE )
        {
-               ret = AST_New
+               ret = AST_NewScopeDereference( Parser, ret, name );
+               SyntaxAssert(Parser, GetToken(Parser), TOK_IDENT );
+               name = strndup( Parser->TokenStr, Parser->TokenLen );
        }
        PutBack(Parser);
        #endif
@@ -703,7 +712,7 @@ tAST_Node *Parse_GetIdent(tParser *Parser)
                }
        }
        else {
-               // Runtime Constant
+               // Runtime Constant / Variable (When implemented)
                #if DEBUG >= 2
                printf("Parse_GetIdent: Referencing '%s'\n", name);
                #endif

UCC git Repository :: git.ucc.asn.au