Class FunctionCallGraph


  • public class FunctionCallGraph
    extends Object
    • Constructor Detail

      • FunctionCallGraph

        public FunctionCallGraph​(DMLProgram prog)
        Constructs the function call graph for all functions reachable from the main program.
        Parameters:
        prog - dml program of given script
      • FunctionCallGraph

        public FunctionCallGraph​(StatementBlock sb)
        Constructs the function call graph for all functions reachable from the given statement block.
        Parameters:
        sb - statement block (potentially hierarchical)
    • Method Detail

      • getCalledFunctions

        public Set<String> getCalledFunctions​(String fnamespace,
                                              String fname)
        Returns all functions called from the given function.
        Parameters:
        fnamespace - function namespace
        fname - function name
        Returns:
        set of function keys (namespace and name)
      • getCalledFunctions

        public Set<String> getCalledFunctions​(String fkey)
        Returns all functions called from the given function.
        Parameters:
        fkey - function key of calling function, null indicates the main program
        Returns:
        set of function keys (namespace and name)
      • getFunctionCalls

        public List<FunctionOp> getFunctionCalls​(String fkey)
        Returns all function operators calling the given function.
        Parameters:
        fkey - function key of called function, null indicates the main program and returns an empty list
        Returns:
        list of function call hops
      • getFunctionCallsSB

        public List<StatementBlock> getFunctionCallsSB​(String fkey)
        Returns all statement blocks that contain a function operator calling the given function.
        Parameters:
        fkey - function key of called function, null indicates the main program and returns an empty list
        Returns:
        list of statement blocks
      • removeFunctionCalls

        public void removeFunctionCalls​(String fkey)
        Removes all calls of the given function.
        Parameters:
        fkey - function key of called function, null indicates the main program, which has no affect
      • removeFunctionCall

        public void removeFunctionCall​(String fkey,
                                       FunctionOp fop,
                                       StatementBlock sb)
        Removes a single function call identified by target function name, and source function op and statement block.
        Parameters:
        fkey - function key of called function
        fop - source function call operator
        sb - source statement block
      • replaceFunctionCalls

        public void replaceFunctionCalls​(String fkeyOld,
                                         String fkey)
        Replaces a function call to fkeyOld with a call to fkey, but using the function op and statement block from the old.
        Parameters:
        fkeyOld - old function key of called function
        fkey - new function key of called function
      • isRecursiveFunction

        public boolean isRecursiveFunction​(String fnamespace,
                                           String fname)
        Indicates if the given function is either directly or indirectly recursive. An example of an indirect recursive function is foo2 in the following call chain: foo1 -> foo2 -> foo1.
        Parameters:
        fnamespace - function namespace
        fname - function name
        Returns:
        true if the given function is recursive, false otherwise
      • isRecursiveFunction

        public boolean isRecursiveFunction​(String fkey)
        Indicates if the given function is either directly or indirectly recursive. An example of an indirect recursive function is foo2 in the following call chain: foo1 -> foo2 -> foo1.
        Parameters:
        fkey - function key of calling function, null indicates the main program
        Returns:
        true if the given function is recursive, false otherwise
      • isSideEffectFreeFunction

        public boolean isSideEffectFreeFunction​(String fnamespace,
                                                String fname)
        Indicates if the given function is side effect free, i.e., has no prints, no persistent write, and includes no or only calls to side-effect-free functions.
        Parameters:
        fnamespace - function namespace
        fname - function name
        Returns:
        true if the given function is side-effect-free, false otherwise
      • isSideEffectFreeFunction

        public boolean isSideEffectFreeFunction​(String fkey)
        Indicates if the given function is side effect free, i.e., has no prints, no persistent write, and includes no or only calls to side-effect-free functions.
        Parameters:
        fkey - function key of calling function, null indicates the main program
        Returns:
        true if the given function is side-effect-free, false otherwise
      • getReachableFunctions

        public Set<String> getReachableFunctions()
        Returns all functions that are reachable either directly or indirectly form the main program, except the main program itself.
        Returns:
        set of function keys (namespace and name)
      • getReachableFunctions

        public Set<String> getReachableFunctions​(Set<String> excludeList)
        Returns all functions that are reachable either directly or indirectly form the main program, except the main program itself and the given exclude-list of function names.
        Parameters:
        excludeList - list of function keys to exclude
        Returns:
        set of function keys (namespace and name)
      • isReachableFunction

        public boolean isReachableFunction​(String fnamespace,
                                           String fname)
        Indicates if the given function is reachable either directly or indirectly from the main program.
        Parameters:
        fnamespace - function namespace
        fname - function name
        Returns:
        true if the given function is reachable, false otherwise
      • isReachableFunction

        public boolean isReachableFunction​(String fkey)
        Indicates if the given function is reachable either directly or indirectly from the main program.
        Parameters:
        fkey - function key of calling function, null indicates the main program
        Returns:
        true if the given function is reachable, false otherwise
      • containsSecondOrderCall

        public boolean containsSecondOrderCall()
        Indicates if the function call graph, i.e., functions that are transitively reachable from the main program, contains a second-order builtin function call (e.g., eval, paramserv), which prohibits the removal of unused functions.
        Returns:
        true if the function call graph contains a second-order builtin function call.