]> git.saurik.com Git - cycript.git/blobdiff - sig/types.hpp
Move x.type() to typeid(x) and implement variadic.
[cycript.git] / sig / types.hpp
index d437475091e978f8aa9c72179cfe2544f6a3c97d..f0530466c8a01d5c4e364cc36bdfb286a282daf7 100644 (file)
@@ -37,6 +37,7 @@
 
 class CYPool;
 struct CYTypedIdentifier;
+struct CYTypedParameter;
 
 namespace sig {
 
@@ -65,10 +66,6 @@ struct Type {
     virtual ffi_type *GetFFI(CYPool &pool) const = 0;
     virtual void PoolFFI(CYPool *pool, JSContextRef context, ffi_type *ffi, void *data, JSValueRef value) const = 0;
     virtual JSValueRef FromFFI(JSContextRef context, ffi_type *ffi, void *data, bool initialize = false, JSObjectRef owner = NULL) const = 0;
-
-    virtual size_t Translate(Type *&type) const {
-        return _not(size_t);
-    }
 };
 
 template <typename Type_>
@@ -223,11 +220,6 @@ struct Array :
     ffi_type *GetFFI(CYPool &pool) const override;
     void PoolFFI(CYPool *pool, JSContextRef context, ffi_type *ffi, void *data, JSValueRef value) const override;
     JSValueRef FromFFI(JSContextRef context, ffi_type *ffi, void *data, bool initialize, JSObjectRef owner) const override;
-
-    size_t Translate(Type *&type) const override {
-        type = &this->type;
-        return size;
-    }
 };
 
 struct Object :
@@ -279,15 +271,25 @@ struct Callable :
     Type
 {
     Signature signature;
+
+    CYTypedIdentifier *Decode(CYPool &pool) const override;
+    virtual CYTypedIdentifier *Modify(CYPool &pool, CYTypedIdentifier *result, CYTypedParameter *parameters) const = 0;
 };
 
 struct Function :
     Callable
 {
+    bool variadic;
+
+    Function(bool variadic) :
+        variadic(variadic)
+    {
+    }
+
     Function *Copy(CYPool &pool, const char *name = NULL) const override;
 
     const char *Encode(CYPool &pool) const override;
-    CYTypedIdentifier *Decode(CYPool &pool) const override;
+    CYTypedIdentifier *Modify(CYPool &pool, CYTypedIdentifier *result, CYTypedParameter *parameters) const override;
 
     ffi_type *GetFFI(CYPool &pool) const override;
     void PoolFFI(CYPool *pool, JSContextRef context, ffi_type *ffi, void *data, JSValueRef value) const override;
@@ -301,6 +303,7 @@ struct Block :
 
     const char *Encode(CYPool &pool) const override;
     CYTypedIdentifier *Decode(CYPool &pool) const override;
+    CYTypedIdentifier *Modify(CYPool &pool, CYTypedIdentifier *result, CYTypedParameter *parameters) const override;
 
     ffi_type *GetFFI(CYPool &pool) const override;
     void PoolFFI(CYPool *pool, JSContextRef context, ffi_type *ffi, void *data, JSValueRef value) const override;