[#35789] [Ruby 1.9 - Bug #407] (Open) String#<< — Shyouhei Urabe <redmine@...>

チケット #407 が報告されました。 (by Shyouhei Urabe)

13 messages 2008/08/06

[#35845] [Bug #437] test_strftime(TestTime) fails on Solaris — Shugo Maeda <redmine@...>

Bug #437: test_strftime(TestTime) fails on Solaris

24 messages 2008/08/13
[#35855] Re: [Bug #437] test_strftime(TestTime) fails on Solaris — "Shugo Maeda" <shugo@...> 2008/08/15

前田です。

[#35856] Re: [Bug #437] test_strftime(TestTime) fails on Solaris — SATOH Fumiyasu <fumiyas@...> 2008/08/15

さとうふみやす @ OSS テクノロジです。

[#35857] Re: [Bug #437] test_strftime(TestTime) fails on Solaris — Yukihiro Matsumoto <matz@...> 2008/08/15

まつもと ゆきひろです

[#35870] Re: [Bug #437] test_strftime(TestTime) fails on Solaris — "Shugo Maeda" <shugo@...> 2008/08/18

前田です。

[#35863] Refactoring of enumerating prime numbers — "Yugui (Yuki Sonoda)" <yugui@...>

Yuguiです。

20 messages 2008/08/16
[#35865] Re: Refactoring of enumerating prime numbers — keiju@... (keiju ISHITSUKA) 2008/08/17

けいじゅ@いしつかです.

[#35867] Re: Refactoring of enumerating prime numbers — "Yugui (Yuki Sonoda)" <yugui@...> 2008/08/17

Yuguiです。

[#35875] Re: Refactoring of enumerating prime numbers — keiju@... (keiju ISHITSUKA) 2008/08/19

けいじゅ@いしつかです.

[#35877] Re: Refactoring of enumerating prime numbers — Nobuyoshi Nakada <nobu@...> 2008/08/19

なかだです。

[#35882] Re: Refactoring of enumerating prime numbers — keiju@... (石塚圭樹) 2008/08/20

けいじゅ@いしつかです.

[#35904] [Feature:1.9] pack format 'm' based on RFC 4648 — "Yusuke ENDOH" <mame@...>

遠藤です。

14 messages 2008/08/21
[#36442] [Feature #471] pack format 'm' based on RFC 4648 — Yuki Sonoda <redmine@...> 2008/09/22

チケット #471 が更新されました。 (by Yuki Sonoda)

[#35906] %N for Time#strftime — "Shugo Maeda" <shugo@...>

前田です。

13 messages 2008/08/21

[#35986] 1.9と1.8で、delegateのインスタンスのクラス名の違う — Fujioka <fuj@...>

xibbarこと藤岡です。

17 messages 2008/08/26
[#35987] Re: 1.9と1.8で、delegateのインスタンスのクラス名の違う — Yukihiro Matsumoto <matz@...> 2008/08/26

まつもと ゆきひろです

[#35991] Re: 1.9と1.8で、delegateのインスタンスのクラス名の違う — keiju@... (石塚圭樹) 2008/08/26

けいじゅ@いしつかです.

[#35994] Re: 1.9と1.8で、delegateのインスタンスのクラス名の違う — Fujioka <fuj@...> 2008/08/27

藤岡です。

[#35998] Re: 1.9と1.8で、delegateのインスタンスのクラス名の違う — keiju@... (石塚圭樹) 2008/08/27

けいじゅ@いしつかです.

[#36066] Numeric#scalar? — Tadayoshi Funaba <tadf@...>

1.9 の Numeric#scalar? について、適当でないのでは (real? などのほうがい

24 messages 2008/08/31
[#36069] Re: Numeric#scalar? — Shin-ichiro HARA <sinara@...> 2008/08/31

原です。

[#36104] Re: Numeric#scalar? — Tadayoshi Funaba <tadf@...> 2008/09/02

> やはり、scalar? はずれているんじゃないかな。real? の方がいい

[#36122] Re: Numeric#scalar? — Shin-ichiro HARA <sinara@...> 2008/09/03

原です。

[#36133] Re: Numeric#scalar? — Tadayoshi Funaba <tadf@...> 2008/09/03

> ここで、scalar? を疑問視する理由を復習すると、たとえば、「複

[#36173] Re: Numeric#scalar? — Tadayoshi Funaba <tadf@...> 2008/09/05

1.9.1 までに時間がないので scalar? だけ何とかしたいと思っていましたが、

[#36183] Re: Numeric#scalar? — "Shugo Maeda" <shugo@...> 2008/09/06

前田です。

[#36186] Re: Numeric#scalar? — Shin-ichiro HARA <sinara@...> 2008/09/06

原です。

[ruby-dev:35851] [Feature:1.9] name referencing in sprintf

From: "Yusuke ENDOH" <mame@...>
Date: 2008-08-15 04:08:12 UTC
List: ruby-dev #35851
遠藤です。

1.9 では正規表現で名前を使った参照ができるので、sprintf でも
名前を使った参照ができると便利じゃないでしょうか。


$ ./ruby -e 'puts "%<foo>d : %<bar>f" % { :foo => 1, :bar => 2 }'
1 : 2.000000

$ ./ruby -e 'printf("%<foo>d : %<bar>f\n", :foo => 1, :bar => 2)'
1 : 2.000000


あまりテストしていませんが、たたき台の実装です。


Index: sprintf.c
===================================================================
--- sprintf.c	(revision 18638)
+++ sprintf.c	(working copy)
@@ -103,18 +103,28 @@
 } while (0)

 #define GETARG() (nextvalue != Qundef ? nextvalue : \
-    posarg < 0 ? \
+    posarg == -1 ? \
     (rb_raise(rb_eArgError, "unnumbered(%d) mixed with numbered",
nextarg), 0) : \
+    posarg == -2 ? \
+    (rb_raise(rb_eArgError, "unnumbered(%d) mixed with named", nextarg), 0) : \
     (posarg = nextarg++, GETNTHARG(posarg)))

 #define GETPOSARG(n) (posarg > 0 ? \
     (rb_raise(rb_eArgError, "numbered(%d) after unnumbered(%d)", n,
posarg), 0) : \
+    posarg == -2 ? \
+    (rb_raise(rb_eArgError, "numbered(%d) after named", n), 0) : \
     ((n < 1) ? (rb_raise(rb_eArgError, "invalid index - %d$", n), 0) : \
 	       (posarg = -1, GETNTHARG(n))))

 #define GETNTHARG(nth) \
     ((nth >= argc) ? (rb_raise(rb_eArgError, "too few arguments"), 0)
: argv[nth])

+#define GETNAMEARG(id) (posarg > 0 ? \
+    (rb_raise(rb_eArgError, "named after unnumbered(%d)", posarg), 0) : \
+    posarg == -1 ? \
+    (rb_raise(rb_eArgError, "named after numbered"), 0) : \
+    rb_hash_aref(get_hash(&hash, argc, argv), id))
+
 #define GETNUM(n, val) \
     for (; p < end && rb_enc_isdigit(*p, enc); p++) {	\
 	int next_n = 10 * n + (*p - '0'); \
@@ -141,7 +151,22 @@
     val = NUM2INT(tmp); \
 } while (0)

+static VALUE
+get_hash(volatile VALUE *hash, int argc, const VALUE *argv)
+{
+    VALUE tmp;

+    if (*hash != Qundef) return *hash;
+    if (argc != 2) {
+	rb_raise(rb_eArgError, "one hash required");
+    }
+    tmp = rb_check_convert_type(argv[1], T_HASH, "Hash", "to_hash");
+    if (NIL_P(tmp)) {
+	rb_raise(rb_eArgError, "one hash required");
+    }
+    return (*hash = tmp);
+}
+
 /*
  *  call-seq:
  *     format(format_string [, arguments...] )   => string
@@ -412,6 +437,7 @@
     VALUE nextvalue;
     VALUE tmp;
     VALUE str;
+    volatile VALUE hash = Qundef;

 #define CHECK_FOR_WIDTH(f)				 \
     if ((f) & FWIDTH) {					 \
@@ -513,6 +539,22 @@
 	    flags |= FWIDTH;
 	    goto retry;

+	  case '<':
+	    {
+		const char *start = p;
+		ID id;
+		for (; p < end && *p != '>'; ) {
+		    p += rb_enc_mbclen(p, end, enc);
+		}
+		if (p >= end) {
+		    rb_raise(rb_eArgError, "malformed name - unmatched parenthesis");
+		}
+		id = rb_intern3(start + 1, p - start - 1, enc);
+		nextvalue = GETNAMEARG(ID2SYM(id));
+		p++;
+		goto retry;
+	    }
+
 	  case '*':
 	    CHECK_FOR_WIDTH(flags);
 	    flags |= FWIDTH;

-- 
Yusuke ENDOH <mame@tsg.ne.jp>

In This Thread

Prev Next