slcom/slangc/model/clauses/Expressions.sauce

107 lines
2.5 KiB
Plaintext
Raw Permalink Normal View History

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<ExpressionModel> exprs = new List<ExpressionModel>();
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);
}
}