remove gcc dependance for inline, branch prediction
authorRobert Bradshaw <robertwb@math.washington.edu>
Sun, 29 Jul 2007 01:30:36 +0000 (18:30 -0700)
committerRobert Bradshaw <robertwb@math.washington.edu>
Sun, 29 Jul 2007 01:30:36 +0000 (18:30 -0700)
Cython/Compiler/Nodes.py
Cython/Compiler/Parsing.py

index 4dc7c45bf6e5439febecf4c7747a0b00ea232d32..6f18ed0a9e28f70932a14b186bc57115c9e721ce 100644 (file)
@@ -2590,12 +2590,20 @@ class FromImportStatNode(StatNode):
 
 utility_function_predeclarations = \
 """
+#ifdef __GNUC__
+#define INLINE __inline__
+#elif _WIN32
+#define INILNE __inline
+#else
+#define INLINE 
+#endif
+
 typedef struct {const char *s; const void **p;} __Pyx_CApiTabEntry; /*proto*/
 typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/
 typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/
 
 #define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
-static inline int __Pyx_PyObject_IsTrue(PyObject* x) {
+static INILNE int __Pyx_PyObject_IsTrue(PyObject* x) {
    if (x == Py_True) return 1;
    else if (x == Py_False) return 0;
    else return PyObject_IsTrue(x);
@@ -2606,8 +2614,13 @@ static inline int __Pyx_PyObject_IsTrue(PyObject* x) {
 if Options.gcc_branch_hints:
     branch_prediction_macros = \
     """
+#ifdef __GNUC__
 #define likely(x)   __builtin_expect(!!(x), 1)
 #define unlikely(x) __builtin_expect(!!(x), 0)
+#else /* __GNUC__ */
+#define likely(x)   (x)
+#define unlikely(x) (x)
+#endif /* __GNUC__ */
     """
 else:
     branch_prediction_macros = \
index 8389d77475dcaf08d121884ce80b737404356c6e..9ff8c65b1f987fa4b78a1fa9494c0ae053fae6b3 100644 (file)
@@ -1662,7 +1662,7 @@ def p_visibility(s, prev_visibility):
     
 def p_c_modifiers(s):
     if s.systring in ('inline', ):
-        modifier = s.systring
+        modifier = s.systring.upper() # uppercase is macro defined for various compilers
         s.next()
         return modifier + ' ' + p_c_modifiers(s)
     return ""