package x10.types.constraints;
import java.util.List;
import polyglot.ast.IntLit;
import polyglot.types.FieldDef;
import polyglot.types.LocalDef;
import polyglot.types.MethodDef;
import polyglot.types.Type;
import x10.constraint.XConstraintSystem;
import x10.constraint.XLit;
import x10.constraint.XTerm;
import x10.constraint.XVar;
import x10.types.X10LocalDef;
/**
* Factory interface that provides methods to create various XTerms that
* have type information.
* @author lshadare
*
*/
public interface CConstraintSystem extends XConstraintSystem {
public CSelf makeSelf();
public CThis makeThis();
public CThis makeThis(Type t);
public XVar makeQualifiedThis(Type qualifier, Type base);
public XVar makeQualifiedVar(Type qualifier, XVar var);
public CField makeField(XVar var, MethodDef mi);
public CField makeField(XVar var, FieldDef mi);
public CLocal makeLocal(X10LocalDef ld);
public CLocal makeLocal(X10LocalDef ld, String s);
public CAtom makeAtom(MethodDef md, XTerm... t );
public CAtom makeAtom(MethodDef md, MethodDef mdAsExpr, XTerm... t );
public CAtom makeAtom(MethodDef md, List<XTerm> t );
public CAtom makeAtom(FieldDef md, XTerm... t );
public CAtom makeAtom(FieldDef md, FieldDef mdAsExpr, XTerm... t );
public CAtom makeAtom(FieldDef md, List<XTerm> t );
public XLit makeLit(Object val, Type type);
public XLit makeZero(Type type);
public XTypeLit makeTypeLit(Type type);
public IntLit.Kind getIntLitKind(Type type);
public CConstraint makeCConstraint();
public CConstraint makeCConstraint(XVar self);
public XTerm makeOpaque(Object op, XTerm target, List<XTerm> args);
}