]> git.mdlowis.com Git - proto/gir.git/commitdiff
Rewrote main.c to use new public interface
authorMike D. Lowis <mike.lowis@gentex.com>
Wed, 23 Sep 2015 19:12:52 +0000 (15:12 -0400)
committerMike D. Lowis <mike.lowis@gentex.com>
Wed, 23 Sep 2015 19:12:52 +0000 (15:12 -0400)
build.rb
source/gir.c [new file with mode: 0644]
source/gir.h [new file with mode: 0644]
source/main.c
source/world.c [deleted file]

index a7c7155bf9c9e57cec45edbe26cd25e991598e20..8c026f1f4e4b644a33320ccf13d7e06b5a2dde15 100755 (executable)
--- 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 (file)
index 0000000..d47d3c1
--- /dev/null
@@ -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 (file)
index 0000000..ad8a57c
--- /dev/null
@@ -0,0 +1,59 @@
+/**
+  @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 */
index 37ed4254da06aa7ae839af87ccb44cc654da3f22..71ad52ecf5141222507c031c3a4d50600a165e6d 100644 (file)
@@ -1,13 +1,13 @@
-#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;
 }
 
diff --git a/source/world.c b/source/world.c
deleted file mode 100644 (file)
index dab195c..0000000
+++ /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)
-{
-}
-