public static Expr instanceOf(Expr target, ValueType className) { InstanceOfExpr expr = new InstanceOfExpr(); expr.setExpr(target); expr.setType(className); return expr; }
@Override public void visit(InstanceOfExpr expr) { pushLocation(expr.getLocation()); try { expr.getExpr().acceptVisitor(this); expr.setExpr(resultExpr); resultExpr = expr; } finally { popLocation(); } }
@Override public void visit(InstanceOfExpr expr) { try { if (expr.getLocation() != null) { pushLocation(expr.getLocation()); if (expr.getType() instanceof ValueType.Object) { String clsName = ((ValueType.Object) expr.getType()).getClassName(); ClassReader cls = classSource.get(clsName); if (cls != null && !cls.hasModifier(ElementModifier.INTERFACE)) { expr.getExpr().acceptVisitor(this); writer.append(" instanceof ").appendClass(clsName); if (needsParentheses) { writer.append(')'); if (expr.getLocation() != null) { popLocation(); expr.getExpr().acceptVisitor(this); writer.append(",").ws().append(context.typeToClsString(expr.getType())).append(")"); if (expr.getLocation() != null) { popLocation();
@Override public void visit(InstanceOfExpr expr) { expr.getExpr().acceptVisitor(this); }
@Override protected Expr clone(Map<Expr, Expr> cache) { InstanceOfExpr copy = new InstanceOfExpr(); copy.type = type; copy.expr = expr != null ? expr.clone() : null; return copy; } }
@Override public void visit(InstanceOfExpr expr) { super.visit(expr); visitType(expr.getType()); if (expr.getType() instanceof ValueType.Object) { String clsName = ((ValueType.Object) expr.getType()).getClassName(); ClassReader cls = classSource.get(clsName); if (cls == null || cls.hasModifier(ElementModifier.INTERFACE)) { consumer.consumeFunction("$rt_isInstance"); } } else { consumer.consumeFunction("$rt_isInstance"); } } }
@Override public void visit(InstanceOfExpr expr) { classGenerator.getClassPointer(expr.getType()); accept(expr.getExpr()); WasmBlock block = new WasmBlock(false); block.setType(WasmType.INT32); block.setLocation(expr.getLocation()); WasmLocal objectVar = getTemporary(WasmType.INT32); block.getBody().add(new WasmSetLocal(objectVar, result)); WasmBranch ifNull = new WasmBranch(new WasmIntBinary(WasmIntType.INT32, WasmIntBinaryOperation.EQ, new WasmGetLocal(objectVar), new WasmInt32Constant(0)), block); ifNull.setResult(new WasmInt32Constant(0)); block.getBody().add(new WasmDrop(ifNull)); WasmCall supertypeCall = new WasmCall(context.names.forSupertypeFunction(expr.getType())); WasmExpression classRef = new WasmLoadInt32(4, result, WasmInt32Subtype.INT32); classRef = new WasmIntBinary(WasmIntType.INT32, WasmIntBinaryOperation.SHL, classRef, new WasmInt32Constant(3)); supertypeCall.getArguments().add(classRef); block.getBody().add(supertypeCall); result = block; }
private boolean isSideEffectFree(Expr expr) { if (expr == null) { return true; } if (expr instanceof VariableExpr || expr instanceof ConstantExpr) { return true; } if (expr instanceof BinaryExpr) { BinaryExpr binary = (BinaryExpr) expr; return isSideEffectFree(binary.getFirstOperand()) && isSideEffectFree(binary.getSecondOperand()); } if (expr instanceof UnaryExpr) { return isSideEffectFree(((UnaryExpr) expr).getOperand()); } if (expr instanceof InstanceOfExpr) { return isSideEffectFree(((InstanceOfExpr) expr).getExpr()); } if (expr instanceof PrimitiveCastExpr) { return isSideEffectFree(((PrimitiveCastExpr) expr).getValue()); } if (expr instanceof NewExpr) { return true; } return false; }
@Override protected Expr clone(Map<Expr, Expr> cache) { InstanceOfExpr copy = new InstanceOfExpr(); copy.type = type; copy.expr = expr != null ? expr.clone() : null; return copy; } }
@Override public void visit(InstanceOfExpr expr) { super.visit(expr); visitType(expr.getType()); if (expr.getType() instanceof ValueType.Object) { String clsName = ((ValueType.Object) expr.getType()).getClassName(); ClassReader cls = classSource.get(clsName); if (cls == null || cls.hasModifier(ElementModifier.INTERFACE)) { consumer.consumeFunction("$rt_isInstance"); } } else { consumer.consumeFunction("$rt_isInstance"); } } }
InstanceOfExpr expr = new InstanceOfExpr(); expr.setExpr(readExpr(input)); expr.setType(ValueType.parse(symbolTable.at(input.readInt()))); return expr;
@Override public void visit(InstanceOfExpr expr) { try { if (expr.getLocation() != null) { pushLocation(expr.getLocation()); if (expr.getType() instanceof ValueType.Object) { String clsName = ((ValueType.Object) expr.getType()).getClassName(); ClassReader cls = classSource.get(clsName); if (cls != null && !cls.hasModifier(ElementModifier.INTERFACE)) { expr.getExpr().acceptVisitor(this); writer.append(" instanceof ").appendClass(clsName); if (expr.getLocation() != null) { popLocation(); expr.getExpr().acceptVisitor(this); writer.append(",").ws().append(context.typeToClsString(expr.getType())).append(")"); if (expr.getLocation() != null) { popLocation();
@Override public void visit(InstanceOfExpr expr) { pushLocation(expr.getLocation()); try { expr.getExpr().acceptVisitor(this); expr.setExpr(resultExpr); resultExpr = expr; } finally { popLocation(); } }
@Override public void visit(InstanceOfExpr expr) { expr.getExpr().acceptVisitor(this); }
public static Expr instanceOf(Expr target, ValueType className) { InstanceOfExpr expr = new InstanceOfExpr(); expr.setExpr(target); expr.setType(className); return expr; }
@Override public void visit(InstanceOfExpr expr) { accept(expr.getExpr()); if (expr.getType() instanceof ValueType.Object) { ValueType.Object cls = (ValueType.Object) expr.getType(); List<TagRegistry.Range> ranges = context.getTagRegistry().getRanges(cls.getClassName()); ranges.sort(Comparator.comparingInt(range -> range.lower)); block.setLocation(expr.getLocation()); } else if (expr.getType() instanceof ValueType.Array) { throw new UnsupportedOperationException(); } else {
InstanceOfExpr expr = new InstanceOfExpr(); expr.setExpr(readExpr(input)); expr.setType(ValueType.parse(symbolTable.at(input.readInt()))); return expr;