MCPcopy Create free account
hub / github.com/dynjs/dynjs / emitCall

Method emitCall

src/main/java/org/dynjs/ir/IRByteCodeCompiler.java:111–144  ·  view source on GitHub ↗
(JiteClass jiteClass, CodeBlock block, Call instruction, HashMap<Label, LabelNode> jumpMap)

Source from the content-addressed store, hash-verified

109 }
110
111 private void emitCall(JiteClass jiteClass, CodeBlock block, Call instruction, HashMap<Label, LabelNode> jumpMap) {
112 block.aload(EXECUTION_CONTEXT);
113 emitOperand(block, instruction.getIdentifier());
114 // ref
115 block.dup();
116 // ref ref
117 block.dup();
118 // ref ref ref
119 block.aload(EXECUTION_CONTEXT);
120 // ref ref ref ec
121 block.swap();
122 // ref ref ec ref
123 block.invokestatic(p(Types.class), "getValue", sig(Object.class, ExecutionContext.class, Object.class));
124 // ref ref function
125 block.checkcast(p(JSFunction.class));
126 // ref ref function
127 block.swap();
128 // ref function ref
129 block.invokestatic(p(Interpreter.class), "getThis", sig(Object.class, Object.class));
130 // ref function this
131
132 Operand[] args = instruction.getArgs();
133 block.bipush(args.length);
134 block.anewarray(p(Object.class));
135 for (int i = 0; i < args.length; i++) {
136 block.dup();
137 block.bipush(i);
138 Operand operand = args[i];
139 emitOperand(block, operand);
140 block.arraystore();
141 }
142 // ref function this args...
143 block.invokevirtual(p(ExecutionContext.class), "call", sig(Object.class, Object.class, JSFunction.class, Object.class, Object[].class));
144 }
145
146 private void emitSub(CodeBlock block, Sub instruction) {
147 emitOperand(block, instruction.getLHS());

Callers 1

emitInstructionMethod · 0.95

Calls 3

emitOperandMethod · 0.95
getIdentifierMethod · 0.45
getArgsMethod · 0.45

Tested by

no test coverage detected