ruby-changes:45387
From: shyouhei <ko1@a...>
Date: Mon, 30 Jan 2017 13:42:11 +0900 (JST)
Subject: [ruby-changes:45387] shyouhei:r57460 (trunk): #include <stdbool.h>
shyouhei 2017-01-30 13:42:04 +0900 (Mon, 30 Jan 2017) New Revision: 57460 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=57460 Log: #include <stdbool.h> 17+ years passed since standardized in ISO, 8 years since we added AC_HEADER_STDBOOL to configure.in. I'm quite confident that it's already safe to use <stdbool.h>. I understand that when we introduced AC_HEADER_STDBOOL, <stdbool.h> was remain not included because C standard and SVR4 curses conflicted miserably back then (#1). Though I believe such situation has been fixed already(#2), I'm afraid of your operating system might ship a proprietary curses that still conflicts with the standard. So to avoid potential problem, we limit the inclusion to our internal use only. #1 : 1997 version of SUSv2 said bool is "defined though typedef" in <curses.h>, while C99 said bool is a macro, plus in C++ bool is a keyword. AFASIK the curses library has never been a part of POSIX. #2 : In reality ncurses and NetBSD curses both just follow C99 to include <stdbool.h> from <curses.h>. I think C99 is now widely adopted. ---- * internal.h: #include <stdbool.h> if present. That is believed to be the case for 99.9% systems that lives today. Non-C99, non-C++ situations are intentionally left undefined, advised by Motohiro Kosaki. If you have such compiler, please fill the definition appropriately. Modified files: trunk/internal.h Index: internal.h =================================================================== --- internal.h (revision 57459) +++ internal.h (revision 57460) @@ -23,6 +23,19 @@ extern "C" { https://github.com/ruby/ruby/blob/trunk/internal.h#L23 #endif #endif +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#endif + +#ifndef __bool_true_false_are_defined +# ifndef __cplusplus +# error :FIXME: You are the first one who use pre-C99 compiler. +# error :FIXME: Please add appropriate definition here. +# error :FIXME: This part is intentionally left undefined, +# error :FIXME: because the author no longer have such environment. +# endif +#endif + #define LIKELY(x) RB_LIKELY(x) #define UNLIKELY(x) RB_UNLIKELY(x) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/