]> git.saurik.com Git - cycript.git/blobdiff - sig/ffi_type.cpp
Compile Java support for armv6 where we use JamVM.
[cycript.git] / sig / ffi_type.cpp
index 5c16db323e34b29498a66b65c87e26f5f3971d66..e0c4d0f900bd41e73a873563c266ac02cb98540c 100644 (file)
@@ -1,5 +1,5 @@
-/* Cycript - Optimizing JavaScript Compiler/Runtime
- * Copyright (C) 2009-2015  Jay Freeman (saurik)
+/* Cycript - The Truly Universal Scripting Language
+ * Copyright (C) 2009-2016  Jay Freeman (saurik)
 */
 
 /* GNU Affero General Public License, Version 3 {{{ */
 #include "sig/ffi_type.hpp"
 #include "sig/types.hpp"
 
+#if FFI_LONG_LONG_MAX == 9223372036854775807LL
 #define ffi_type_slonglong ffi_type_sint64
 #define ffi_type_ulonglong ffi_type_uint64
+#else
+#error need to configure for long long
+#endif
 
 namespace sig {
 
@@ -59,6 +63,13 @@ ffi_type *Primitive<signed int>::GetFFI(CYPool &pool) const {
     return &ffi_type_sint;
 }
 
+#ifdef __SIZEOF_INT128__
+template <>
+ffi_type *Primitive<signed __int128>::GetFFI(CYPool &pool) const {
+    _assert(false);
+}
+#endif
+
 template <>
 ffi_type *Primitive<signed long int>::GetFFI(CYPool &pool) const {
     return &ffi_type_slong;
@@ -84,6 +95,13 @@ ffi_type *Primitive<unsigned int>::GetFFI(CYPool &pool) const {
     return &ffi_type_uint;
 }
 
+#ifdef __SIZEOF_INT128__
+template <>
+ffi_type *Primitive<unsigned __int128>::GetFFI(CYPool &pool) const {
+    _assert(false);
+}
+#endif
+
 template <>
 ffi_type *Primitive<unsigned long int>::GetFFI(CYPool &pool) const {
     return &ffi_type_ulong;
@@ -111,6 +129,7 @@ ffi_type *String::GetFFI(CYPool &pool) const {
     return &ffi_type_pointer;
 }
 
+#ifdef CY_OBJECTIVEC
 ffi_type *Meta::GetFFI(CYPool &pool) const {
     return &ffi_type_pointer;
 }
@@ -118,6 +137,7 @@ ffi_type *Meta::GetFFI(CYPool &pool) const {
 ffi_type *Selector::GetFFI(CYPool &pool) const {
     return &ffi_type_pointer;
 }
+#endif
 
 ffi_type *Bits::GetFFI(CYPool &pool) const {
     /* XXX: we can totally make this work */
@@ -145,13 +165,19 @@ ffi_type *Array::GetFFI(CYPool &pool) const {
     return ffi;
 }
 
+#ifdef CY_OBJECTIVEC
 ffi_type *Object::GetFFI(CYPool &pool) const {
     return &ffi_type_pointer;
 }
+#endif
+
+ffi_type *Enum::GetFFI(CYPool &pool) const {
+    return type.GetFFI(pool);
+}
 
 ffi_type *Aggregate::GetFFI(CYPool &pool) const {
-    // XXX: we can totally make overlap work
     _assert(!overlap);
+    _assert(signature.count != _not(size_t));
 
     ffi_type *ffi(new(pool) ffi_type());
     ffi->size = 0;
@@ -177,9 +203,11 @@ ffi_type *Function::GetFFI(CYPool &pool) const {
     _assert(false);
 }
 
+#ifdef CY_OBJECTIVEC
 ffi_type *Block::GetFFI(CYPool &pool) const {
     return &ffi_type_pointer;
 }
+#endif
 
 void sig_ffi_cif(CYPool &pool, size_t variadic, const Signature &signature, ffi_cif *cif) {
     _assert(signature.count != 0);