mirror of https://github.com/japl-lang/japl.git
Fixed a bug in the lexer
This commit is contained in:
parent
9552a1f04f
commit
b58ea99aed
|
@ -575,6 +575,19 @@ proc forStatement(self: Compiler) =
|
|||
self.loopType = NONE
|
||||
|
||||
|
||||
proc parseBreak(self: Compiler) =
|
||||
if self.loopType == NONE:
|
||||
self.parser.parseError(self.parser.previous, "'break' outside loop")
|
||||
else:
|
||||
self.parser.consume(SEMICOLON, "missing semicolon after statement")
|
||||
var jmp = self.emitJump(OP_JUMP)
|
||||
if self.parser.peek.kind != EOF:
|
||||
self.declaration()
|
||||
self.emitByte(OP_POP)
|
||||
else:
|
||||
self.emitByte(OP_RETURN)
|
||||
self.patchJump(jmp)
|
||||
|
||||
|
||||
proc parseAnd(self: Compiler, canAssign: bool) =
|
||||
var jump = self.emitJump(OP_JUMP_IF_FALSE)
|
||||
|
@ -592,17 +605,6 @@ proc parseOr(self: Compiler, canAssign: bool) =
|
|||
self.patchJump(endJump)
|
||||
|
||||
|
||||
proc parseBreak(self: Compiler) =
|
||||
if self.loopType == NONE:
|
||||
self.parser.parseError(self.parser.previous, "'break' outside loop")
|
||||
else:
|
||||
self.parser.consume(SEMICOLON, "missing semicolon after statement")
|
||||
var jmp = self.emitJump(OP_JUMP)
|
||||
self.emitByte(OP_POP)
|
||||
# self.declaration()
|
||||
self.patchJump(jmp)
|
||||
|
||||
|
||||
proc statement(self: Compiler) =
|
||||
if self.parser.match(VAR):
|
||||
self.varDeclaration()
|
||||
|
|
|
@ -150,7 +150,7 @@ proc scanToken(self: var Lexer) =
|
|||
if single in [' ', '\t', '\r']:
|
||||
return
|
||||
elif single == '\n':
|
||||
self.current = self.current + 1
|
||||
self.line += 1
|
||||
elif single in ['"', '\'']:
|
||||
self.parseString(single)
|
||||
elif single.isDigit():
|
||||
|
|
|
@ -379,7 +379,11 @@ proc interpret*(self: var VM, source: string, debug: bool = false, repl: bool =
|
|||
self.chunk = chunk
|
||||
self.ip = 0
|
||||
if len(chunk.code) > 1:
|
||||
result = self.run(debug, repl)
|
||||
try:
|
||||
result = self.run(debug, repl)
|
||||
except KeyboardInterrupt:
|
||||
self.error(newInterruptedError(""))
|
||||
return RUNTIME_ERROR
|
||||
chunk.freeChunk()
|
||||
self.freeVM()
|
||||
|
||||
|
|
Loading…
Reference in New Issue