package org.reldb.rel.v0.generator; import java.lang.reflect.*; import org.reldb.rel.exceptions.ExceptionSemantic; 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 procedure currently being defined. * * @author dave * */ public class OperatorDefinitionNativeProcedureExternal extends OperatorDefinitionNative { private Method method; /** Ctor for operator definition, with resolved class. */ public OperatorDefinitionNativeProcedureExternal(OperatorSignature sig, Method method) { super(sig.getName(), sig.getParameterTypes()); this.method = method; } /** Get primary language. */ public String getLanguage() { return "JavaP"; } private void noEvaluate() { throw new ExceptionSemantic("RS0094: Attempt to evaluate " + getSignature() + " which does not have a return value."); } public void compileCall(Generator generator) { generator.compileInstruction(new OpJavaCall(method)); } public Type compileEvaluate(Generator generator) { noEvaluate(); return null; } public void call(Context context) { (new OpJavaCall(method)).execute(context); } public void evaluate(Context context) { noEvaluate(); } }