58 lines
1.6 KiB
C
58 lines
1.6 KiB
C
#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
|