public Expr createUnboxed(Position pos, Expr orig, TypeSystem typeSystem, Context context) throws SemanticException {
public Expr createUnboxed(Position pos, Expr orig, Type toType, TypeSystem typeSystem, Context context) throws SemanticException {
    public Expr createUnboxed(Position pos, Expr orig, TypeSystem typeSystem, Context context) throws SemanticException {        JL5TypeSystem ts = (JL5TypeSystem)typeSystem;        String mName = null;        Type type = null;        if (ts.equals(orig.type(), ts.IntegerWrapper())){            mName = "intValue";            type = ts.Int();        }        else if (ts.equals(orig.type(), ts.ShortWrapper())){            mName = "shortValue";            type = ts.Short();        }        else if (ts.equals(orig.type(), ts.ByteWrapper())){            mName = "byteValue";            type =ts.Byte();        }        else if (ts.equals(orig.type(), ts.CharacterWrapper())){            mName = "charValue";            type = ts.Char();        }        else if (ts.equals(orig.type(), ts.BooleanWrapper())){            mName = "booleanValue";            type = ts.Boolean();        }        else if (ts.equals(orig.type(), ts.LongWrapper())){            mName = "longValue";            type = ts.Long();        }        else if (ts.equals(orig.type(), ts.FloatWrapper())){            mName = "floatValue";            type = ts.Float();        }        else if (ts.equals(orig.type(), ts.DoubleWrapper())){            mName = "doubleValue";            type = ts.Double();        }        else {            return orig;        }        JL5Call node = JL5Call(pos, orig, mName, new ArrayList(), new ArrayList());        node = (JL5Call)node.type(type);        System.out.println("unboxing expr type: "+node.type());        return node.methodInstance(ts.findMethod(orig.type().toReference(), mName, new ArrayList(), context.currentClass()));    }