]> git.lizzy.rs Git - uwu-lang.git/blobdiff - api/vm.h
Unify value types
[uwu-lang.git] / api / vm.h
index 94103d5c5a610c908d6a4ceddabd312865d1bbb9..7286f63b93373578ed0bc77549fd537ba519714e 100644 (file)
--- a/api/vm.h
+++ b/api/vm.h
@@ -16,23 +16,23 @@ typedef struct
        void *(*copy  )(void *data);
        void  (*delete)(void *data);
        char *(*print )(void *data);
-} UwUVMNativeType;
+} UwUVMType;
 
 typedef struct
 {
        void *data;
-       UwUVMNativeType *type;
-} UwUVMNativeValue;
+       UwUVMType *type;
+} UwUVMValue;
 
 typedef struct UwUVMArgs
 {
        size_t num;
-       struct UwUVMValue       **evaluated;
+       UwUVMValue              **evaluated;
        struct UwUVMExpression *unevaluated;
        struct UwUVMArgs *super;
 } UwUVMArgs;
 
-typedef struct UwUVMValue (*UwUVMNativeFunction)(UwUVMArgs *args);
+typedef UwUVMValue (*UwUVMNativeFunction)(UwUVMArgs *args);
 
 typedef struct
 {
@@ -44,24 +44,6 @@ typedef struct
        } value;
 } UwUVMFunction;
 
-typedef struct UwUVMValue
-{
-       enum
-       {
-               VT_INT,
-               VT_STR,
-               VT_REF,
-               VT_NAT,
-       } type;
-       union
-       {
-               int           int_value;
-               char         *str_value;
-               UwUVMFunction   *ref_value;
-               UwUVMNativeValue nat_value;
-       } value;
-} UwUVMValue;
-
 typedef struct UwUVMExpression
 {
        ExpressionType type;
@@ -83,8 +65,8 @@ typedef struct
 {
        void *api_library;
        UwUVMFunction *main_function;
-       UwUVMFunction **functions;
-       size_t   num_functions;
+       UwUVMFunction     **functions;
+       size_t          num_functions;
        void     **libraries;
        size_t num_libraries;
 } UwUVMProgram;