in vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/statements/loops/ForLoop.kt [32:87]
override fun execute(editor: VimEditor, context: ExecutionContext): ExecutionResult {
injector.statisticsService.setIfLoopUsed(true)
var result: ExecutionResult = ExecutionResult.Success
body.forEach { it.vimContext = this }
var iterableValue = iterable.evaluate(editor, context, this)
if (iterableValue is VimString) {
for (i in iterableValue.value) {
injector.variableService.storeVariable(variable, VimString(i.toString()), editor, context, this)
for (statement in body) {
if (result is ExecutionResult.Success) {
result = statement.execute(editor, context)
} else {
break
}
}
if (result is ExecutionResult.Break) {
result = ExecutionResult.Success
break
} else if (result is ExecutionResult.Continue) {
result = ExecutionResult.Success
continue
} else if (result is ExecutionResult.Error) {
break
}
}
} else if (iterableValue is VimList) {
var index = 0
while (index < (iterableValue as VimList).values.size) {
injector.variableService.storeVariable(variable, iterableValue.values[index], editor, context, this)
for (statement in body) {
if (result is ExecutionResult.Success) {
result = statement.execute(editor, context)
} else {
break
}
}
if (result is ExecutionResult.Break) {
result = ExecutionResult.Success
break
} else if (result is ExecutionResult.Continue) {
result = ExecutionResult.Success
continue
} else if (result is ExecutionResult.Error) {
break
}
index += 1
iterableValue = iterable.evaluate(editor, context, this) as VimList
}
} else if (iterableValue is VimBlob) {
TODO("Not yet implemented")
} else {
throw exExceptionMessage("E1098")
}
return result
}