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.references.SimpleReference;
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.core.AbstractTclCommandProcessor;
import org.eclipse.dltk.tcl.core.ITclParser;
import org.eclipse.dltk.tcl.core.TclParseUtil;
import org.eclipse.dltk.tcl.core.ast.TclNamespaceVariable;
public class TclNamespaceVariableProcessor extends AbstractTclCommandProcessor {
public TclNamespaceVariableProcessor() {
}
public ASTNode process(TclStatement statement, ITclParser parser,
ASTNode parent) {
int statementsCount = statement.getCount();
if (statementsCount < 2) {
this.report(parser,
Messages.TclProcProcessor_Wrong_Number_of_Arguments,
statement, ProblemSeverities.Error);
return null;
}
ASTNode ret = null;
for (int i = 1; i < statementsCount; i += 2) {
Expression at = statement.getAt(i);
Expression variableName = at;
if (variableName == null) {
throw new RuntimeException("empty variable name");
}
SimpleReference variable = TclParseUtil.makeVariable(variableName);
if (variable != null) {
TclNamespaceVariable var = new TclNamespaceVariable(variable,
at.sourceStart(), at.sourceEnd());
if (ret == null) {
ret = var;
} else {
if (!(ret instanceof Block)) {
Block list = new Block();
list.addStatement(ret);
list.setStart(ret.sourceStart());
list.setEnd(ret.sourceEnd());
ret = list;
}
((Block) ret).addStatement(var);
((Block) ret).setEnd(var.sourceEnd());
}
}
}
if (ret != null) {
addToParent(parent, ret);
}
return ret;
}
}