Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
epidemian
GitHub Repository: epidemian/gravity
Path: blob/master/src/shared/gravity_delegate.h
1218 views
1
//
2
// gravity_delegate.h
3
// gravity
4
//
5
// Created by Marco Bambini on 09/12/14.
6
// Copyright (c) 2014 CreoLabs. All rights reserved.
7
//
8
9
#ifndef __GRAVITY_DELEGATE__
10
#define __GRAVITY_DELEGATE__
11
12
#include <stdint.h>
13
#include "gravity_value.h"
14
15
// error type and code definitions
16
typedef enum {
17
GRAVITY_ERROR_NONE = 0,
18
GRAVITY_ERROR_SYNTAX,
19
GRAVITY_ERROR_SEMANTIC,
20
GRAVITY_ERROR_RUNTIME,
21
GRAVITY_ERROR_IO,
22
GRAVITY_WARNING,
23
} error_type_t;
24
25
typedef struct {
26
uint32_t code;
27
uint32_t lineno;
28
uint32_t colno;
29
uint32_t fileid;
30
uint32_t offset;
31
} error_desc_t;
32
33
#define ERROR_DESC_NONE (error_desc_t){0,0,0,0,0}
34
35
typedef void (*gravity_log_callback) (const char *message, void *xdata);
36
typedef void (*gravity_error_callback) (error_type_t error_type, const char *description, error_desc_t error_desc, void *xdata);
37
typedef void (*gravity_unittest_callback) (error_type_t error_type, const char *desc, const char *note, gravity_value_t value, int32_t row, int32_t col, void *xdata);
38
typedef void (*gravity_parser_callback) (void *token, void *xdata);
39
typedef const char* (*gravity_precode_callback) (void *xdata);
40
typedef const char* (*gravity_loadfile_callback) (const char *file, size_t *size, uint32_t *fileid, void *xdata);
41
typedef const char* (*gravity_filename_callback) (uint32_t fileid, void *xdata);
42
43
typedef bool (*gravity_bridge_initinstance) (gravity_vm *vm, void *xdata, gravity_instance_t *instance, gravity_value_t args[], int16_t nargs);
44
typedef bool (*gravity_bridge_setvalue) (gravity_vm *vm, void *xdata, gravity_value_t target, const char *key, gravity_value_t value);
45
typedef bool (*gravity_bridge_getvalue) (gravity_vm *vm, void *xdata, gravity_value_t target, const char *key, uint32_t vindex);
46
typedef bool (*gravity_bridge_setundef) (gravity_vm *vm, void *xdata, gravity_value_t target, const char *key, gravity_value_t value);
47
typedef bool (*gravity_bridge_getundef) (gravity_vm *vm, void *xdata, gravity_value_t target, const char *key, uint32_t vindex);
48
typedef bool (*gravity_bridge_execute) (gravity_vm *vm, void *xdata, gravity_value_t args[], int16_t nargs, uint32_t vindex);
49
typedef uint32_t (*gravity_bridge_size) (gravity_vm *vm, gravity_object_t *obj);
50
typedef void (*gravity_bridge_free) (gravity_vm *vm, gravity_object_t *obj);
51
52
typedef struct {
53
// user data
54
void *xdata; // optional user data transparently passed between callbacks
55
56
// callbacks
57
gravity_log_callback log_callback; // log reporting callback
58
gravity_error_callback error_callback; // error reporting callback
59
gravity_unittest_callback unittest_callback; // special unit test callback
60
gravity_parser_callback parser_callback; // parser callback used for syntax highlight
61
gravity_precode_callback precode_callback; // called at parse time in order to give the opportunity to add custom source code
62
gravity_loadfile_callback loadfile_callback; // callback to give the opportunity to load a file from an import statement
63
gravity_filename_callback filename_callback; // called while reporting an error in order to be able to convert a fileid to a real filename
64
65
// bridge
66
gravity_bridge_initinstance bridge_initinstance; // init class
67
gravity_bridge_setvalue bridge_setvalue; // setter
68
gravity_bridge_getvalue bridge_getvalue; // getter
69
gravity_bridge_setundef bridge_setundef; // setter not found
70
gravity_bridge_getundef bridge_getundef; // getter not found
71
gravity_bridge_execute bridge_execute; // execute a method/function
72
gravity_bridge_size bridge_size; // size of obj
73
gravity_bridge_free bridge_free; // free obj
74
} gravity_delegate_t;
75
76
#endif
77
78