summaryrefslogtreecommitdiff
path: root/lexer.c
diff options
context:
space:
mode:
Diffstat (limited to 'lexer.c')
-rw-r--r--lexer.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/lexer.c b/lexer.c
index b2990c8..f734912 100644
--- a/lexer.c
+++ b/lexer.c
@@ -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])){