public static SqlTypeBytecodeExpression constantType(CallSiteBinder callSiteBinder, Type type) { requireNonNull(callSiteBinder, "callSiteBinder is null"); requireNonNull(type, "type is null"); Binding binding = callSiteBinder.bind(type, Type.class); return new SqlTypeBytecodeExpression(type, binding, BOOTSTRAP_METHOD); }
public Binding bind(Object constant, Class<?> type) { return bind(MethodHandles.constant(type, constant)); }
public static BytecodeExpression loadConstant(CallSiteBinder callSiteBinder, Object constant, Class<?> type) { Binding binding = callSiteBinder.bind(MethodHandles.constant(type, constant)); return loadConstant(binding); }
public void generateInitializations(Variable thisVariable, BytecodeBlock block) { for (Map.Entry<FieldDefinition, MethodHandle> entry : initializers.entrySet()) { Binding binding = callSiteBinder.bind(entry.getValue()); block.append(thisVariable) .append(invoke(binding, "instanceFieldConstructor")) .putField(entry.getKey()); } } }
private static void generateEvaluateFinal( ClassDefinition definition, List<FieldDefinition> stateFields, MethodHandle outputFunction, CallSiteBinder callSiteBinder) { Parameter out = arg("out", BlockBuilder.class); MethodDefinition method = definition.declareMethod( a(PUBLIC), "evaluateFinal", type(void.class), out); BytecodeBlock body = method.getBody(); Variable thisVariable = method.getThis(); List<BytecodeExpression> states = new ArrayList<>(); for (FieldDefinition stateField : stateFields) { BytecodeExpression state = thisVariable.getField(stateField); states.add(state); } body.comment("output(state_0, state_1, ..., out)"); states.forEach(body::append); body.append(out); body.append(invoke(callSiteBinder.bind(outputFunction), "output")); body.ret(); }
private static void generateToString(ClassDefinition classDefinition, CallSiteBinder callSiteBinder, String string) { // bind constant via invokedynamic to avoid constant pool issues due to large strings classDefinition.declareMethod(a(PUBLIC), "toString", type(String.class)) .getBody() .append(invoke(callSiteBinder.bind(string, String.class), "toString")) .retObject(); }
private static void generateToString(ClassDefinition classDefinition, CallSiteBinder callSiteBinder, String string) { // bind constant via invokedynamic to avoid constant pool issues due to large strings classDefinition.declareMethod(a(PUBLIC), "toString", type(String.class)) .getBody() .append(invoke(callSiteBinder.bind(string, String.class), "toString")) .retObject(); }
block.append(invoke(callSiteBinder.bind(inputFunction), "input")); return block;
private static void generateGroupedEvaluateFinal( ClassDefinition definition, List<FieldDefinition> stateFields, MethodHandle outputFunction, CallSiteBinder callSiteBinder) { Parameter groupId = arg("groupId", int.class); Parameter out = arg("out", BlockBuilder.class); MethodDefinition method = definition.declareMethod(a(PUBLIC), "evaluateFinal", type(void.class), groupId, out); BytecodeBlock body = method.getBody(); Variable thisVariable = method.getThis(); List<BytecodeExpression> states = new ArrayList<>(); for (FieldDefinition stateField : stateFields) { BytecodeExpression state = thisVariable.getField(stateField); body.append(state.invoke("setGroupId", void.class, groupId.cast(long.class))); states.add(state); } body.comment("output(state_0, state_1, ..., out)"); states.forEach(body::append); body.append(out); body.append(invoke(callSiteBinder.bind(outputFunction), "output")); body.ret(); }
Binding binding = binder.bind(bestChoice.getMethodHandle());
.cast(lambdaInterfaces.get(i))); loopBody.append(invoke(callSiteBinder.bind(combineFunction), "combine"));
.comment("%s.%s(output, %s)", type.getTypeSignature(), methodName, valueJavaType.getSimpleName()) .putVariable(tempValue) .append(loadConstant(callSiteBinder.bind(type, Type.class))) .getVariable(outputBlockVariable) .getVariable(tempValue)
Binding hashCodeBinding = generatorContext .getCallSiteBinder() .bind(hashCodeFunction); switchBlock = new BytecodeBlock() .comment("lookupSwitch(hashCode(<stackValue>))") case SET_CONTAINS: Set<?> constantValuesSet = toFastutilHashSet(constantValues, type, registry); Binding constant = generatorContext.getCallSiteBinder().bind(constantValuesSet, constantValuesSet.getClass());
Binding binding = callSiteBinder.bind(operator.getMethodHandle()); List<BytecodeNode> argumentsBytecode = new ArrayList<>(); argumentsBytecode.add(generateInputReference(callSiteBinder, scope, type, leftBlock, leftBlockPosition));
Binding binding = callSiteBinder.bind(inputFunction); BytecodeExpression invokeInputFunction = invokeDynamic( BOOTSTRAP_METHOD,
Binding binding = callSiteBinder.bind(value, constant.getType().getJavaType());
public static BytecodeExpression loadConstant(CallSiteBinder callSiteBinder, Object constant, Class<?> type) { Binding binding = callSiteBinder.bind(MethodHandles.constant(type, constant)); return loadConstant(binding); }
private static void generateToString(ClassDefinition classDefinition, CallSiteBinder callSiteBinder, String string) { // bind constant via invokedynamic to avoid constant pool issues due to large strings classDefinition.declareMethod(a(PUBLIC), "toString", type(String.class)) .getBody() .append(invoke(callSiteBinder.bind(string, String.class), "toString")) .retObject(); }