1
0
mirror of https://github.com/robertkrimen/otto synced 2025-09-28 18:45:22 +08:00

Allow empty test/update in for statements

Fix #1
This commit is contained in:
Robert Krimen 2012-10-14 10:42:06 -07:00
parent 7dfbf6ab13
commit 89e26f042e
3 changed files with 39 additions and 7 deletions

View File

@ -150,17 +150,21 @@ func (self *_runtime) evaluateFor(node *_forNode) Value {
return self.breakEvaluate(_labelSet, func() Value {
result := emptyValue()
for {
testResult := self.evaluate(test)
testResultValue := self.GetValue(testResult)
if (toBoolean(testResultValue) == false) {
break
if test != nil {
testResult := self.evaluate(test)
testResultValue := self.GetValue(testResult)
if (toBoolean(testResultValue) == false) {
break
}
}
value, _ := self.continueEvaluate(body, _labelSet)
if !value.isEmpty() {
result = value
}
updateResult := self.evaluate(update)
self.GetValue(updateResult) // Side-effect trigger
if update != nil {
updateResult := self.evaluate(update)
self.GetValue(updateResult) // Side-effect trigger
}
}
return result
})

View File

@ -773,6 +773,34 @@ func TestFor(t *testing.T) {
}
`)
test("result", "9")
test(`
abc = 0
for (;;) {
abc += 1
if (abc == 3)
break
}
abc
`, "3")
test(`
for (abc = 0; ;) {
abc += 1
if (abc == 3)
break
}
abc
`, "3")
test(`
for (abc = 0; ; abc+=1) {
abc += 1
if (abc == 3)
break
}
abc
`, "3")
}
func TestArguments(t *testing.T) {
@ -1844,3 +1872,4 @@ func TestAPI(t *testing.T) {
result, _ = object.Value().Call(def, 3)
Is(result, "30")
}

View File

@ -637,7 +637,6 @@ func TestParseSuccess(t *testing.T) {
---
{ @ xyzzy { <throw> { <new> TypeError "Nothing happens." } } }
`)
}
func TestParseFailure(t *testing.T) {