From: Mike D. Lowis Date: Wed, 23 Sep 2015 19:12:52 +0000 (-0400) Subject: Rewrote main.c to use new public interface X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=0ac76be3ecce5154c579872cab28f46101f24372;p=proto%2Fgir.git Rewrote main.c to use new public interface --- diff --git a/build.rb b/build.rb index a7c7155..8c026f1 100755 --- a/build.rb +++ b/build.rb @@ -18,7 +18,7 @@ end runtime_libs = []#['build/lib/libc.a'] # Build the parser -main_env.Program('parser', FileList['source/*.c'] + runtime_libs) +main_env.Program('gir', FileList['source/*.c'] + runtime_libs) #------------------------------------------------------------------------------ # Test Build Targets diff --git a/source/gir.c b/source/gir.c new file mode 100644 index 0000000..d47d3c1 --- /dev/null +++ b/source/gir.c @@ -0,0 +1,114 @@ +#include "gir.h" +#include "gir_internals.h" + +struct Obj { + uint32_t type; + uint8_t data[]; +}; + +Obj* Lobby; +Obj* Nil; +Obj* Bool; +Obj* True; +Obj* False; +Obj* Num; +Obj* String; +Obj* Symbol; +Obj* List; +Obj* Array; +Obj* ByteArray; +Obj* Map; +Obj* Set; +Obj* Block; + +/* Private API Declarations + *****************************************************************************/ + +/* Top-Level API + *****************************************************************************/ +void gir_init(void* stack_btm) +{ + (void)stack_btm; +} + +void gir_deinit(void) +{ +} + +Obj* gir_evalexpr(FILE* input) +{ + (void)input; + return Nil; +} + +void gir_evalfile(FILE* input, const char* prompt) +{ + extern void exec_file(FILE* file, const char* prompt); + exec_file(input, prompt); +} + +Obj* gir_send(Obj* rcvr, const char* sel, ...) +{ + (void)rcvr; + (void)sel; + return Nil; +} + + +/* Constructors + *****************************************************************************/ +Obj* gir_mknum(double val) +{ + (void)val; + return Nil; +} + +Obj* gir_mkstring(const char* val) +{ + (void)val; + return Nil; +} + +Obj* gir_mksymbol(const char* val) +{ + (void)val; + return Nil; +} + +Obj* gir_mklist(size_t num, ...) +{ + (void)num; + return Nil; +} + +Obj* gir_mkarray(size_t num, ...) +{ + (void)num; + return Nil; +} + +Obj* gir_mkbytearray(size_t num, uint8_t* val) +{ + (void)num; + (void)val; + return Nil; +} + +Obj* gir_mkmap(void) +{ + return Nil; +} + +Obj* gir_mkset(void) +{ + return Nil; +} + +Obj* gir_mkblock(void) +{ + return Nil; +} + +/* Private API Definitions + *****************************************************************************/ + diff --git a/source/gir.h b/source/gir.h new file mode 100644 index 0000000..ad8a57c --- /dev/null +++ b/source/gir.h @@ -0,0 +1,59 @@ +/** + @file gir.h +*/ +#ifndef GIR_H +#define GIR_H + +#include +#include + +typedef struct Obj Obj; + +void gir_init(void* stack_btm); +void gir_deinit(void); +Obj* gir_evalexpr(FILE* input); +void gir_evalfile(FILE* input, const char* prompt); +Obj* gir_send(Obj* rcvr, const char* sel, ...); + +/* +Lobby + Nil + Bool + True + False + Num + String + Symbol + List + Array + ByteArray + Map + Set + Block +*/ +extern Obj* Lobby; +extern Obj* Nil; +extern Obj* Bool; +extern Obj* True; +extern Obj* False; +extern Obj* Num; +extern Obj* String; +extern Obj* Symbol; +extern Obj* List; +extern Obj* Array; +extern Obj* ByteArray; +extern Obj* Map; +extern Obj* Set; +extern Obj* Block; + +Obj* gir_mknum(double val); +Obj* gir_mkstring(const char* val); +Obj* gir_mksymbol(const char* val); +Obj* gir_mklist(size_t num, ...); +Obj* gir_mkarray(size_t num, ...); +Obj* gir_mkbytearray(size_t num, uint8_t* val); +Obj* gir_mkmap(void); +Obj* gir_mkset(void); +Obj* gir_mkblock(void); + +#endif /* GIR_H */ diff --git a/source/main.c b/source/main.c index 37ed425..71ad52e 100644 --- a/source/main.c +++ b/source/main.c @@ -1,13 +1,13 @@ -#include +#include "gir.h" + /* Main *****************************************************************************/ int main(int argc, char** argv) { - extern void world_init(void); - extern void exec_file(FILE* file, const char* prompt); - world_init(); - exec_file(stdin, ":> "); (void)argc; (void)argv; + gir_init((void*)&(int){0}); + gir_evalfile(stdin, ":> "); + gir_deinit(); return 0; } diff --git a/source/world.c b/source/world.c deleted file mode 100644 index dab195c..0000000 --- a/source/world.c +++ /dev/null @@ -1,64 +0,0 @@ -/** - @file world.c.c - @brief See header for details - */ -//#include "world.h" - -#if 0 -#include "set.h" -#include "map.h" - -typedef struct object_t { - struct object_t* parent; - map_t* slots; - uint8_t value[]; -} object_t; - -set_t* Selectors = NULL; -object_t* Lobby = NULL; -object_t* Object = NULL; -object_t* Number = NULL; -object_t* String = NULL; -object_t* Array = NULL; -object_t* ByteArray = NULL; -object_t* HashSet = NULL; -object_t* HashMap = NULL; - -void object_free(void* obj) -{ - object_t* object = (object_t*)obj; - if (object->parent) - mem_release(object->parent); - if (object->slots) - mem_release(object->slots); -} - -object_t* object_clone(object_t* parent) -{ - object_t* obj = (object_t*)mem_allocate(sizeof(object_t), &object_free); - if (NULL != parent) - mem_retain(parent); - obj->parent = parent; - obj->slots = map_new(NULL, NULL); - return obj; -} - - -void world_init(void) -{ - Selectors = set_new(NULL, NULL); - Lobby = object_clone(NULL); - Object = object_clone(Lobby); - Number = object_clone(Object); - String = object_clone(Object); - Array = object_clone(Object); - ByteArray = object_clone(Object); - HashSet = object_clone(Object); - HashMap = object_clone(Object); -} -#endif - -void world_init(void) -{ -} -