package org.reldb.rel.v0.generator; import org.reldb.rel.v0.types.Type; import org.reldb.rel.v0.vm.*; import org.reldb.rel.v0.vm.instructions.core.OpNativeFunction; /** This class captures information about the native function currently being defined. * * @author dave * */ public class OperatorDefinitionNativeFunction extends OperatorDefinitionNative { private NativeFunction operator; private String language = "Java"; /** Ctor for operator definition. */ public OperatorDefinitionNativeFunction(String name, String docs, Type[] parameters, Type returnType, NativeFunction fn) { super(name, parameters); setDeclaredReturnType(returnType); operator = fn; setSourceCode(docs); } /** Ctor for operator definition. */ public OperatorDefinitionNativeFunction(OperatorSignature signature, NativeFunction fn) { this(signature.getName(), "", signature.getParameterTypes(), signature.getReturnType(), fn); } /** Get primary language, which is 'Java' by default. */ public String getLanguage() { return language; } /** Override the primary language. */ public void setLanguage(String language) { this.language = language; } public void compileCall(Generator generator) { generator.compileInstruction(new OpNativeFunction(operator, getParmCount())); generator.compilePop(); } public Type compileEvaluate(Generator generator) { generator.compileInstruction(new OpNativeFunction(operator, getParmCount())); return getDeclaredReturnType(); } public void call(Context context) { new OpNativeFunction(operator, getParmCount()).execute(context); context.pop(); } public void evaluate(Context context) { new OpNativeFunction(operator, getParmCount()).execute(context); } }