From e2ce853b4a48f8278dc46e4143aa845b18948651 Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Sat, 2 Jan 2016 14:20:43 -0800 Subject: [PATCH] Fix compilation errors using gcc from Android NDK. --- Analysis.cpp | 2 ++ Console.cpp | 4 +++- Decode.cpp | 6 ++++++ Execute.cpp | 10 ++++++++++ Handler.cpp | 6 +++++- JavaScript.hpp | 3 +++ Makefile.am | 1 + Makefile.in | 23 ++++++++++++----------- Parser.ypp.in | 1 + android-configure.sh | 4 +++- android.sh | 11 ++++++++--- configure | 11 +++++++++-- configure.ac | 10 ++++++---- sig/copy.cpp | 6 ++++++ sig/ffi_type.cpp | 6 ++++++ sig/parse.cpp | 14 ++++++++++++++ sig/types.hpp | 6 ++++++ 17 files changed, 101 insertions(+), 23 deletions(-) diff --git a/Analysis.cpp b/Analysis.cpp index 6bacfa0..8a03ebf 100644 --- a/Analysis.cpp +++ b/Analysis.cpp @@ -22,8 +22,10 @@ #define __USE_EXTERN_INLINES #include +#include #include +#include #include #include diff --git a/Console.cpp b/Console.cpp index 6587106..31a2dbb 100644 --- a/Console.cpp +++ b/Console.cpp @@ -219,7 +219,9 @@ static void sigint(int) { case Parsing: longjmp(ctrlc_, 1); case Running: +#ifndef __ANDROID__ CYCancel(); +#endif return; case Sending: return; @@ -1024,7 +1026,7 @@ int Main(int argc, char * const argv[], char const * const envp[]) { } } file(address.sun_path); - _syscall(bind(server, reinterpret_cast(&address), SUN_LEN(&address))); + _syscall(bind(server, reinterpret_cast(&address), sizeof(address))); _syscall(chmod(address.sun_path, 0777)); _syscall(listen(server, 1)); diff --git a/Decode.cpp b/Decode.cpp index b4998b4..823e6b4 100644 --- a/Decode.cpp +++ b/Decode.cpp @@ -108,6 +108,7 @@ CYTypedIdentifier *String::Decode(CYPool &pool) const { return $ CYTypedIdentifier($ CYTypeCharacter(CYTypeNeutral), $ CYTypePointerTo()); } +#ifdef CY_OBJECTIVEC CYTypedIdentifier *Meta::Decode(CYPool &pool) const { return $ CYTypedIdentifier($ CYTypeVariable("Class")); } @@ -115,6 +116,7 @@ CYTypedIdentifier *Meta::Decode(CYPool &pool) const { CYTypedIdentifier *Selector::Decode(CYPool &pool) const { return $ CYTypedIdentifier($ CYTypeVariable("SEL")); } +#endif CYTypedIdentifier *Bits::Decode(CYPool &pool) const { _assert(false); @@ -128,12 +130,14 @@ CYTypedIdentifier *Array::Decode(CYPool &pool) const { return CYDecodeType(pool, &type)->Modify($ CYTypeArrayOf($D(size))); } +#ifdef CY_OBJECTIVEC CYTypedIdentifier *Object::Decode(CYPool &pool) const { if (name == NULL) return $ CYTypedIdentifier($ CYTypeVariable("id")); else return $ CYTypedIdentifier($ CYTypeVariable(name), $ CYTypePointerTo()); } +#endif CYTypedIdentifier *Aggregate::Decode(CYPool &pool) const { _assert(!overlap); @@ -162,6 +166,7 @@ CYTypedIdentifier *Function::Modify(CYPool &pool, CYTypedIdentifier *result, CYT return result->Modify($ CYTypeFunctionWith(variadic, parameters)); } +#ifdef CY_OBJECTIVEC CYTypedIdentifier *Block::Modify(CYPool &pool, CYTypedIdentifier *result, CYTypedParameter *parameters) const { return result->Modify($ CYTypeBlockWith(parameters)); } @@ -171,6 +176,7 @@ CYTypedIdentifier *Block::Decode(CYPool &pool) const { return $ CYTypedIdentifier($ CYTypeVariable("NSBlock"), $ CYTypePointerTo()); return Callable::Decode(pool); } +#endif } diff --git a/Execute.cpp b/Execute.cpp index ea882eb..784c20e 100644 --- a/Execute.cpp +++ b/Execute.cpp @@ -1465,8 +1465,12 @@ static JSValueRef Type_callAsFunction_arrayOf(JSContextRef context, JSObjectRef } CYCatch(NULL) } static JSValueRef Type_callAsFunction_blockWith(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { +#ifdef CY_OBJECTIVEC sig::Block type; return Type_callAsFunction_$With(context, object, _this, count, arguments, type, exception); +#else + _assert(false); +#endif } static JSValueRef Type_callAsFunction_constant(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry { @@ -1857,18 +1861,22 @@ class ExecutionHandle { } }; +#ifndef __ANDROID__ static volatile bool cancel_; static bool CYShouldTerminate(JSContextRef context, void *arg) { return cancel_; } +#endif _visible const char *CYExecute(JSContextRef context, CYPool &pool, CYUTF8String code) { ExecutionHandle handle(context); +#ifndef __ANDROID__ cancel_ = false; if (&JSContextGroupSetExecutionTimeLimit != NULL) JSContextGroupSetExecutionTimeLimit(JSContextGetGroup(context), 0.5, &CYShouldTerminate, NULL); +#endif try { JSValueRef result(_jsccall(JSEvaluateScript, context, CYJSString(code), NULL, NULL, 0)); @@ -1885,9 +1893,11 @@ _visible const char *CYExecute(JSContextRef context, CYPool &pool, CYUTF8String } } +#ifndef __ANDROID__ _visible void CYCancel() { cancel_ = true; } +#endif const char *CYPoolLibraryPath(CYPool &pool); diff --git a/Handler.cpp b/Handler.cpp index 1201951..da458d6 100644 --- a/Handler.cpp +++ b/Handler.cpp @@ -166,7 +166,7 @@ static void CYHandleSocket(const char *path) { address.sun_family = AF_UNIX; strcpy(address.sun_path, path); - _syscall(connect(socket, reinterpret_cast(&address), SUN_LEN(&address))); + _syscall(connect(socket, reinterpret_cast(&address), sizeof(address))); CYInitializeDynamic(); CYHandleClient(socket); @@ -189,7 +189,11 @@ _extern char *MSmain0(int argc, char *argv[]) { try { if (handle == NULL) { Dl_info info; _assert(dladdr(reinterpret_cast(&MSmain0), &info) != 0); +#ifdef __ANDROID__ + handle = dlopen(info.dli_fname, 0); +#else handle = dlopen(info.dli_fname, RTLD_NOLOAD); +#endif } return NULL; diff --git a/JavaScript.hpp b/JavaScript.hpp index 7fa57f2..04c1e2f 100644 --- a/JavaScript.hpp +++ b/JavaScript.hpp @@ -63,7 +63,10 @@ JSObjectRef CYGetGlobalObject(JSContextRef context); extern "C" void CYSetupContext(JSGlobalContextRef context); const char *CYExecute(JSContextRef context, CYPool &pool, CYUTF8String code); + +#ifndef __ANDROID__ void CYCancel(); +#endif void CYSetArgs(int argc, const char *argv[]); diff --git a/Makefile.am b/Makefile.am index a3b0820..681e635 100644 --- a/Makefile.am +++ b/Makefile.am @@ -126,6 +126,7 @@ libcycript_la_LIBADD += $(LTPYTHON) endif if CY_OBJECTIVEC +AM_CPPFLAGS += -DCY_OBJECTIVEC filters += ObjectiveC libcycript_la_SOURCES += ObjectiveC/Output.cpp ObjectiveC/Replace.cpp ObjectiveC/Library.mm libcycript_la_LIBADD += $(LTOBJECTIVEC) diff --git a/Makefile.in b/Makefile.in index 3a9a49c..d984ebc 100644 --- a/Makefile.in +++ b/Makefile.in @@ -132,12 +132,13 @@ host_triplet = @host@ @CY_PYTHON_TRUE@am__append_19 = Python @CY_PYTHON_TRUE@am__append_20 = Python/Execute.cpp @CY_PYTHON_TRUE@am__append_21 = $(LTPYTHON) -@CY_OBJECTIVEC_TRUE@am__append_22 = ObjectiveC -@CY_OBJECTIVEC_TRUE@am__append_23 = ObjectiveC/Output.cpp ObjectiveC/Replace.cpp ObjectiveC/Library.mm -@CY_OBJECTIVEC_TRUE@am__append_24 = $(LTOBJECTIVEC) -@CY_ATTACH_TRUE@am__append_25 = Handler.cpp -@CY_ATTACH_TRUE@@CY_CONSOLE_TRUE@am__append_26 = Inject.cpp -@CY_ATTACH_TRUE@@CY_CONSOLE_TRUE@am__append_27 = -DCY_ATTACH +@CY_OBJECTIVEC_TRUE@am__append_22 = -DCY_OBJECTIVEC +@CY_OBJECTIVEC_TRUE@am__append_23 = ObjectiveC +@CY_OBJECTIVEC_TRUE@am__append_24 = ObjectiveC/Output.cpp ObjectiveC/Replace.cpp ObjectiveC/Library.mm +@CY_OBJECTIVEC_TRUE@am__append_25 = $(LTOBJECTIVEC) +@CY_ATTACH_TRUE@am__append_26 = Handler.cpp +@CY_ATTACH_TRUE@@CY_CONSOLE_TRUE@am__append_27 = Inject.cpp +@CY_ATTACH_TRUE@@CY_CONSOLE_TRUE@am__append_28 = -DCY_ATTACH subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ @@ -588,7 +589,7 @@ SUBDIRS = ACLOCAL_AMFLAGS = -I m4 AM_CPPFLAGS = -DYYDEBUG=1 -DCY_SYSTEM="\"$(CY_SYSTEM)\"" -include \ config.h -include $(srcdir)/unconfig.h $(am__append_5) \ - $(am__append_27) + $(am__append_22) $(am__append_28) AM_CFLAGS = -fvisibility=hidden AM_CXXFLAGS = -fvisibility=hidden AM_OBJCXXFLAGS = -fvisibility=hidden -fobjc-exceptions @@ -600,15 +601,15 @@ lib_LTLIBRARIES = libcycript.la libcycript_la_LDFLAGS = $(CY_LDFLAGS) libcycript_la_LIBADD = $(LTLIBUV) $(LTLIBFFI) $(LTLIBSQLITE3) \ $(LTLIBGCC) -ldl $(am__append_3) $(am__append_13) \ - $(am__append_18) $(am__append_21) $(am__append_24) + $(am__append_18) $(am__append_21) $(am__append_25) libcycript_la_SOURCES = ConvertUTF.c Decode.cpp Driver.cpp Error.cpp \ Highlight.cpp Library.cpp Network.cpp Output.cpp Replace.cpp \ Syntax.cpp Parser.cpp Scanner.cpp $(am__append_1) \ $(am__append_2) $(am__append_12) $(am__append_17) \ - $(am__append_20) $(am__append_23) $(am__append_25) + $(am__append_20) $(am__append_24) $(am__append_26) filters = $(am__append_6) $(am__append_11) $(am__append_16) \ - $(am__append_19) $(am__append_22) -@CY_CONSOLE_TRUE@cycript_SOURCES = Console.cpp $(am__append_26) + $(am__append_19) $(am__append_23) +@CY_CONSOLE_TRUE@cycript_SOURCES = Console.cpp $(am__append_27) @CY_CONSOLE_TRUE@cycript_LDADD = libcycript.la $(LTLIBREADLINE) $(LTLIBTERMCAP) $(LTLIBGCC) $(PTHREAD_CFLAGS) -ldl @CY_EXECUTE_TRUE@@CY_PRELINK_TRUE@CY_LANGFLAGS = -DCY_JAVA=$(CY_JAVA) -DCY_PYTHON=$(CY_PYTHON) -DCY_OBJECTIVEC=$(CY_OBJECTIVEC) all: config.h diff --git a/Parser.ypp.in b/Parser.ypp.in index 9866a39..5239ff1 100644 --- a/Parser.ypp.in +++ b/Parser.ypp.in @@ -27,6 +27,7 @@ #include "Driver.hpp" #include "Parser.hpp" #include "Stack.hpp" +#include "Syntax.hpp" #define CYNew new(driver.pool_) @begin ObjectiveC diff --git a/android-configure.sh b/android-configure.sh index c91f69b..c3d9d65 100755 --- a/android-configure.sh +++ b/android-configure.sh @@ -4,4 +4,6 @@ source ./android.sh rm -rf build.and-armeabi mkdir -p build.and-armeabi cd build.and-armeabi -cfg ../configure CPPFLAGS="-I../ncurses.and/include -I../readline.and -I../android -I../libffi.and/include" LDFLAGS="-L../ncurses.and/lib -L../readline.and -L../android/armeabi -L../libffi.and ${ldf[*]}" +cpp+=(-I../ncurses.and/include -I../readline.and -I../android -I../libffi.and/include) +ldf+=(-L../ncurses.and/lib -L../readline.and -L../android/armeabi -L../libffi.and/.libs) +cfg ../configure "$@" diff --git a/android.sh b/android.sh index 8cac853..d155b1b 100755 --- a/android.sh +++ b/android.sh @@ -2,10 +2,12 @@ ndk=~/bin/android-ndk abi=armeabi ver=4.9 -bin=${ndk}/toolchains/arm-linux-androideabi-${ver}/prebuilt/darwin-x86_64/bin +api=9 +bld=darwin-x86_64 +bin=${ndk}/toolchains/arm-linux-androideabi-${ver}/prebuilt/${bld}/bin #export PATH=${bin}:$PATH flg=() -flg+=(--sysroot=${ndk}/platforms/android-9/arch-arm) +flg+=(--sysroot=${ndk}/platforms/android-${api}/arch-arm) flg+=(-I${ndk}/sources/cxx-stl/gnu-libstdc++/${ver}/include) flg+=(-I${ndk}/sources/cxx-stl/gnu-libstdc++/${ver}/libs/${abi}/include) ldf=() @@ -14,8 +16,11 @@ ldf+=(-lgnustl_static) tgt=arm-linux-androideabi cc=${bin}/${tgt}-gcc cxx=${bin}/${tgt}-g++ +cpp=() +cpp+=(-fPIE) +ldf+=(-rdynamic -fPIE -pie) function cfg() { cfg=$1 shift - CC="${cc} ${flg[*]}" CXX="${cxx} ${flg[*]}" OBJCXX="${cxx} ${flg[*]}" "${cfg}" --host="${tgt}" LDFLAGS="${ldf[*]}" "$@" + CC="${cc} ${flg[*]}" CXX="${cxx} ${flg[*]}" OBJCXX="${cxx} ${flg[*]}" "${cfg}" --host="${tgt}" CPPFLAGS="${cpp[*]}" LDFLAGS="${ldf[*]}" "$@" } diff --git a/configure b/configure index 8f9f3d8..0326e92 100755 --- a/configure +++ b/configure @@ -22670,7 +22670,7 @@ return sqlite3_open_v2 (); return 0; } _ACEOF -for ac_lib in '' sqlite3; do +for ac_lib in '' sqlite3 sqlite; do if test -z "$ac_lib"; then ac_res="none required" else @@ -23150,7 +23150,7 @@ return JNI_GetCreatedJavaVMs (); return 0; } _ACEOF -for ac_lib in '' dvm; do +for ac_lib in '' art dvm; do if test -z "$ac_lib"; then ac_res="none required" else @@ -23791,6 +23791,7 @@ $as_echo "$ac_cv_framework_CoreFoundation" >&6; } done + CY_OBJECTIVEC=1 @@ -23911,6 +23912,7 @@ done if test "x$GNUSTEP_CONFIG" != x; then : + CY_OBJECTIVEC=1 for element in `$GNUSTEP_CONFIG --objc-flags`; do @@ -23970,6 +23972,11 @@ fi +else + + CY_OBJECTIVEC=0 + + fi ac_ext=cpp diff --git a/configure.ac b/configure.ac index 52a6ee5..0ee1cb2 100644 --- a/configure.ac +++ b/configure.ac @@ -206,7 +206,7 @@ AS_CASE([$CY_EXECUTE], [1], [ ])]) CY_LT_LIB([LTLIBSQLITE3], [AC_CHECK_HEADERS([sqlite3.h], [ - AC_SEARCH_LIBS([sqlite3_open_v2], [sqlite3]) + AC_SEARCH_LIBS([sqlite3_open_v2], [sqlite3 sqlite]) ])]) AC_CHECK_HEADERS([ffi.h ffi/ffi.h], [break]) @@ -225,7 +225,7 @@ AS_CASE([$CY_EXECUTE], [1], [ AC_SUBST([CY_JAVA], [1]) ], [AC_CHECK_HEADER([jni.h], [ AC_SUBST([CY_JAVA], [1]) - AC_SEARCH_LIBS([JNI_GetCreatedJavaVMs], [dvm], [ + AC_SEARCH_LIBS([JNI_GetCreatedJavaVMs], [art dvm], [ ]) ], [ AC_SUBST([CY_JAVA], [0]) @@ -273,7 +273,7 @@ AS_CASE([$CY_EXECUTE], [1], [ CY_LT_LIB([LTOBJECTIVEC], [AC_CHECK_FRAMEWORK([CoreFoundation], [ #include ], [CFAllocatorGetDefault();], [ - AC_SUBST([CY_OBJECTIVEC]) + AC_SUBST([CY_OBJECTIVEC], [1]) AC_CHECK_FRAMEWORK([Foundation], [ #include @@ -283,11 +283,13 @@ AS_CASE([$CY_EXECUTE], [1], [ AC_CHECK_PROGS([GNUSTEP_CONFIG], [gnustep-config]) AS_IF([test "x$GNUSTEP_CONFIG" != x], [ - AC_SUBST([CY_OBJECTIVEC]) + AC_SUBST([CY_OBJECTIVEC], [1]) AC_LIB_APPENDTOVAR([OBJCXXFLAGS], [`$GNUSTEP_CONFIG --objc-flags`]) AC_LIB_APPENDTOVAR([LIBS], [`$GNUSTEP_CONFIG --base-libs`]) ], [AC_SUBST([CY_OBJECTIVEC], [0])]) ])]) + ], [ + AC_SUBST([CY_OBJECTIVEC], [0]) ]) AC_LANG_POP([Objective C++]) diff --git a/sig/copy.cpp b/sig/copy.cpp index 3338cd6..664039f 100644 --- a/sig/copy.cpp +++ b/sig/copy.cpp @@ -57,6 +57,7 @@ String *String::Copy(CYPool &pool, const char *rename) const { return new(pool) String(); } +#ifdef CY_OBJECTIVEC Meta *Meta::Copy(CYPool &pool, const char *rename) const { return new(pool) Meta(); } @@ -64,6 +65,7 @@ Meta *Meta::Copy(CYPool &pool, const char *rename) const { Selector *Selector::Copy(CYPool &pool, const char *rename) const { return new(pool) Selector(); } +#endif Bits *Bits::Copy(CYPool &pool, const char *rename) const { return new(pool) Bits(size); @@ -77,9 +79,11 @@ Array *Array::Copy(CYPool &pool, const char *rename) const { return new(pool) Array(*type.Copy(pool), size); } +#ifdef CY_OBJECTIVEC Object *Object::Copy(CYPool &pool, const char *rename) const { return new(pool) Object(pool.strdup(name)); } +#endif Aggregate *Aggregate::Copy(CYPool &pool, const char *rename) const { Aggregate *copy(new(pool) Aggregate(overlap, rename ?: pool.strdup(name))); @@ -93,11 +97,13 @@ Function *Function::Copy(CYPool &pool, const char *rename) const { return copy; } +#ifdef CY_OBJECTIVEC Block *Block::Copy(CYPool &pool, const char *rename) const { Block *copy(new(pool) Block()); sig::Copy(pool, copy->signature, signature); return copy; } +#endif void Copy(CYPool &pool, ffi_type &lhs, ffi_type &rhs) { lhs.size = rhs.size; diff --git a/sig/ffi_type.cpp b/sig/ffi_type.cpp index 5d31b0f..35700e9 100644 --- a/sig/ffi_type.cpp +++ b/sig/ffi_type.cpp @@ -111,6 +111,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 +119,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,9 +147,11 @@ 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 *Aggregate::GetFFI(CYPool &pool) const { // XXX: we can totally make overlap work @@ -177,9 +181,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); diff --git a/sig/parse.cpp b/sig/parse.cpp index 8eb0818..b78015d 100644 --- a/sig/parse.cpp +++ b/sig/parse.cpp @@ -91,7 +91,10 @@ Type *Parse_(CYPool &pool, const char **encoding, char eos, bool named, Callback parse: switch (next) { case '?': type = new(pool) Unknown(); break; + +#ifdef CY_OBJECTIVEC case '#': type = new(pool) Meta(); break; +#endif case '(': type = new(pool) Aggregate(true); @@ -99,6 +102,8 @@ Type *Parse_(CYPool &pool, const char **encoding, char eos, bool named, Callback goto aggregate; case '*': type = new(pool) String(); break; + +#ifdef CY_OBJECTIVEC case ':': type = new(pool) Selector(); break; case '@': { @@ -128,6 +133,7 @@ Type *Parse_(CYPool &pool, const char **encoding, char eos, bool named, Callback } } break; +#endif case 'B': type = new(pool) Primitive(); break; case 'C': type = new(pool) Primitive(); break; @@ -151,10 +157,12 @@ Type *Parse_(CYPool &pool, const char **encoding, char eos, bool named, Callback _assert(false); // XXX: why is this here?!? else { type = Parse_(pool, encoding, eos, named, callback); +#ifdef CY_OBJECTIVEC Aggregate *aggregate(dynamic_cast(type)); if (aggregate != NULL && strcmp(aggregate->name, "_objc_class") == 0) type = new(pool) Meta(); else +#endif type = new(pool) Pointer(*type); } break; @@ -326,6 +334,7 @@ const char *String::Encode(CYPool &pool) const { return "*"; } +#ifdef CY_OBJECTIVEC const char *Meta::Encode(CYPool &pool) const { return "#"; } @@ -333,6 +342,7 @@ const char *Meta::Encode(CYPool &pool) const { const char *Selector::Encode(CYPool &pool) const { return ":"; } +#endif const char *Bits::Encode(CYPool &pool) const { return pool.strcat("b", pool.itoa(size), NULL); @@ -346,9 +356,11 @@ const char *Array::Encode(CYPool &pool) const { return pool.strcat("[", pool.itoa(size), type.Encode(pool), "]", NULL); } +#ifdef CY_OBJECTIVEC const char *Object::Encode(CYPool &pool) const { return name == NULL ? "@" : pool.strcat("@\"", name, "\"", NULL); } +#endif const char *Aggregate::Encode(CYPool &pool) const { return pool.strcat(overlap ? "(" : "{", name == NULL ? "?" : name, "=", Unparse(pool, &signature), overlap ? ")" : "}", NULL); @@ -358,9 +370,11 @@ const char *Function::Encode(CYPool &pool) const { return "?"; } +#ifdef CY_OBJECTIVEC const char *Block::Encode(CYPool &pool) const { return "@?"; } +#endif const char *Unparse(CYPool &pool, const struct Type *type) { const char *base(type->Encode(pool)); diff --git a/sig/types.hpp b/sig/types.hpp index b7547fa..ea0a307 100644 --- a/sig/types.hpp +++ b/sig/types.hpp @@ -134,6 +134,7 @@ struct String : JSValueRef FromFFI(JSContextRef context, ffi_type *ffi, void *data, bool initialize, JSObjectRef owner) const override; }; +#ifdef CY_OBJECTIVEC struct Meta : Type { @@ -159,6 +160,7 @@ struct Selector : 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; }; +#endif struct Bits : Type @@ -222,6 +224,7 @@ struct Array : JSValueRef FromFFI(JSContextRef context, ffi_type *ffi, void *data, bool initialize, JSObjectRef owner) const override; }; +#ifdef CY_OBJECTIVEC struct Object : Type { @@ -241,6 +244,7 @@ struct Object : 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; }; +#endif struct Aggregate : Type @@ -295,6 +299,7 @@ struct Function : JSValueRef FromFFI(JSContextRef context, ffi_type *ffi, void *data, bool initialize, JSObjectRef owner) const override; }; +#ifdef CY_OBJECTIVEC struct Block : Callable { @@ -308,6 +313,7 @@ struct Block : 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; }; +#endif Type *joc_parse_type(char **name, char eos, bool variable, bool signature); void joc_parse_signature(Signature *signature, char **name, char eos, bool variable); -- 2.47.2