diff options
Diffstat (limited to 'lexer.c')
-rw-r--r-- | lexer.c | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -7,7 +7,7 @@ Rune primhybridnames[] = L"/\⌿⍀"; Statement * -lexline(Rune *line) +lexline(Rune *line, int toplevel) { int offset = 0; int len = runestrlen(line); @@ -25,7 +25,7 @@ lexline(Rune *line) }else if(runestrchr(L"←⋄⍝⍬", line[offset])){ switch(line[offset]){ case L'←': stmt->toks[stmt->ntoks].tag = ArrowTag; break; - case L'⋄': stmt->next = lexline(&line[offset+1]); goto end; + case L'⋄': stmt->next = lexline(&line[offset+1], toplevel); goto end; case L'⍝': goto end; case L'⍬': stmt->toks[stmt->ntoks].tag = ArrayTag; @@ -34,7 +34,7 @@ lexline(Rune *line) break; } offset++; - }else if(line[offset] == ':'){ + }else if(!toplevel && line[offset] == ':'){ Rune buf[MAX_LINE_LENGTH]; Rune *p = buf; offset++; @@ -44,7 +44,7 @@ lexline(Rune *line) offset++; } *p = 0; - stmt->guard = lexline(buf); + stmt->guard = lexline(buf, toplevel); stmt->ntoks--; }else if(line[offset] == '{'){ Rune buf[MAX_LINE_LENGTH]; @@ -81,7 +81,7 @@ lexline(Rune *line) *p = 0; offset++; stmt->toks[stmt->ntoks].tag = LParTag; - stmt->toks[stmt->ntoks].stmt = *lexline(buf); + stmt->toks[stmt->ntoks].stmt = *lexline(buf, toplevel); stmt->ntoks++; stmt->toks[stmt->ntoks].tag = RParTag; }else if(p = runestrchr(primfuncnames, line[offset])){ |