package org.eclipse.dltk.tcl.internal.core.parser.processors.tcl;
import org.eclipse.dltk.ast.ASTNode;
import org.eclipse.dltk.ast.expressions.Expression;
import org.eclipse.dltk.ast.statements.Block;
import org.eclipse.dltk.compiler.problem.ProblemSeverities;
import org.eclipse.dltk.tcl.ast.TclStatement;
import org.eclipse.dltk.tcl.ast.expressions.TclBlockExpression;
import org.eclipse.dltk.tcl.core.AbstractTclCommandProcessor;
import org.eclipse.dltk.tcl.core.ITclParser;
import org.eclipse.dltk.tcl.core.ast.TclWhileStatement;
public class TclWhileCommandProcessor extends AbstractTclCommandProcessor {
public ASTNode process(TclStatement statement, ITclParser parser,
ASTNode parent) {
TclWhileStatement foreach = new TclWhileStatement(statement
.sourceStart(), statement.sourceEnd());
this.addToParent(parent, foreach);
if (statement.getCount() != 3) {
this.report(parser, "Syntax error: wrong number of arguments",
statement, ProblemSeverities.Error);
} else {
Expression test = statement.getAt(1);
foreach.setTest(test);
Expression procCode = statement.getAt(2);
if (procCode instanceof TclBlockExpression) {
Block block = new Block(procCode.sourceStart(), procCode
.sourceEnd());
String content = ((TclBlockExpression) procCode).getBlock();
if (content.startsWith("{") && content.endsWith("}")) {
content = content.substring(1, content.length() - 1);
}
foreach.acceptBlock(block);
parser.parse(content, procCode.sourceStart() + 1
- parser.getStartPos(), block);
}
}
return foreach;
}
}