X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/255fe37ec14bde323d6526abd43136ba2b1c9903..88c31c1e00d8a528f46aabe2e4886a78c8eedd3b:/sig/ffi_type.cpp diff --git a/sig/ffi_type.cpp b/sig/ffi_type.cpp index 5c16db3..e0c4d0f 100644 --- a/sig/ffi_type.cpp +++ b/sig/ffi_type.cpp @@ -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 {{{ */ @@ -24,8 +24,12 @@ #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::GetFFI(CYPool &pool) const { return &ffi_type_sint; } +#ifdef __SIZEOF_INT128__ +template <> +ffi_type *Primitive::GetFFI(CYPool &pool) const { + _assert(false); +} +#endif + template <> ffi_type *Primitive::GetFFI(CYPool &pool) const { return &ffi_type_slong; @@ -84,6 +95,13 @@ ffi_type *Primitive::GetFFI(CYPool &pool) const { return &ffi_type_uint; } +#ifdef __SIZEOF_INT128__ +template <> +ffi_type *Primitive::GetFFI(CYPool &pool) const { + _assert(false); +} +#endif + template <> ffi_type *Primitive::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);