Differences From Artifact [5f90478aa23ae726]:
- File        
polemy/parse.d
- 2010-11-09 06:29:58 - part of checkin [77abaf5f42] on branch trunk - Fixed broken "lambda" sign in parse.d (user: kinaba) [annotate]
 
 
To Artifact [e14df84da140adf3]:
- File        
polemy/parse.d
- 2010-11-09 07:27:21 - part of checkin [0f02103885] on branch trunk - let, var, def became layer-neutral definition (not @val). scope splitting (let x=1;let x=2;let y=(let x=3);x is 1) is correctly implemented now. (user: kinaba) [annotate]
 
 
   64                  if( tryEat("let") || tryEat("var") || tryEat("def") || tryEat("@      64                  if( tryEat("let") || tryEat("var") || tryEat("def") || tryEat("@
   65                  {                                                                     65                  {
   66                          if( kwd == "@" )                                              66                          if( kwd == "@" )
   67                                  kwd ~= eatId("after @");                              67                                  kwd ~= eatId("after @");
   68                          immutable LexPosition varpos = (lex.empty ? null : lex.f      68                          immutable LexPosition varpos = (lex.empty ? null : lex.f
   69                          string var = eatId("after "~kwd);                             69                          string var = eatId("after "~kwd);
   70                          eat("=", "after "~kwd);                                       70                          eat("=", "after "~kwd);
   71                          kwd = (kwd[0]=='@' ? kwd : "@val");                      |    71                          kwd = (kwd[0]=='@' ? kwd : ""); // "let, var, def ==> ne
   72                          auto e = E(0);                                                72                          auto e = E(0);
   73                          if( tryEat(";") && !lex.empty && (lex.front.quoted || (l      73                          if( tryEat(";") && !lex.empty && (lex.front.quoted || (l
   74                                  return new LetExpression(pos, var, kwd, e, Body(      74                                  return new LetExpression(pos, var, kwd, e, Body(
   75                          else                                                          75                          else
   76                                  return new LetExpression(pos, var, kwd, e, new V      76                                  return new LetExpression(pos, var, kwd, e, new V
   77                  }                                                                     77                  }
   78                  else                                                                  78                  else
................................................................................................................................................................................
  259          assert_eq(parseString(`"foo"`), strl("foo"));                                259          assert_eq(parseString(`"foo"`), strl("foo"));
  260          assert_eq(parseString(`fun(){1}`), fun([],intl(1)));                         260          assert_eq(parseString(`fun(){1}`), fun([],intl(1)));
  261          assert_eq(parseString(`fun(x){1}`), fun(["x"],intl(1)));                     261          assert_eq(parseString(`fun(x){1}`), fun(["x"],intl(1)));
  262          assert_eq(parseString("\u03BB(){1}"), fun([],intl(1)));                      262          assert_eq(parseString("\u03BB(){1}"), fun([],intl(1)));
  263          assert_eq(parseString("\u03BB(x){1}"), fun(["x"],intl(1)));                  263          assert_eq(parseString("\u03BB(x){1}"), fun(["x"],intl(1)));
  264          assert_eq(parseString(`1;2`), let("_","@val",intl(1),intl(2)));              264          assert_eq(parseString(`1;2`), let("_","@val",intl(1),intl(2)));
  265          assert_eq(parseString(`1;2;`), let("_","@val",intl(1),intl(2)));             265          assert_eq(parseString(`1;2;`), let("_","@val",intl(1),intl(2)));
  266          assert_eq(parseString(`let x=1;2`), let("x","@val",intl(1),intl(2)));    |   266          assert_eq(parseString(`let x=1;2`), let("x","",intl(1),intl(2)));
  267          assert_eq(parseString(`var x=1;2;`), let("x","@val",intl(1),intl(2)));   |   267          assert_eq(parseString(`var x=1;2;`), let("x","",intl(1),intl(2)));
  268          assert_eq(parseString(`def x=1`), let("x","@val",intl(1),var("x")));     |   268          assert_eq(parseString(`def x=1`), let("x","",intl(1),var("x")));
  269          assert_eq(parseString(`@val x=1;`), let("x","@val",intl(1),var("x")));       269          assert_eq(parseString(`@val x=1;`), let("x","@val",intl(1),var("x")));
  270          assert_eq(parseString(`@typ x="#int";`), let("x","@typ",strl("#int"),var     270          assert_eq(parseString(`@typ x="#int";`), let("x","@typ",strl("#int"),var
  271          assert_eq(parseString(`f(1,2)`), call(var("f"),intl(1),intl(2)));            271          assert_eq(parseString(`f(1,2)`), call(var("f"),intl(1),intl(2)));
  272          assert_eq(parseString(`if(1){2}`), call(var("if"),intl(1),fun([],intl(2)     272          assert_eq(parseString(`if(1){2}`), call(var("if"),intl(1),fun([],intl(2)
  273          assert_eq(parseString(`if(1){2}else{3}`), call(var("if"),intl(1),fun([],     273          assert_eq(parseString(`if(1){2}else{3}`), call(var("if"),intl(1),fun([],
  274          assert_eq(parseString(`if(1){}else{3}()()`),                                 274          assert_eq(parseString(`if(1){}else{3}()()`),
  275                  call(call(call(var("if"),intl(1),fun([],intl(178)),fun([],intl(3     275                  call(call(call(var("if"),intl(1),fun([],intl(178)),fun([],intl(3
................................................................................................................................................................................
  279          assert_eq(parseString(`1*2+3`), call(var("+"),call(var("*"),intl(1),intl     279          assert_eq(parseString(`1*2+3`), call(var("+"),call(var("*"),intl(1),intl
  280                                                                                       280  
  281          assert_eq(parseString(`                                                      281          assert_eq(parseString(`
  282                  let x = 100; #comment                                                282                  let x = 100; #comment
  283                  let y = 200; #comment!!!!!                                           283                  let y = 200; #comment!!!!!
  284                          x+y                                                          284                          x+y
  285          `),                                                                          285          `),
  286                  let("x", "@val", intl(100), let("y", "@val", intl(200), call(var |   286                  let("x", "", intl(100), let("y", "", intl(200), call(var("+"), v
  287          );                                                                           287          );
  288                                                                                       288  
  289          assert_eq(parseString(`                                                      289          assert_eq(parseString(`
  290                  var fac = fun(x){ if(x <= 1) {1} else {x*fac(x-1)} };                290                  var fac = fun(x){ if(x <= 1) {1} else {x*fac(x-1)} };
  291                  fac(10)                                                              291                  fac(10)
  292          `),                                                                          292          `),
  293                  let("fac", "@val", fun(["x"],                                    |   293                  let("fac", "", fun(["x"],
  294                          call(var("if"),                                              294                          call(var("if"),
  295                                  call(var("<="), var("x"), intl(1)),                  295                                  call(var("<="), var("x"), intl(1)),
  296                                  fun([], intl(1)),                                    296                                  fun([], intl(1)),
  297                                  fun([], call(var("*"), var("x"), call(var("fac")     297                                  fun([], call(var("*"), var("x"), call(var("fac")
  298                          )),                                                          298                          )),
  299                          call(var("fac"),intl(10))                                    299                          call(var("fac"),intl(10))
  300                  )                                                                    300                  )