mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 15:43:01 +00:00 
			
		
		
		
	Fix gitignore
This commit is contained in:
		
							
								
								
									
										35
									
								
								include/gst/compile.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								include/gst/compile.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| #ifndef COMPILE_H_9VXF71HY | ||||
| #define COMPILE_H_9VXF71HY | ||||
|  | ||||
| #include <gst/gst.h> | ||||
| #include <setjmp.h> | ||||
|  | ||||
| typedef struct GstCompiler GstCompiler; | ||||
| typedef struct GstScope GstScope; | ||||
|  | ||||
| /* Compilation state */ | ||||
| struct GstCompiler { | ||||
|     Gst *vm; | ||||
|     const char *error; | ||||
|     jmp_buf onError; | ||||
|     GstScope *tail; | ||||
|     GstArray *env; | ||||
|     GstBuffer *buffer; | ||||
| }; | ||||
|  | ||||
| /* Initialize the Compiler */ | ||||
| void gst_compiler(GstCompiler *c, Gst *vm); | ||||
|  | ||||
| /* Register an environment for compilation */ | ||||
| void gst_compiler_env(GstCompiler *c, GstValue env); | ||||
|  | ||||
| /* Register a global for the compilation environment. */ | ||||
| void gst_compiler_add_global(GstCompiler *c, const char *name, GstValue x); | ||||
|  | ||||
| /* Register a global c function for the compilation environment. */ | ||||
| void gst_compiler_add_global_cfunction(GstCompiler *c, const char *name, GstCFunction f); | ||||
|  | ||||
| /* Compile a function that evaluates the given form. */ | ||||
| GstFunction *gst_compiler_compile(GstCompiler *c, GstValue form); | ||||
|  | ||||
| #endif /* end of include guard: COMPILE_H_9VXF71HY */ | ||||
							
								
								
									
										17
									
								
								include/gst/disasm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								include/gst/disasm.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| #ifndef disasm_h_INCLUDED | ||||
| #define disasm_h_INCLUDED | ||||
|  | ||||
| #include <gst/gst.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| /* Print disassembly for a given funciton */ | ||||
| void gst_dasm(FILE * out, uint16_t * byteCode, uint32_t len); | ||||
|  | ||||
| /* Print the disassembly for a function definition */ | ||||
| void gst_dasm_funcdef(FILE * out, GstFuncDef * def); | ||||
|  | ||||
| /* Print the disassembly for a function */ | ||||
| void gst_dasm_function(FILE * out, GstFunction * f); | ||||
|  | ||||
| #endif // disasm_h_INCLUDED | ||||
|  | ||||
							
								
								
									
										473
									
								
								include/gst/gst.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										473
									
								
								include/gst/gst.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,473 @@ | ||||
| #ifndef GST_H_defined | ||||
| #define GST_H_defined | ||||
|  | ||||
| #include <stdint.h> | ||||
|  | ||||
| /* String utils */ | ||||
| #define gst_string_raw(s) ((uint32_t *)(s) - 2) | ||||
| #define gst_string_length(s) (gst_string_raw(s)[0]) | ||||
| #define gst_string_hash(s) (gst_string_raw(s)[1]) | ||||
|  | ||||
| /* Tuple utils */ | ||||
| #define gst_tuple_raw(t) ((uint32_t *)(t) - 2) | ||||
| #define gst_tuple_length(t) (gst_tuple_raw(t)[0]) | ||||
| #define gst_tuple_hash(t) (gst_tuple_raw(t)[1]) | ||||
|  | ||||
| /* Memcpy for moving memory */ | ||||
| #ifndef gst_memcpy | ||||
| #include <string.h> | ||||
| #define gst_memcpy memcpy | ||||
| #endif | ||||
|  | ||||
| /* Allocation */ | ||||
| #ifndef gst_raw_alloc | ||||
| #include <stdlib.h> | ||||
| #define gst_raw_alloc malloc | ||||
| #endif | ||||
|  | ||||
| /* Zero allocation */ | ||||
| #ifndef gst_raw_calloc | ||||
| #include <stdlib.h> | ||||
| #define gst_raw_calloc calloc | ||||
| #endif | ||||
|  | ||||
| /* Realloc */ | ||||
| #ifndef gst_raw_realloc | ||||
| #include <stdlib.h> | ||||
| #define gst_raw_realloc realloc | ||||
| #endif | ||||
|  | ||||
| /* Free */ | ||||
| #ifndef gst_raw_free | ||||
| #include <stdlib.h> | ||||
| #define gst_raw_free free | ||||
| #endif | ||||
|  | ||||
| /* Null */ | ||||
| #ifndef NULL | ||||
| #define NULL ((void *)0) | ||||
| #endif | ||||
|  | ||||
| /* Stack frame manipulation */ | ||||
|  | ||||
| /* Size of stack frame in number of values */ | ||||
| #define GST_FRAME_SIZE 5 | ||||
|  | ||||
| /* Macros for referencing a stack frame given a stack */ | ||||
| #define gst_frame_callee(s)     (*(s - 1)) | ||||
| #define gst_frame_size(s)       ((s - 2)->data.hws[0]) | ||||
| #define gst_frame_prevsize(s)   ((s - 2)->data.hws[1]) | ||||
| #define gst_frame_errloc(s)     ((s - 2)->data.hws[2]) | ||||
| #define gst_frame_ret(s)        ((s - 2)->data.hws[3]) | ||||
| #define gst_frame_pc(s)         ((s - 3)->data.u16p) | ||||
| #define gst_frame_errjmp(s)     ((s - 4)->data.u16p) | ||||
| #define gst_frame_env(s)        ((s - 5)->data.env) | ||||
|  | ||||
| /* C function helpers */ | ||||
|  | ||||
| /* Return in a c function */ | ||||
| #define gst_c_return(vm, x) do { (vm)->ret = (x); return GST_RETURN_OK; } while (0) | ||||
|  | ||||
| /* Throw error from a c function */ | ||||
| #define gst_c_throw(vm, e) do { (vm)->ret = (e); return GST_RETURN_ERROR; } while (0) | ||||
|  | ||||
| /* Throw c string error from a c function */ | ||||
| #define gst_c_throwc(vm, e) gst_c_throw((vm), gst_load_cstring((vm), (e))) | ||||
|  | ||||
| /* Assert from a c function */ | ||||
| #define gst_c_assert(vm, cond, e) do {if (cond) gst_c_throw((vm), (e)); } while (0) | ||||
|  | ||||
| /* What to do when out of memory */ | ||||
| #ifndef GST_OUT_OF_MEMORY | ||||
| #include <stdlib.h> | ||||
| #include <stdio.h> | ||||
| #define GST_OUT_OF_MEMORY do { printf("out of memory.\n"); exit(1); } while (0) | ||||
| #endif | ||||
|  | ||||
| /* Max search depth for classes. */ | ||||
| #define GST_MAX_SEARCH_DEPTH 128 | ||||
|  | ||||
| /* Various types */ | ||||
| typedef enum GstType { | ||||
|     GST_NIL = 0, | ||||
|     GST_NUMBER, | ||||
|     GST_BOOLEAN, | ||||
|     GST_STRING, | ||||
|     GST_SYMBOL, | ||||
|     GST_ARRAY, | ||||
|     GST_TUPLE, | ||||
|     GST_THREAD, | ||||
|     GST_BYTEBUFFER, | ||||
|     GST_FUNCTION, | ||||
|     GST_CFUNCTION, | ||||
|     GST_OBJECT, | ||||
|     GST_USERDATA, | ||||
|     GST_FUNCENV, | ||||
|     GST_FUNCDEF | ||||
| } GstType; | ||||
|  | ||||
| /* The state of the virtual machine */ | ||||
| typedef struct Gst Gst; | ||||
|  | ||||
| /* A general gst value type */ | ||||
| typedef struct GstValue GstValue; | ||||
|  | ||||
| /* All of the gst types */ | ||||
| typedef double GstNumber; | ||||
| typedef uint8_t GstBoolean; | ||||
| typedef struct GstFunction GstFunction; | ||||
| typedef struct GstArray GstArray; | ||||
| typedef struct GstBuffer GstBuffer; | ||||
| typedef struct GstObject GstObject; | ||||
| typedef struct GstThread GstThread; | ||||
| typedef int (*GstCFunction)(Gst * vm); | ||||
|  | ||||
| /* Implementation details */ | ||||
| typedef struct GstUserdataHeader GstUserdataHeader; | ||||
| typedef struct GstFuncDef GstFuncDef; | ||||
| typedef struct GstFuncEnv GstFuncEnv; | ||||
|  | ||||
| /* Definitely implementation details */ | ||||
| typedef struct GstBucket GstBucket; | ||||
|  | ||||
| /* The general gst value type. Contains a large union and | ||||
|  * the type information of the value */ | ||||
| struct GstValue { | ||||
|     GstType type; | ||||
|     union { | ||||
|         GstBoolean boolean; | ||||
|         GstNumber number; | ||||
|         GstArray *array; | ||||
|         GstBuffer *buffer; | ||||
|         GstObject *object; | ||||
|         GstThread *thread; | ||||
|         GstValue *tuple; | ||||
|         GstCFunction cfunction; | ||||
|         GstFunction *function; | ||||
|         GstFuncEnv *env; | ||||
|         GstFuncDef *def; | ||||
|         const uint8_t *string; | ||||
|         const char *cstring; /* Alias for ease of use from c */ | ||||
|         /* Indirectly used union members */ | ||||
|         uint16_t *u16p; | ||||
|         uint16_t hws[4]; | ||||
|         uint8_t bytes[8]; | ||||
|         void *pointer; | ||||
|     } data; | ||||
| }; | ||||
|  | ||||
| /* A lightweight thread in gst. Does not correspond to | ||||
|  * operating system threads. Used in coroutines. */ | ||||
| struct GstThread { | ||||
|     uint32_t count; | ||||
|     uint32_t capacity; | ||||
|     GstValue *data; | ||||
|     enum { | ||||
|         GST_THREAD_PENDING = 0, | ||||
|         GST_THREAD_ALIVE, | ||||
|         GST_THREAD_DEAD | ||||
|     } status; | ||||
| }; | ||||
|  | ||||
| /* A dynamic array type. Useful for implementing a stack. */ | ||||
| struct GstArray { | ||||
|     uint32_t count; | ||||
|     uint32_t capacity; | ||||
|     GstValue *data; | ||||
| }; | ||||
|  | ||||
| /* A bytebuffer type. Used as a mutable string or string builder. */ | ||||
| struct GstBuffer { | ||||
|     uint32_t count; | ||||
|     uint32_t capacity; | ||||
|     uint8_t *data; | ||||
| }; | ||||
|  | ||||
| /* The main Gst type, an obect. Objects are just hashtables with some meta | ||||
|  * information attached in the meta value */ | ||||
| struct GstObject { | ||||
|     uint32_t count; | ||||
|     uint32_t capacity; | ||||
|     GstBucket **buckets; | ||||
|     GstObject *meta; | ||||
| }; | ||||
|  | ||||
| /* Some function defintion flags */ | ||||
| #define GST_FUNCDEF_FLAG_VARARG 1 | ||||
|  | ||||
| /* A function definition. Contains information need to instatiate closures. */ | ||||
| struct GstFuncDef { | ||||
|     uint32_t locals; | ||||
|     uint32_t arity; /* Not including varargs */ | ||||
|     uint32_t literalsLen; | ||||
|     uint32_t byteCodeLen; | ||||
|     uint32_t flags; | ||||
|     GstValue *literals; /* Contains strings, FuncDefs, etc. */ | ||||
|     uint16_t *byteCode; | ||||
| }; | ||||
|  | ||||
| /* A fuction environment */ | ||||
| struct GstFuncEnv { | ||||
|     GstThread *thread; /* When nil, index the local values */ | ||||
|     uint32_t stackOffset; /* Used as environment size when off stack */ | ||||
|     GstValue *values; | ||||
| }; | ||||
|  | ||||
| /* A function */ | ||||
| struct GstFunction { | ||||
|     GstFuncDef *def; | ||||
|     GstFuncEnv *env; | ||||
|     GstFunction *parent; | ||||
| }; | ||||
|  | ||||
| /* A hash table bucket in an object */ | ||||
| struct GstBucket { | ||||
|     GstValue key; | ||||
|     GstValue value; | ||||
|     GstBucket *next; | ||||
| }; | ||||
|  | ||||
| /* Contains information about userdata */ | ||||
| struct GstUserdataHeader { | ||||
|     uint32_t size; | ||||
|     GstObject *meta; | ||||
| }; | ||||
|  | ||||
| /* VM return status from c function */ | ||||
| #define GST_RETURN_OK 0 | ||||
| #define GST_RETURN_ERROR 1 | ||||
| #define GST_RETURN_CRASH 2 | ||||
| #define GST_RETURN_YIELD 3 | ||||
|  | ||||
| /* The VM state */ | ||||
| struct Gst { | ||||
|     /* Garbage collection */ | ||||
|     void *blocks; | ||||
|     uint32_t memoryInterval; | ||||
|     uint32_t nextCollection; | ||||
|     uint32_t black : 1; | ||||
|     /* String cache */ | ||||
|     const uint8_t **strings; | ||||
|     uint32_t stringsCapacity; | ||||
|     uint32_t stringsCount; | ||||
|     uint32_t stringsDeleted; | ||||
|     /* Thread */ | ||||
|     GstThread *thread; | ||||
|     /* A GC root */ | ||||
|     GstValue rootenv; | ||||
|     /* Return state */ | ||||
|     const char *crash; | ||||
|     uint32_t scratchFlags; | ||||
|     GstValue ret; /* Returned value from gst_start. Also holds errors. */ | ||||
| }; | ||||
|  | ||||
| /* Bytecode */ | ||||
| enum GstOpCode { | ||||
|     GST_OP_ADD = 0, /* Addition */ | ||||
|     GST_OP_SUB,     /* Subtraction */ | ||||
|     GST_OP_MUL,     /* Multiplication */ | ||||
|     GST_OP_DIV,     /* Division */ | ||||
|     GST_OP_MOD,     /* Modulo division */ | ||||
|     GST_OP_IDV,     /* Integer division */ | ||||
|     GST_OP_EXP,     /* Exponentiation */ | ||||
|     GST_OP_CCT,     /* Concatenation */ | ||||
|     GST_OP_NOT,     /* Boolean invert */ | ||||
|     GST_OP_NEG,     /* Unary negation */  | ||||
|     GST_OP_INV,     /* Unary multiplicative inverse */ | ||||
|     GST_OP_LEN,     /* Length */ | ||||
|     GST_OP_TYP,     /* Type */ | ||||
|     GST_OP_FLS,     /* Load false */ | ||||
|     GST_OP_TRU,     /* Load true */ | ||||
|     GST_OP_NIL,     /* Load nil */ | ||||
|     GST_OP_I16,     /* Load 16 bit signed integer */ | ||||
|     GST_OP_UPV,     /* Load upvalue */ | ||||
|     GST_OP_JIF,     /* Jump if */ | ||||
|     GST_OP_JMP,     /* Jump */ | ||||
|     GST_OP_SUV,     /* Set upvalue */ | ||||
|     GST_OP_CST,     /* Load constant */ | ||||
|     GST_OP_I32,     /* Load 32 bit signed integer */ | ||||
|     GST_OP_F64,     /* Load 64 bit IEEE double */ | ||||
|     GST_OP_MOV,     /* Move value */ | ||||
|     GST_OP_CLN,     /* Create a closure */ | ||||
|     GST_OP_EQL,     /* Check equality */ | ||||
|     GST_OP_LTN,     /* Check less than */ | ||||
|     GST_OP_LTE,     /* Check less than or equal to */ | ||||
|     GST_OP_ARR,     /* Create array */ | ||||
|     GST_OP_DIC,     /* Create object */ | ||||
|     GST_OP_TUP,     /* Create tuple */ | ||||
|     GST_OP_SET,     /* Assocaitive set */ | ||||
|     GST_OP_GET,     /* Associative get */ | ||||
|     GST_OP_ERR,     /* Throw error */ | ||||
|     GST_OP_TRY,     /* Begin try block */ | ||||
|     GST_OP_UTY,     /* End try block */ | ||||
|     GST_OP_RET,     /* Return from function */ | ||||
|     GST_OP_RTN,     /* Return nil */ | ||||
|     GST_OP_CAL,     /* Call function */ | ||||
|     GST_OP_TCL      /* Tail call */ | ||||
| }; | ||||
|  | ||||
| /****/ | ||||
| /* Buffer functions */ | ||||
| /****/ | ||||
|  | ||||
| GstBuffer *gst_buffer(Gst *vm, uint32_t capacity); | ||||
| void gst_buffer_ensure(Gst *vm, GstBuffer *buffer, uint32_t capacity); | ||||
| int gst_buffer_get(GstBuffer *buffer, uint32_t index); | ||||
| void gst_buffer_push(Gst *vm, GstBuffer *buffer, uint8_t c); | ||||
| void gst_buffer_append(Gst *vm, GstBuffer *buffer, const uint8_t *string, uint32_t length); | ||||
| const uint8_t *gst_buffer_to_string(Gst *vm, GstBuffer *buffer); | ||||
|  | ||||
| /* Define a push function for pushing a certain type to the buffer */ | ||||
| #define BUFFER_DEFINE(name, type) \ | ||||
| static void gst_buffer_push_##name(Gst * vm, GstBuffer * buffer, type x) { \ | ||||
|     union { type t; uint8_t bytes[sizeof(type)]; } u; \ | ||||
|     u.t = x; gst_buffer_append(vm, buffer, u.bytes, sizeof(type)); \ | ||||
| } | ||||
|  | ||||
| /****/ | ||||
| /* Array functions */ | ||||
| /****/ | ||||
|  | ||||
| GstArray *gst_array(Gst *vm, uint32_t capacity); | ||||
| GstValue gst_array_get(GstArray *array, uint32_t index); | ||||
| int gst_array_set(GstArray *array, uint32_t index, GstValue x); | ||||
| void gst_array_ensure(Gst *vm, GstArray *array, uint32_t capacity); | ||||
| void gst_array_push(Gst *vm, GstArray *array, GstValue x); | ||||
| GstValue gst_array_pop(GstArray *array); | ||||
|  | ||||
| /****/ | ||||
| /* Tuple functions */ | ||||
| /****/ | ||||
|  | ||||
| GstValue *gst_tuple(Gst *vm, uint32_t length); | ||||
|  | ||||
| /****/ | ||||
| /* String functions */ | ||||
| /****/ | ||||
|  | ||||
| uint8_t *gst_string_begin(Gst *vm, uint32_t len); | ||||
| const uint8_t *gst_string_end(Gst *vm, uint8_t *str); | ||||
| const uint8_t *gst_string_loadbuffer(Gst *vm, const uint8_t *buf, uint32_t len); | ||||
| const uint8_t *gst_cstring_to_string(Gst *vm, const char *cstring); | ||||
| GstValue gst_load_cstring(Gst *vm, const char *string); | ||||
| GstValue gst_load_csymbol(Gst *vm, const char *string); | ||||
| int gst_string_compare(const uint8_t *lhs, const uint8_t *rhs); | ||||
|  | ||||
| /****/ | ||||
| /* Userdata functions */ | ||||
| /****/ | ||||
|  | ||||
| void *gst_userdata(Gst *vm, uint32_t size, GstObject *meta); | ||||
|  | ||||
| /****/ | ||||
| /* Object functions */ | ||||
| /****/ | ||||
|  | ||||
| GstObject *gst_object(Gst *vm, uint32_t capacity); | ||||
| GstValue gst_object_get(GstObject *obj, GstValue key); | ||||
| GstValue gst_object_remove(Gst *vm, GstObject *obj, GstValue key); | ||||
| void gst_object_put(Gst *vm, GstObject *obj, GstValue key, GstValue value); | ||||
|  | ||||
| /****/ | ||||
| /* Threads */ | ||||
| /****/ | ||||
|  | ||||
| #define gst_thread_stack(t) ((t)->data + (t)->count) | ||||
| GstThread *gst_thread(Gst *vm, GstValue callee, uint32_t capacity);  | ||||
| void gst_thread_ensure_extra(Gst *vm, GstThread *thread, uint32_t extra);  | ||||
| void gst_thread_push(Gst *vm, GstThread *thread, GstValue x);  | ||||
| void gst_thread_pushnil(Gst *vm, GstThread *thread, uint32_t n);  | ||||
| void gst_thread_tuplepack(Gst *vm, GstThread *thread, uint32_t n);  | ||||
| GstValue *gst_thread_expand_callable(Gst *vm, GstThread *thread, GstValue callee); | ||||
| GstValue *gst_thread_beginframe(Gst *vm, GstThread *thread, GstValue callee, uint32_t arity);  | ||||
| void gst_thread_endframe(Gst *vm, GstThread *thread); | ||||
| GstValue *gst_thread_popframe(Gst *vm, GstThread *thread);  | ||||
| GstValue *gst_thread_tail(Gst *vm, GstThread *thread); | ||||
|  | ||||
|  | ||||
| /****/ | ||||
| /* Value manipulation */ | ||||
| /****/ | ||||
|  | ||||
| int gst_truthy(GstValue x); | ||||
| int gst_compare(GstValue x, GstValue y); | ||||
| int gst_equals(GstValue x, GstValue y); | ||||
| const char *gst_get(GstValue ds, GstValue key, GstValue *out); | ||||
| const char *gst_set(Gst *vm, GstValue ds, GstValue key, GstValue value); | ||||
| const uint8_t *gst_to_string(Gst *vm, GstValue x); | ||||
| uint32_t gst_hash(GstValue x); | ||||
| GstValue gst_get_class(GstValue x); | ||||
| const char *gst_set_class(GstValue obj, GstValue class); | ||||
| int gst_length(Gst *vm, GstValue x, GstValue *len); | ||||
|  | ||||
| /****/ | ||||
| /* Serialization */ | ||||
| /****/ | ||||
|  | ||||
| /** | ||||
|  * Data format | ||||
|  * State is encoded as a string of unsigned bytes. | ||||
|  * | ||||
|  * Types: | ||||
|  * | ||||
|  * Byte 0 to 200: small integer byte - 100 | ||||
|  * Byte 201: Nil | ||||
|  * Byte 202: True | ||||
|  * Byte 203: False | ||||
|  * Byte 204: Number  - double format | ||||
|  * Byte 205: String  - [u32 length]*[u8... characters] | ||||
|  * Byte 206: Symbol  - [u32 length]*[u8... characters] | ||||
|  * Byte 207: Buffer  - [u32 length]*[u8... characters] | ||||
|  * Byte 208: Array   - [u32 length]*[value... elements] | ||||
|  * Byte 209: Tuple   - [u32 length]*[value... elements] | ||||
|  * Byte 210: Thread  - [u8 state][u32 frames]*[[value callee][value env] | ||||
|  *  [u32 pcoffset][u32 erroffset][u16 ret][u16 errloc][u16 size]*[value ...stack] | ||||
|  * Byte 211: Object  - [value meta][u32 length]*2*[value... kvs] | ||||
|  * Byte 212: FuncDef - [u32 locals][u32 arity][u32 flags][u32 literallen]*[value... | ||||
|  *  literals][u32 bytecodelen]*[u16... bytecode] | ||||
|  * Byte 213: FunEnv  - [value thread][u32 length]*[value ...upvalues] | ||||
|  *  (upvalues is not read if thread is a thread object) | ||||
|  * Byte 214: Func    - [value parent][value def][value env] | ||||
|  *  (nil values indicate empty) | ||||
|  * Byte 215: LUdata  - [value meta][u32 length]*[u8... bytes] | ||||
|  * Byte 216: CFunc   - [u32 length]*[u8... idstring] | ||||
|  * Byte 217: Ref     - [u32 id] | ||||
|  */ | ||||
|  | ||||
| const char *gst_deserialize( | ||||
|         Gst *vm, | ||||
|         const uint8_t *data, | ||||
|         uint32_t len, | ||||
|         GstValue *out, | ||||
|         const uint8_t *nextData); | ||||
| const char *gst_serialize(Gst *vm, GstBuffer *buffer, GstValue x); | ||||
|  | ||||
| /****/ | ||||
| /* GC */ | ||||
| /****/ | ||||
|  | ||||
| #define GST_MEMTAG_STRING 4 | ||||
|  | ||||
| void gst_mark(Gst *vm, GstValue *x); | ||||
| void gst_sweep(Gst *vm); | ||||
| void *gst_alloc(Gst *vm, uint32_t size); | ||||
| void *gst_zalloc(Gst *vm, uint32_t size); | ||||
| void gst_mem_tag(void *mem, uint32_t tags); | ||||
| void gst_collect(Gst *vm); | ||||
| void gst_maybe_collect(Gst *vm); | ||||
| void gst_clear_memory(Gst *vm); | ||||
|  | ||||
| /****/ | ||||
| /* VM */ | ||||
| /****/ | ||||
|  | ||||
| void gst_init(Gst *vm); | ||||
| void gst_deinit(Gst *vm); | ||||
| int gst_run(Gst *vm, GstValue func); | ||||
| int gst_continue(Gst *vm); | ||||
| int gst_call(Gst *vm, GstValue callee, uint32_t arity, GstValue *args); | ||||
| GstValue gst_arg(Gst *vm, uint16_t index); | ||||
| void gst_set_arg(Gst *vm, uint16_t index, GstValue x); | ||||
| uint16_t gst_count_args(Gst *vm); | ||||
|  | ||||
| #endif // GST_H_defined | ||||
							
								
								
									
										40
									
								
								include/gst/parse.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								include/gst/parse.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| #ifndef PARSE_H_ONYWMADW | ||||
| #define PARSE_H_ONYWMADW | ||||
|  | ||||
| #include <gst/gst.h> | ||||
|  | ||||
| typedef struct GstParser GstParser; | ||||
| typedef struct GstParseState GstParseState; | ||||
|  | ||||
| /* Holds the parsing state */ | ||||
| struct GstParser { | ||||
|     Gst *vm; | ||||
|     const char *error; | ||||
|     GstParseState *data; | ||||
|     GstValue value; | ||||
|     uint32_t count; | ||||
|     uint32_t cap; | ||||
|     uint32_t index; | ||||
|     uint32_t flags; | ||||
|     uint32_t quoteCount; | ||||
|     enum { | ||||
| 		GST_PARSER_PENDING = 0, | ||||
| 		GST_PARSER_FULL, | ||||
| 		GST_PARSER_ERROR | ||||
|     } status; | ||||
| }; | ||||
|  | ||||
| /* Some parser flags */ | ||||
| #define GST_PARSER_FLAG_INCOMMENT 1 | ||||
| #define GST_PARSER_FLAG_EXPECTING_COMMENT 2 | ||||
|  | ||||
| /* Initialize a parser */ | ||||
| void gst_parser(GstParser *p, Gst *vm); | ||||
|  | ||||
| /* Parse a c style string. Returns number of bytes read */ | ||||
| int gst_parse_cstring(GstParser *p, const char *string); | ||||
|  | ||||
| /* Parse a gst string. Returns number of bytes read */ | ||||
| int gst_parse_string(GstParser *p, const uint8_t *string); | ||||
|  | ||||
| #endif /* end of include guard: PARSE_H_ONYWMADW */ | ||||
							
								
								
									
										11
									
								
								include/gst/stl.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								include/gst/stl.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| #ifndef stl_h_INCLUDED | ||||
| #define stl_h_INCLUDED | ||||
|  | ||||
| #include <gst/gst.h> | ||||
| #include <gst/compile.h> | ||||
|  | ||||
| /* Load the standard library */ | ||||
| void gst_stl_load(GstCompiler *c); | ||||
|  | ||||
| #endif // stl_h_INCLUDED | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose