package org.reldb.rel.v0.generator; import java.lang.reflect.*; import org.reldb.rel.v0.types.Type; import org.reldb.rel.v0.vm.Context; import org.reldb.rel.v0.vm.instructions.system.OpJavaCall; /** This class captures information about the native function currently being defined. * * @author dave * */ public class OperatorDefinitionNativeFunctionExternal extends OperatorDefinitionNative { private Method method; /** Ctor for operator definition, with resolved class. */ public OperatorDefinitionNativeFunctionExternal(OperatorSignature sig, Method method) { super(sig.getName(), sig.getParameterTypes()); setDeclaredReturnType(sig.getReturnType()); this.method = method; } /** Get primary language. */ public String getLanguage() { return "JavaF"; } public void compileCall(Generator generator) { generator.compileInstruction(new OpJavaCall(method)); generator.compilePop(); } public Type compileEvaluate(Generator generator) { generator.compileInstruction(new OpJavaCall(method)); return getDeclaredReturnType(); } public void call(Context context) { (new OpJavaCall(method)).execute(context); context.pop(); } public void evaluate(Context context) { (new OpJavaCall(method)).execute(context); } }