#ifndef GROUND_EXT_H #define GROUND_EXT_H #include "groundvm.h" #ifdef __cplusplus extern "C" { #endif // Macro for easily returning errors #define ERROR(what, type) return createErrorGroundValue(createGroundError(what, type, NULL, NULL)) // Forward declaration of the scope structure used in interpreter struct GroundScope; typedef struct GroundScope GroundScope; /* * Stores data associated with an error thrown during Ground execution. */ typedef struct GroundError { char* what; char* type; struct GroundInstruction* where; size_t line; bool hasLine; } GroundError; // Creates a GroundValue containing (in), with type ERROR. GroundValue createErrorGroundValue(GroundError in); // Creates a GroundError. GroundError createGroundError(char* what, char* type, GroundInstruction* where, size_t* line); /* * Function pointer type for native functions. * scope: The current execution scope (opaque). * args: A List of arguments passed to the function. */ typedef GroundValue (*NativeGroundFunction)(GroundScope* scope, List args); /* * Registers a native function in the given scope. * * scope: The scope to register the function in. * name: The name of the function in Ground. * fn: The C function to call. * returnType: The return type of the function. * argCount: The number of arguments the function expects. * ...: A sequence of (GroundValueType type, char* name) for each argument. */ void groundAddNativeFunction(GroundScope* scope, char* name, NativeGroundFunction fn, GroundValueType returnType, int argCount, ...); #ifdef __cplusplus } #endif #endif