package org.eclipse.dltk.xotcl.internal.core.parser.processors.xotcl; import org.eclipse.dltk.ast.ASTListNode; import org.eclipse.dltk.ast.ASTNode; import org.eclipse.dltk.ast.declarations.TypeDeclaration; import org.eclipse.dltk.ast.expressions.Expression; import org.eclipse.dltk.ast.references.SimpleReference; 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.xotcl.core.ast.xotcl.XOTclExInstanceVariable; import org.eclipse.dltk.xotcl.core.ast.xotcl.XOTclInstanceVariable; import org.eclipse.dltk.xotcl.core.ast.xotcl.XOTclObjectDeclaration; import org.eclipse.dltk.xotcl.core.ast.xotcl.XOTclProcCallStatement; /** * Support Object, Class, instance and object instanceof proc definitions. * * @author haiodo */ public class XOTclProcCallProcessor extends AbstractTclCommandProcessor { public XOTclProcCallProcessor() { } public ASTNode process(TclStatement statement, ITclParser parser, ASTNode parent) { Object param = this.getDetectedParameter(); if (param == null || !(param instanceof TypeDeclaration || param instanceof XOTclObjectDeclaration || param instanceof XOTclInstanceVariable || param instanceof XOTclExInstanceVariable)) { return null; } Expression nameExpr = statement.getAt(1); if (!(nameExpr instanceof SimpleReference)) { this.report(parser, "A proc name expected.", nameExpr, ProblemSeverities.Error); return null; } SimpleReference name = (SimpleReference) nameExpr; ASTListNode args = null; if (statement.getCount() > 2) { args = new ASTListNode(name.sourceEnd() + 1, statement.sourceEnd()); for (int i = 2; i < statement.getCount(); i++) { args.addNode(statement.getAt(i)); } } XOTclProcCallStatement call = new XOTclProcCallStatement(name, (ASTNode) param, args); call.setInstNameRef((SimpleReference) statement.getAt(0)); call.setStart(statement.sourceStart()); call.setEnd(statement.sourceEnd()); this.addToParent(parent, call); return call; } }