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
*** old/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java	Thu Nov 20 14:38:48 2014
--- new/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java	Thu Nov 20 14:38:48 2014

*** 301,317 **** --- 301,331 ---- public Assumptions getAssumptions() { return assumptions; } - private static 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 { return guardClass.newInstance(); + 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