package org.reldb.rel.v0.generator; import org.reldb.rel.exceptions.ExceptionSemantic; import org.reldb.rel.v0.types.Type; import org.reldb.rel.v0.vm.*; import org.reldb.rel.v0.vm.instructions.core.OpNativeProcedure; /** This class captures information about the native procedure currently being defined. * * @author dave * */ public class OperatorDefinitionNativeProcedure extends OperatorDefinitionNative { private NativeProcedure operator; /** Ctor for operator definition. */ public OperatorDefinitionNativeProcedure(String name, String docs, Type[] parameters, NativeProcedure fn) { super(name, parameters); operator = fn; setSourceCode(docs); } /** Get primary language. */ public String getLanguage() { return "JavaP"; } public void compileCall(Generator generator) { generator.compileInstruction(new OpNativeProcedure(operator, getParmCount())); } private void noEvaluate() { throw new ExceptionSemantic("RS0093: Attempt to evaluate " + getSignature() + " which does not have a return value."); } public Type compileEvaluate(Generator generator) { noEvaluate(); return null; } public void call(Context context) { (new OpNativeProcedure(operator, getParmCount())).execute(context); } public void evaluate(Context context) { noEvaluate(); } }