5 public class CastExpr extends Expr {
10 public Set freeVars() {
11 return expr.freeVars();
14 public CastExpr(TypeDescriptor type, Expr expr) {
19 public String name() {
21 str="(("+type.toString()+")"+expr.name()+")";
25 public boolean equals(Map remap, Expr e) {
28 else if (!(e instanceof CastExpr))
30 else return ((this.type==((CastExpr)e).type)&&expr.equals(remap,((CastExpr)e).expr));
33 public boolean usesDescriptor(Descriptor d) {
34 return expr.usesDescriptor(d);
37 public Set getRequiredDescriptors() {
38 return expr.getRequiredDescriptors();
41 public void generate(CodeWriter writer, VarDescriptor dest) {
42 VarDescriptor vd = VarDescriptor.makeNew("expr");
43 expr.generate(writer, vd);
44 writer.outputline("int " + dest.getSafeSymbol() + " = (int) " + vd.getSafeSymbol() + ";");
47 public void prettyPrint(PrettyPrinter pp) {
48 pp.output("cast(" + type.getSafeSymbol() + ", ");
53 public TypeDescriptor getType() {
57 public TypeDescriptor typecheck(SemanticAnalyzer sa) {
58 TypeDescriptor td = expr.typecheck(sa);
64 if (!type.isSubtypeOf(td)) {
65 sa.getErrorReporter().report(null, "Expression type '" + td.getSymbol() + "' is not a parent of the cast type '" + type.getSymbol() + "'");