[前][次][番号順一覧][スレッド一覧]

ruby-changes:4101

From: ko1@a...
Date: Sun, 24 Feb 2008 06:49:40 +0900 (JST)
Subject: [ruby-changes:4101] nobu - Ruby:r15591 (trunk): * ruby.c (enable_option, disable_option): allow all for all known

nobu	2008-02-24 06:49:15 +0900 (Sun, 24 Feb 2008)

  New Revision: 15591

  Modified files:
    trunk/ChangeLog
    trunk/ruby.c

  Log:
    * ruby.c (enable_option, disable_option): allow all for all known
      features.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ruby.c?r1=15591&r2=15590&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15591&r2=15590&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 15590)
+++ ChangeLog	(revision 15591)
@@ -1,9 +1,12 @@
-Sun Feb 24 06:13:02 2008  Nobuyoshi Nakada  <nobu@r...>
+Sun Feb 24 06:49:12 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* debug.c (ruby_set_debug_option): separated ruby_each_words().
 
 	* util.c (ruby_each_words): extracted from ruby_set_debug_option().
 
+	* ruby.c (enable_option, disable_option): allow all for all known
+	  features.
+
 	* ruby.c (proc_options): generalized enable/disable options.
 
 	* ruby.c (ruby_init_gems): take enabled flag.  [ruby-core:14840]
Index: ruby.c
===================================================================
--- ruby.c	(revision 15590)
+++ ruby.c	(revision 15591)
@@ -79,7 +79,7 @@
     int usage;
     int version;
     int copyright;
-    int disable;
+    unsigned int disable;
     int verbose;
     int yydebug;
     char *script;
@@ -139,7 +139,7 @@
 	"-W[level]       set warning level; 0=silence, 1=medium, 2=verbose (default)",
 	"-x[directory]   strip off text before #!ruby line and perhaps cd to directory",
 	"--enable/--disable-FEATURE --enable/--disable=FEATURE  enable/disable FEATUREs",
-	"                gems: gem libraries, rubyopt: RUBYOPT env",
+	"                gems: gem libraries, rubyopt: RUBYOPT env, or all",
 	"--copyright     print the copyright",
 	"--version       print the version",
 	NULL
@@ -543,31 +543,44 @@
     return (char *)s;
 }
 
-#define UNSET_WHEN(bit)					      \
-    if (len < sizeof(#bit) && strncmp(str, #bit, len) == 0) { \
-	*(unsigned int *)arg &= ~DISABLE_BIT(bit);	      \
-	return;                                               \
+#define NAME_MATCH_P(name, str, len) \
+    ((len) < sizeof(name) && strncmp((str), name, (len)) == 0)
+
+#define UNSET_WHEN(name, bit, str, len)	\
+    if (NAME_MATCH_P(name, str, len)) { \
+	*(unsigned int *)arg &= ~(bit); \
+	return;				\
     }
 
-#define SET_WHEN(bit)					      \
-    if (len < sizeof(#bit) && strncmp(str, #bit, len) == 0) { \
-	*(unsigned int *)arg |= DISABLE_BIT(bit);	      \
-	return;                                               \
+#define SET_WHEN(name, bit, str, len)	\
+    if (NAME_MATCH_P(name, str, len)) { \
+	*(unsigned int *)arg |= (bit);	\
+	return;				\
     }
 
 static void
 enable_option(const char *str, int len, void *arg)
 {
-    UNSET_WHEN(gems);
-    UNSET_WHEN(rubyopt);
+#define UNSET_WHEN_DISABLE(bit) UNSET_WHEN(#bit, DISABLE_BIT(bit), str, len)
+    UNSET_WHEN_DISABLE(gems);
+    UNSET_WHEN_DISABLE(rubyopt);
+    if (NAME_MATCH_P("all", str, len)) {
+	*(unsigned int *)arg = 0U;
+	return;
+    }
     rb_warn("unknown argument for --enable: `%.*s'", len, str);
 }
 
 static void
 disable_option(const char *str, int len, void *arg)
 {
-    SET_WHEN(gems);
-    SET_WHEN(rubyopt);
+#define SET_WHEN_DISABLE(bit) SET_WHEN(#bit, DISABLE_BIT(bit), str, len)
+    SET_WHEN_DISABLE(gems);
+    SET_WHEN_DISABLE(rubyopt);
+    if (NAME_MATCH_P("all", str, len)) {
+	*(unsigned int *)arg = ~0U;
+	return;
+    }
     rb_warn("unknown argument for --disable: `%.*s'", len, str);
 }
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]