@Override public Iterator<Entrypoint> iterator() { Set<Entrypoint> ES = HashSetFactory.make(); Iterator<IClass> classes = scriptType.getClassLoader().iterateAllClasses(); while (classes.hasNext()) { IClass cls = classes.next(); if (cha.isSubclassOf(cls, scriptType) && !cls.isAbstract()) { for (IMethod method : cls.getDeclaredMethods()) { if (keep()) { ES.add(new ScriptEntryPoint(method)); } } } } return ES.iterator(); }
@Override public SSAAbstractInvokeInstruction addCall(AbstractRootMethod m){ CallSiteReference site = makeSite(0); if (site == null) { return null; } int functionVn = getMethod().isStatic()? -1: makeArgument(m, 0); int paramVns[] = new int[Math.min(0, getNumberOfParameters() - 1)]; for (int j = 0; j < paramVns.length; j++) { paramVns[j] = makeArgument(m, j + 1); } return ((ScriptFakeRoot) m).addDirectCall(functionVn, paramVns, site); } }
@Override public Iterator<Entrypoint> iterator() { Set<Entrypoint> ES = HashSetFactory.make(); Iterator<IClass> classes = scriptType.getClassLoader().iterateAllClasses(); while (classes.hasNext()) { IClass cls = classes.next(); if (cha.isSubclassOf(cls, scriptType) && !cls.isAbstract()) { for (IMethod method : cls.getDeclaredMethods()) { if (keep()) { ES.add(new ScriptEntryPoint(method)); } } } } return ES.iterator(); }
@Override public SSAAbstractInvokeInstruction addCall(AbstractRootMethod m){ CallSiteReference site = makeSite(0); if (site == null) { return null; } int functionVn = getMethod().isStatic()? -1: makeArgument(m, 0); int paramVns[] = new int[Math.min(0, getNumberOfParameters() - 1)]; for (int j = 0; j < paramVns.length; j++) { paramVns[j] = makeArgument(m, j + 1); } return ((ScriptFakeRoot) m).addDirectCall(functionVn, paramVns, site); } }
@Override public CallSiteReference makeSite(int programCounter) { return makeScriptSite(getMethod(), programCounter); }
@Override public CallSiteReference makeSite(int programCounter) { return makeScriptSite(getMethod(), programCounter); }
@Override public int getNumberOfParameters() { return getMethod().isStatic()? 0: 1; }
@Override public int getNumberOfParameters() { return getMethod().isStatic()? 0: 1; }
public Entrypoint make(String scriptName) { IClass cls = cha.lookupClass(TypeReference.findOrCreate(scriptType.getClassLoader().getReference(), scriptName)); assert cls != null && cha.isSubclassOf(cls, scriptType) && !cls.isAbstract() : String.valueOf(cls) + " for " + scriptName; for (IMethod method : cls.getDeclaredMethods()) { if (keep()) { return new ScriptEntryPoint(method); } } assert false; return null; } }
public Entrypoint make(String scriptName) { IClass cls = cha.lookupClass(TypeReference.findOrCreate(scriptType.getClassLoader().getReference(), scriptName)); assert cls != null && cha.isSubclassOf(cls, scriptType) && !cls.isAbstract() : String.valueOf(cls) + " for " + scriptName; for (IMethod method : cls.getDeclaredMethods()) { if (keep()) { return new ScriptEntryPoint(method); } } assert false; return null; } }