@Override public Iterator<Pair<CGNode, NewSiteReference>> getCreationSites(CallGraph CG) { CGNode cgn = CG.getNode(node, Everywhere.EVERYWHERE); assert cgn != null : node; return NonNullSingletonIterator.make(Pair.make(cgn, NewSiteReference.make(instructionIndex, createdType))); }
@Override public Iterator<Pair<CGNode, NewSiteReference>> getCreationSites(CallGraph CG) { CGNode cgn = CG.getNode(node, Everywhere.EVERYWHERE); assert cgn != null : node; return NonNullSingletonIterator.make(Pair.make(cgn, NewSiteReference.make(instructionIndex, createdType))); }
@Override public Iterator<SSAInstruction> iterator() { if (isEntryBlock() || isExitBlock() || getInstruction() == null) { return EmptyIterator.instance(); } else { return NonNullSingletonIterator.make(getInstruction()); } }
@Override public Iterator<SSAInstruction> iterator() { if (isEntryBlock() || isExitBlock() || getInstruction() == null) { return EmptyIterator.instance(); } else { return NonNullSingletonIterator.make(getInstruction()); } }
@Override public Iterator<Pair<CGNode, NewSiteReference>> getCreationSites(CallGraph CG) { MethodReference ctorRef = JavaScriptMethods.makeCtorReference(JavaScriptTypes.Function); Set<CGNode> f = CG.getNodes(ctorRef); CGNode ctor = null; for(CGNode n : f) { JavaScriptConstructor c = (JavaScriptConstructor) n.getMethod(); if (c.constructedType().equals(klass)) { ctor = n; break; } } // built in objects if (ctor == null) { return EmptyIterator.instance(); } Iterator<CGNode> callers = CG.getPredNodes(ctor); CGNode caller = callers.next(); assert !callers.hasNext(); Iterator<CallSiteReference> sites = CG.getPossibleSites(caller, ctor); CallSiteReference site = sites.next(); assert !sites.hasNext() : caller + " --> " + ctor + " @ " + site + " and " + sites.next() + '\n' + caller.getIR(); return NonNullSingletonIterator.make(Pair.make(caller, NewSiteReference.make(site.getProgramCounter(), klass.getReference()))); }
@Override public Iterator<Pair<CGNode, NewSiteReference>> getCreationSites(CallGraph CG) { MethodReference ctorRef = JavaScriptMethods.makeCtorReference(JavaScriptTypes.Function); Set<CGNode> f = CG.getNodes(ctorRef); CGNode ctor = null; for(CGNode n : f) { JavaScriptConstructor c = (JavaScriptConstructor) n.getMethod(); if (c.constructedType().equals(klass)) { ctor = n; break; } } // built in objects if (ctor == null) { return EmptyIterator.instance(); } Iterator<CGNode> callers = CG.getPredNodes(ctor); CGNode caller = callers.next(); assert !callers.hasNext(); Iterator<CallSiteReference> sites = CG.getPossibleSites(caller, ctor); CallSiteReference site = sites.next(); assert !sites.hasNext() : caller + " --> " + ctor + " @ " + site + " and " + sites.next() + '\n' + caller.getIR(); return NonNullSingletonIterator.make(Pair.make(caller, NewSiteReference.make(site.getProgramCounter(), klass.getReference()))); }
} else { assert normalNodes.get(eb.instructionIndex - 1) != null; return NonNullSingletonIterator.make(normalNodes.get(eb.instructionIndex - 1));
} else { assert normalNodes.get(eb.instructionIndex - 1) != null; return NonNullSingletonIterator.make(normalNodes.get(eb.instructionIndex - 1));