2015-06-07 16:35:04 +03:00
|
|
|
package com.annimon.ownlang.parser.ast;
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @author aNNiMON
|
|
|
|
*/
|
|
|
|
public final class ForStatement implements Statement {
|
|
|
|
|
|
|
|
private final Statement initialization;
|
|
|
|
private final Expression termination;
|
|
|
|
private final Statement increment;
|
|
|
|
private final Statement statement;
|
|
|
|
|
|
|
|
public ForStatement(Statement initialization, Expression termination, Statement increment, Statement block) {
|
|
|
|
this.initialization = initialization;
|
|
|
|
this.termination = termination;
|
|
|
|
this.increment = increment;
|
|
|
|
this.statement = block;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void execute() {
|
|
|
|
for (initialization.execute(); termination.eval().asNumber() != 0; increment.execute()) {
|
2015-06-12 21:46:13 +03:00
|
|
|
try {
|
|
|
|
statement.execute();
|
|
|
|
} catch (BreakStatement bs) {
|
|
|
|
break;
|
|
|
|
} catch (ContinueStatement cs) {
|
|
|
|
// continue;
|
|
|
|
}
|
2015-06-07 16:35:04 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "for " + initialization + ", " + termination + ", " + increment + " " + statement;
|
|
|
|
}
|
|
|
|
}
|