summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--changelogs/changelog_2_0_0.md2
-rw-r--r--lib/nimbase.h31
2 files changed, 11 insertions, 22 deletions
diff --git a/changelogs/changelog_2_0_0.md b/changelogs/changelog_2_0_0.md
index fa2572859..5707cf955 100644
--- a/changelogs/changelog_2_0_0.md
+++ b/changelogs/changelog_2_0_0.md
@@ -256,8 +256,6 @@
   declared when they are not available on the backend. Previously it would call
   `doAssert false` at runtime despite the condition being compile-time.
 
-- Pragma `{.inline.}` generates `__forceinline` if `__has_attribute(__forceinline)` for GCC and Clang.
-
 - `strutils.split` and `strutils.rsplit` now forbid an empty separator.
 
 - Relative imports will not resolve to searched paths anymore, e.g. `import ./tables` now reports an error properly.
diff --git a/lib/nimbase.h b/lib/nimbase.h
index 1b9268881..3a1289b6f 100644
--- a/lib/nimbase.h
+++ b/lib/nimbase.h
@@ -84,29 +84,20 @@ __AVR__
 #  define __DECLSPEC_SUPPORTED 1
 #endif
 
-
-/* Calling conventions and inline attributes for the supported C compilers */
-#if defined(__GNUC__) || defined(__clang__)  /* GCC and Clang */
-#  if __has_attribute(__forceinline)
-#    define N_INLINE(rettype, name) __attribute__((__forceinline)) rettype name
-#  else
-#    define N_INLINE(rettype, name) inline rettype name
-#  endif
-#elif defined(_MSC_VER)  /* MSVC */
-#  if _MSC_VER > 1200
-#    define N_INLINE(rettype, name) __forceinline rettype name
-#  else
-#    define N_INLINE(rettype, name) inline rettype name
-#  endif
-#elif defined(__TINYC__) || defined(__BORLANDC__)  /* TinyC and BorlandC */
-#  define N_INLINE(rettype, name) __inline rettype name
-#elif defined(__AVR__)  /* Atmel Advanced Virtual RISC */
+/* calling convention mess ----------------------------------------------- */
+#if defined(__GNUC__) || defined(__TINYC__)
+  /* these should support C99's inline */
 #  define N_INLINE(rettype, name) inline rettype name
-#else  /* Unsupported C compilers */
-#  define N_INLINE(rettype, name) rettype name
+#elif defined(__BORLANDC__) || defined(_MSC_VER)
+/* Borland's compiler is really STRANGE here; note that the __fastcall
+   keyword cannot be before the return type, but __inline cannot be after
+   the return type, so we do not handle this mess in the code generator
+   but rather here. */
+#  define N_INLINE(rettype, name) __inline rettype name
+#else /* others are less picky: */
+#  define N_INLINE(rettype, name) rettype __inline name
 #endif
 
-
 #define N_INLINE_PTR(rettype, name) rettype (*name)
 
 #if defined(__cplusplus)