private String unknownFieldMessage(String fieldName) { return "Field " + fieldName + " not found in struct" + (hasStructNameType() ? " " + structNameType : "") + "."; }
public StructNameType getStructNameType() { assert hasStructNameType(); return structNameType.get(); }
public StructDefinitionType getStructDefinition(StructNameType type) { return getStructDefinitions() .stream() .filter(item -> item.hasStructNameType() && item.getStructNameType().equals(type)) .findAny() .get(); }
public static boolean declaresReferencedStruct(TranslationUnit tu, VariablesDeclaration variablesDeclaration) { return StructUtils.getStructDefinitions(variablesDeclaration) .stream() .filter(item -> item.hasStructNameType()) .map(item -> item.getStructNameType()) .anyMatch(item -> countStructReferences(tu, item) > 1); }
public void addStructDefinition(StructDefinitionType sdt) { assert sdt.hasStructNameType(); structMapping.put(sdt.getStructNameType().getName(), sdt); }
@Override public void visitStructDefinitionType(StructDefinitionType structDefinitionType) { super.visitStructDefinitionType(structDefinitionType); if (structDefinitionType.hasStructNameType()) { currentScope.addStructDefinition(structDefinitionType); } }
@Override public void visitStructDefinitionType(StructDefinitionType structDefinitionType) { super.visitStructDefinitionType(structDefinitionType); if (structDefinitionType.hasStructNameType()) { assert !structDeclarationMap.containsKey(structDefinitionType.getStructNameType()); structDeclarationMap.put(structDefinitionType.getStructNameType(), structDefinitionType); } }
@Override public void visitStructDefinitionType(StructDefinitionType structDefinitionType) { super.visitStructDefinitionType(structDefinitionType); // TODO: right now we do not obfuscate fields of anonymous structs. if (structDefinitionType.hasStructNameType()) { final String oldName = structDefinitionType.getStructNameType().getName(); final String newName = renameStruct(oldName); namedStructRenaming.put(oldName, newName); structDefinitionTypes.add(structDefinitionType); final Map<String, String> fieldRenaming = new HashMap<>(); for (String fieldName : structDefinitionType.getFieldNames()) { fieldRenaming.put(fieldName, renameStructField(fieldName)); } structFieldRenaming.put(structDefinitionType.getStructNameType(), fieldRenaming); } }
@Override public void visitVariablesDeclaration(VariablesDeclaration variablesDeclaration) { if (variablesDeclaration.getBaseType().getWithoutQualifiers() instanceof StructDefinitionType) { final StructDefinitionType sdt = (StructDefinitionType) variablesDeclaration.getBaseType().getWithoutQualifiers(); if (sdt.hasStructNameType()) { // Initially, assume it is unused unusedStructs.add(sdt); } } super.visitVariablesDeclaration(variablesDeclaration); }
private void obfuscateTranslationUnit(TranslationUnit tu) { this.typer = new Typer(tu, tu.getShadingLanguageVersion()); visit(tu); for (VariableDeclInfo declInfo : varDeclMapping.keySet()) { assert varDeclMapping.containsKey(declInfo); declInfo.setName(varDeclMapping.get(declInfo)); } for (ParameterDecl parameterDecl : paramDeclMapping.keySet()) { assert paramDeclMapping.containsKey(parameterDecl); parameterDecl.setName(paramDeclMapping.get(parameterDecl)); } for (StructDefinitionType structDefinitionType : structDefinitionTypes) { if (structDefinitionType.hasStructNameType()) { final StructNameType structNameType = structDefinitionType.getStructNameType(); for (int i = 0; i < structDefinitionType.getNumFields(); i++) { assert structFieldRenaming.get(structNameType) .containsKey(structDefinitionType.getFieldName(i)); structDefinitionType.setFieldName(i, structFieldRenaming.get(structNameType) .get(structDefinitionType.getFieldName(i))); } } } new StandardVisitor() { @Override public void visitStructNameType(StructNameType structNameType) { structNameType.setName(namedStructRenaming.get(structNameType.getName())); } }.visit(tu); }
@Override public void visitStructDefinitionType(StructDefinitionType structDefinitionType) { out.append("struct "); if (structDefinitionType.hasStructNameType()) { visit(structDefinitionType.getStructNameType()); out.append(" "); } out.append("{" + newLine()); increaseIndent(); for (String name : structDefinitionType.getFieldNames()) { out.append(indent()); visit(structDefinitionType.getFieldType(name)); out.append(" " + name); processArrayInfo(structDefinitionType.getFieldType(name)); out.append(";" + newLine()); } decreaseIndent(); out.append("}"); }
@Override public void visitStructDefinitionType(StructDefinitionType structDefinitionType) { if (structDefinitionType.hasStructNameType()) { visitChildFromParent(structDefinitionType.getStructNameType(), structDefinitionType); } for (String name : structDefinitionType.getFieldNames()) { visitChildFromParent(structDefinitionType.getFieldType(name), structDefinitionType); } }