37 * Compiler or FunctionNode class, you may have to revisit this script. |
37 * Compiler or FunctionNode class, you may have to revisit this script. |
38 * We cannot use direct Java class (via dynalink bean linker) to Compiler |
38 * We cannot use direct Java class (via dynalink bean linker) to Compiler |
39 * and FunctionNode because of package-access check and so reflective calls. |
39 * and FunctionNode because of package-access check and so reflective calls. |
40 */ |
40 */ |
41 |
41 |
42 var Parser = Java.type("jdk.nashorn.internal.parser.Parser") |
42 var Parser = Java.type("jdk.nashorn.internal.parser.Parser") |
43 var Compiler = Java.type("jdk.nashorn.internal.codegen.Compiler") |
43 var Compiler = Java.type("jdk.nashorn.internal.codegen.Compiler") |
44 var Context = Java.type("jdk.nashorn.internal.runtime.Context") |
44 var Context = Java.type("jdk.nashorn.internal.runtime.Context") |
45 var ScriptEnvironment = Java.type("jdk.nashorn.internal.runtime.ScriptEnvironment") |
45 var ScriptEnvironment = Java.type("jdk.nashorn.internal.runtime.ScriptEnvironment") |
46 var Source = Java.type("jdk.nashorn.internal.runtime.Source") |
46 var Source = Java.type("jdk.nashorn.internal.runtime.Source") |
47 var FunctionNode = Java.type("jdk.nashorn.internal.ir.FunctionNode") |
47 var FunctionNode = Java.type("jdk.nashorn.internal.ir.FunctionNode") |
48 var Block = Java.type("jdk.nashorn.internal.ir.Block") |
48 var Block = Java.type("jdk.nashorn.internal.ir.Block") |
49 var VarNode = Java.type("jdk.nashorn.internal.ir.VarNode") |
49 var VarNode = Java.type("jdk.nashorn.internal.ir.VarNode") |
50 var ExecuteNode = Java.type("jdk.nashorn.internal.ir.ExecuteNode") |
50 var ExpressionStatement = Java.type("jdk.nashorn.internal.ir.ExpressionStatement") |
51 var UnaryNode = Java.type("jdk.nashorn.internal.ir.UnaryNode") |
51 var UnaryNode = Java.type("jdk.nashorn.internal.ir.UnaryNode") |
52 var BinaryNode = Java.type("jdk.nashorn.internal.ir.BinaryNode") |
52 var BinaryNode = Java.type("jdk.nashorn.internal.ir.BinaryNode") |
53 var ThrowErrorManager = Java.type("jdk.nashorn.internal.runtime.Context$ThrowErrorManager") |
53 var ThrowErrorManager = Java.type("jdk.nashorn.internal.runtime.Context$ThrowErrorManager") |
54 var Debug = Java.type("jdk.nashorn.internal.runtime.Debug") |
54 var Debug = Java.type("jdk.nashorn.internal.runtime.Debug") |
55 |
55 |
56 var parseMethod = Parser.class.getMethod("parse"); |
56 var parseMethod = Parser.class.getMethod("parse"); |
57 var compileMethod = Compiler.class.getMethod("compile", FunctionNode.class); |
57 var compileMethod = Compiler.class.getMethod("compile", FunctionNode.class); |
58 var getBodyMethod = FunctionNode.class.getMethod("getBody"); |
58 var getBodyMethod = FunctionNode.class.getMethod("getBody"); |
59 var getStatementsMethod = Block.class.getMethod("getStatements"); |
59 var getStatementsMethod = Block.class.getMethod("getStatements"); |
60 var getInitMethod = VarNode.class.getMethod("getInit"); |
60 var getInitMethod = VarNode.class.getMethod("getInit"); |
61 var getExpressionMethod = ExecuteNode.class.getMethod("getExpression") |
61 var getExpressionMethod = ExpressionStatement.class.getMethod("getExpression") |
62 var rhsMethod = UnaryNode.class.getMethod("rhs") |
62 var rhsMethod = UnaryNode.class.getMethod("rhs") |
63 var lhsMethod = BinaryNode.class.getMethod("lhs") |
63 var lhsMethod = BinaryNode.class.getMethod("lhs") |
64 var binaryRhsMethod = BinaryNode.class.getMethod("rhs") |
64 var binaryRhsMethod = BinaryNode.class.getMethod("rhs") |
65 var debugIdMethod = Debug.class.getMethod("id", java.lang.Object.class) |
65 var debugIdMethod = Debug.class.getMethod("id", java.lang.Object.class) |
66 |
66 |
99 return findFunction(getInitMethod.invoke(node)) |
99 return findFunction(getInitMethod.invoke(node)) |
100 } else if(node instanceof UnaryNode) { |
100 } else if(node instanceof UnaryNode) { |
101 return findFunction(rhsMethod.invoke(node)) |
101 return findFunction(rhsMethod.invoke(node)) |
102 } else if(node instanceof BinaryNode) { |
102 } else if(node instanceof BinaryNode) { |
103 return findFunction(lhsMethod.invoke(node)) || findFunction(binaryRhsMethod.invoke(node)) |
103 return findFunction(lhsMethod.invoke(node)) || findFunction(binaryRhsMethod.invoke(node)) |
104 } else if(node instanceof ExecuteNode) { |
104 } else if(node instanceof ExpressionStatement) { |
105 return findFunction(getExpressionMethod.invoke(node)) |
105 return findFunction(getExpressionMethod.invoke(node)) |
106 } else if(node instanceof FunctionNode) { |
106 } else if(node instanceof FunctionNode) { |
107 return node |
107 return node |
108 } |
108 } |
109 } |
109 } |