5 public class CastExpr extends Expr {
10 public Set freeVars() {
11 return expr.freeVars();
14 public void findmatch(Descriptor d, Set s) {
18 public CastExpr(TypeDescriptor type, Expr expr) {
23 public String name() {
25 str="(("+type.toString()+")"+expr.name()+")";
29 public boolean equals(Map remap, Expr e) {
32 else if (!(e instanceof CastExpr))
34 else return ((this.type==((CastExpr)e).type)&&expr.equals(remap,((CastExpr)e).expr));
37 public boolean usesDescriptor(Descriptor d) {
38 return expr.usesDescriptor(d);
41 public Set getRequiredDescriptors() {
42 return expr.getRequiredDescriptors();
45 public void generate(CodeWriter writer, VarDescriptor dest) {
46 VarDescriptor vd = VarDescriptor.makeNew("expr");
47 expr.generate(writer, vd);
48 writer.outputline("int " + dest.getSafeSymbol() + " = (int) " + vd.getSafeSymbol() + ";");
51 public void prettyPrint(PrettyPrinter pp) {
52 pp.output("cast(" + type.getSafeSymbol() + ", ");
57 public TypeDescriptor getType() {
61 public TypeDescriptor typecheck(SemanticAnalyzer sa) {
62 TypeDescriptor td = expr.typecheck(sa);
68 if (!type.isSubtypeOf(td)) {
69 sa.getErrorReporter().report(null, "Expression type '" + td.getSymbol() + "' is not a parent of the cast type '" + type.getSymbol() + "'");