package slangc.model.clauses; import slang.data.List; import slangc.api.Reporter; import slangc.model.ExpressionModel; import slangc.model.ExpressionOwner; import slangc.model.InnerTypeScope; import slangc.model.MemberModel; import slangc.model.StatementOwner; import slangc.model.TypeModel; import slangc.parser.Branch; import slangc.parser.Node; import slangc.parser.NodeType; public class Expressions extends ExpressionsOrVariables implements ExpressionOwner { private List exprs = new List(); public Expressions(ExpressionOwner owner, Branch source) { super(owner, source); for (int i = 0; i < source.countSubnodes(); i++) { Node n = source.getSubnode(i); if (n.getNodeType() != NodeType.COMMA) { exprs.append(ExpressionModel.construct(this, n)); } } } @Override public void dump(Reporter reporter, String indent, String incr) { reporter.note("DUMP", indent + "> Expressions:"); // do not recurse: type.dump(reporter, indent + incr, incr); for (int i = 0; i < exprs.count(); i++) { exprs.get(i).dump(reporter, indent + incr, incr); } } @Override public int resolveExpressions() { int nresolved = 0; for (int i = 0; i < exprs.count(); i++) { nresolved += exprs.get(i).resolveExpressions(); } return nresolved; } //@Override public TypeModel getExpectedResult(ExpressionModel e) { return getOwner().getExpectedResult(e); } //@Override public InnerTypeScope getTypeScope() { return getOwner().getTypeScope(); } //@Override public TypeModel resolveType(Node subnode) { return getOwner().resolveType(subnode); } //@Override public MemberModel getMethodOrField() { return getOwner().getMethodOrField(); } @Override public ExpressionOwner getOwner() { // TODO Auto-generated method stub return (ExpressionOwner) super.getOwner(); } //@Override public ExpressionModel[] getSubexpressions() { ExpressionModel[] result = new ExpressionModel[exprs.count()]; for (int i = 0; i < result.length; i++) { result[i] = exprs.get(i); } return result; } public String resultString() { String r = "("; for (int i = 0; i < exprs.count(); i++) { if (i != 0) { r += ","; } r += exprs.get(i).getResult(); } return r + ")"; } public int countExpressions() { return exprs.count(); } public ExpressionModel getExpression(int i) { return exprs.get(i); } }