Skip to content

Commit ee36e9d

Browse files
committed
Fixed while loop bug
1 parent f08bb63 commit ee36e9d

File tree

2 files changed

+40
-6
lines changed

2 files changed

+40
-6
lines changed

evaluator/evaluator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ func evalWhileExpression(we *ast.WhileExpression, env *object.Environment) objec
565565
if isError(evaluated) {
566566
return evaluated
567567
}
568-
if evaluated.Type() == object.BREAK_OBJ {
568+
if evaluated != nil && evaluated.Type() == object.BREAK_OBJ {
569569
return evaluated
570570
}
571571
evalWhileExpression(we, env)

lexer/lexer.go

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -223,15 +223,33 @@ func (l *Lexer) skipMultiLineComment() {
223223
}
224224

225225
func (l *Lexer) readString() string {
226-
position := l.position + 1
226+
var str string
227227
for {
228228
l.readChar()
229229
if l.ch == '"' || l.ch == 0 {
230230
break
231+
} else if l.ch == '\\' {
232+
switch l.peekChar() {
233+
case 'n':
234+
l.readChar()
235+
l.ch = '\n'
236+
case 'r':
237+
l.readChar()
238+
l.ch = '\r'
239+
case 't':
240+
l.readChar()
241+
l.ch = '\t'
242+
case '"':
243+
l.readChar()
244+
l.ch = '"'
245+
case '\\':
246+
l.readChar()
247+
l.ch = '\\'
248+
}
231249
}
250+
str += string(l.ch)
232251
}
233-
234-
return l.input[position:l.position]
252+
return str
235253
}
236254

237255
func (l *Lexer) readSingleQuoteString() string {
@@ -240,8 +258,24 @@ func (l *Lexer) readSingleQuoteString() string {
240258
l.readChar()
241259
if l.ch == '\'' || l.ch == 0 {
242260
break
243-
} else if l.ch == '\\' && l.peekChar() == '\'' {
244-
l.readChar()
261+
} else if l.ch == '\\' {
262+
switch l.peekChar() {
263+
case 'n':
264+
l.readChar()
265+
l.ch = '\n'
266+
case 'r':
267+
l.readChar()
268+
l.ch = '\r'
269+
case 't':
270+
l.readChar()
271+
l.ch = '\t'
272+
case '"':
273+
l.readChar()
274+
l.ch = '"'
275+
case '\\':
276+
l.readChar()
277+
l.ch = '\\'
278+
}
245279
}
246280
str += string(l.ch)
247281
}

0 commit comments

Comments
 (0)