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