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
--- /dev/null
+#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
+ *****************************************************************************/
+
--- /dev/null
+/**
+ @file gir.h
+*/
+#ifndef GIR_H
+#define GIR_H
+
+#include <stdio.h>
+#include <stdint.h>
+
+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 */
-#include <stdio.h>
+#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;
}
+++ /dev/null
-/**
- @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)
-{
-}
-