@Override public void visitTypeConstructorExpr(TypeConstructorExpr typeConstructorExpr) { out.append(typeConstructorExpr.getTypename() + "("); boolean first = true; for (Expr e : typeConstructorExpr.getArgs()) { if (!first) { out.append(", "); } first = false; visit(e); } out.append(")"); }
@Override public void visitTypeConstructorExpr(TypeConstructorExpr typeConstructorExpr) { super.visitTypeConstructorExpr(typeConstructorExpr); final String typename = typeConstructorExpr.getTypename(); if (namedStructRenaming.containsKey(typename)) { typeConstructorExpr.setTypename(namedStructRenaming.get(typename)); } }
@Override public void visitTypeConstructorExpr(TypeConstructorExpr typeConstructorExpr) { super.visitTypeConstructorExpr(typeConstructorExpr); if (typeConstructorExpr.getTypename().equals(toLookFor.getName())) { counter++; } }
private static boolean isFpVectorConstant(Expr expr) { return expr instanceof TypeConstructorExpr && Arrays.asList(BasicType.VEC2.toString(), BasicType.VEC3.toString(), BasicType.VEC4.toString()) .contains(((TypeConstructorExpr) expr).getTypename()) && ((TypeConstructorExpr) expr).getArgs() .stream() .allMatch(FoldConstantReductionOpportunities::isFpConstant); }
@Override public void visitTypeConstructorExpr(TypeConstructorExpr typeConstructorExpr) { super.visitTypeConstructorExpr(typeConstructorExpr); switch (typeConstructorExpr.getTypename()) { case "float": types.put(typeConstructorExpr, BasicType.FLOAT); default: final StructNameType maybeStructType = new StructNameType(typeConstructorExpr.getTypename()); if (structDeclarationMap.containsKey(maybeStructType)) { types.put(typeConstructorExpr, maybeStructType); return; throw new RuntimeException("Unknown type constructor " + typeConstructorExpr.getTypename());
@Override public void visitTypeConstructorExpr(TypeConstructorExpr typeConstructorExpr) { super.visitTypeConstructorExpr(typeConstructorExpr); if (!typeConstructorExpr.getTypename().equals( targetStruct.getStructNameType().getName())) { return; } // This is the target struct, so remove the appropriate constructor component typeConstructorExpr.removeArg(index); } }.visit(subtreeInWhichStructIsUsed);
@Override public void visitTypeConstructorExpr(TypeConstructorExpr typeConstructorExpr) { super.visitTypeConstructorExpr(typeConstructorExpr); if (typeConstructorExpr.getTypename().equals(getOuterStructName())) { TypeConstructorExpr oldArg = (TypeConstructorExpr) typeConstructorExpr.removeArg(indexOfInlinedField); for (int i = 0; i < oldArg.getNumArgs(); i++) { typeConstructorExpr.insertArg(indexOfInlinedField + i, oldArg.getArg(i)); } } }
private void findFoldFpScalarVectorBinaryOpportunities(IAstNode parent, Expr child, Expr lhs, Expr rhs, BinaryOperator<Float> op) { if (isFpConstant(lhs) && isFpVectorConstant(rhs)) { final TypeConstructorExpr typeConstructorExpr = (TypeConstructorExpr) rhs; addReplaceWithExpr(parent, child, new TypeConstructorExpr(typeConstructorExpr.getTypename(), typeConstructorExpr.getArgs() .stream() .map(item -> (FloatConstantExpr) item) .map(item -> new FloatConstantExpr(op.apply( Float.valueOf(((FloatConstantExpr) lhs).getValue()), Float.valueOf(item.getValue())).toString())) .collect(Collectors.toList()))); } if (isFpConstant(rhs) && isFpVectorConstant(lhs)) { final TypeConstructorExpr typeConstructorExpr = (TypeConstructorExpr) lhs; addReplaceWithExpr(parent, child, new TypeConstructorExpr(typeConstructorExpr.getTypename(), typeConstructorExpr.getArgs() .stream() .map(item -> (FloatConstantExpr) item) .map(item -> new FloatConstantExpr(op.apply( Float.valueOf(item.getValue()), Float.valueOf(((FloatConstantExpr) rhs).getValue())).toString())) .collect(Collectors.toList()))); } }