graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
basic-graal Cdiff graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java
graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java
Print this page
*** 301,317 ****
public Assumptions getAssumptions() {
return assumptions;
}
! private static SubstitutionGuard getGuard(Class<? extends SubstitutionGuard> guardClass) {
if (guardClass != SubstitutionGuard.class) {
try {
! return guardClass.newInstance();
} catch (Exception e) {
throw new GraalInternalError(e);
}
}
return null;
}
private static String getOriginalInternalName(Class<?> substitutions) {
--- 301,331 ----
public Assumptions getAssumptions() {
return assumptions;
}
! private SubstitutionGuard getGuard(Class<? extends SubstitutionGuard> guardClass) {
if (guardClass != SubstitutionGuard.class) {
+ Constructor<?>[] constructors = guardClass.getConstructors();
+ if (constructors.length != 1) {
+ throw new GraalInternalError("Substitution guard " + guardClass.getSimpleName() + " must have a single public constructor");
+ }
+ Constructor<?> constructor = constructors[0];
+ Class<?>[] paramTypes = constructor.getParameterTypes();
+ // Check for supported constructor signatures
try {
! if (constructor.getParameterCount() == 1 && paramTypes[0] == Architecture.class) {
! // Guard(Architecture)
! return (SubstitutionGuard) constructor.newInstance(target.arch);
! } else if (constructor.getParameterCount() == 0) {
! // Guard()
! return (SubstitutionGuard) constructor.newInstance();
! }
} catch (Exception e) {
throw new GraalInternalError(e);
}
+ throw new GraalInternalError("Unsupported constructor signature in substitution guard: " + constructor);
}
return null;
}
private static String getOriginalInternalName(Class<?> substitutions) {
graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File