Differences From Artifact [4856c979362ef435]:
- File        
polemy/parse.d
- 2010-11-07 12:46:23 - part of checkin [3f5dc76a75] on branch trunk - Added funcall expression parser and function literal parser. (user: kinaba) [annotate]
 
To Artifact [1d6de9cb69bbf7d4]:
- File        
polemy/parse.d
- 2010-11-07 14:34:29 - part of checkin [0569f7b8c2] on branch trunk - - Added function literal evaluator (i.e., closure). - Workaround for d2stacktrace's infinite-loop bug. (when std.demangle.demangle use exception inside it, it will go into an infinite loop. to avoid this, I choose to unset TraceHandler during stacktrace generation. This is far from the complete solution, but at least it should work as expected under single-thread environment...) (user: kinaba) [annotate]
 
   188    188      return e;
   189    189     }
   190    190   
   191    191     if( tryEat("fun") )
   192    192     {
   193    193      eat("(", "after fun");
   194    194      string[] params;
   195         -   for(;;)
          195  +   while(!tryEat(")"))
   196    196      {
   197    197       if( lex.empty ) {
   198    198        auto e = ParserException.create(lex,"Unexpected EOF");
   199    199        throw e;
   200    200       }
   201    201       if( lex.front.kind != Token.Kind.identifier ) {
   202    202        auto e = ParserException.create(lex,"Identifier Expected for parameters");
................................................................................
   306    306     new IntLiteralExpression(null, BigInt(1)),
   307    307     new FuncallExpression(null,
   308    308      new FunLiteralExpression(null, ["abc"], [
   309    309      ]),
   310    310      new IntLiteralExpression(null, BigInt(4))
   311    311      ))));
   312    312   }
          313  +unittest
          314  +{
          315  + auto p = parserFromString(`var x = 1; var f = fun(){x=x+1;}; f(); f(); x;`);
          316  + Program prog = p.parseProgram();
          317  +}