[#15625] rb_hash_initialize — Takaaki Tateishi <ttate@...>

立石です.

22 messages 2002/01/04
[#15627] Re: rb_hash_initialize — matz@... (Yukihiro Matsumoto) 2002/01/04

まつもと ゆきひろです

[#15628] Re: rb_hash_initialize — Takaaki Tateishi <ttate@...> 2002/01/04

立石です.

[#15685] undefined method `inherited' for false (NameError) — WATANABE Hirofumi <eban@...>

わたなべです。

13 messages 2002/01/15
[#15686] Re: undefined method `inherited' for false (NameError) — nobu.nakada@... 2002/01/15

なかだです。

[#15757] 文字列→整数変換 — nobu.nakada@...

なかだです。

30 messages 2002/01/25

[#15830] [ 提案 ] puts, print 等を IO から分離 — UENO Katsuhiro <unnie@...>

うえのです。

14 messages 2002/01/31

[ruby-dev:15787] Re: definition of StringValue

From: nobu.nakada@...
Date: 2002-01-28 11:47:19 UTC
List: ruby-dev #15787
なかだです。

At Mon, 28 Jan 2002 20:19:09 +0900,
UENO Katsuhiro <unnie@blue.sky.or.jp> wrote:
> ruby.h を眺めてて思ったのですが、StringValue は
> 
> Index: ruby.h
> ===================================================================
> RCS file: /src/ruby/ruby.h,v
> retrieving revision 1.57
> diff -u -r1.57 ruby.h
> --- ruby.h	2001/12/21 07:20:23	1.57
> +++ ruby.h	2002/01/28 11:11:55
> @@ -201,7 +201,7 @@
>  VALUE rb_str_to_str _((VALUE));
>  VALUE rb_string_value _((volatile VALUE*));
>  
> -#define StringValue(v) if (TYPE(v) != T_STRING) rb_string_value(&(v))
> +#define StringValue(v) ((TYPE(v) != T_STRING) ? (v) : rb_string_value(&(v)))
>  void rb_check_safe_str _((VALUE));
>  #define SafeStringValue(v) do {\
>      StringValue(v);\
> 
> こうしたほうが良くないですか?

賛成ですが、条件が逆です。

もうひとつ、定数を使う場合はこのほうが最適化されやすいようです。

#define BUILTIN_TYPE_P(obj, t) (\
    ((t) == T_FIXNUM) ? FIXNUM_P(obj) : \
    ((t) == T_NIL) ? NIL_P(obj) : \
    ((t) == T_FALSE) ? ((VALUE)(obj) == Qfalse) : \
    ((t) == T_TRUE) ? ((VALUE)(obj) == Qtrue) : \
    ((t) == T_UNDEF) ? ((VALUE)(obj) == Qundef) : \
    ((t) == T_SYMBOL) ? SYMBOL_P(obj) : \
    (!SPECIAL_CONST_P(obj) && BUILTIN_TYPE(obj) == t))

#define StringValue(v) (BUILTIN_TYPE_P(v, T_STRING) ? (v) : rb_string_value(&(v)))

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread