mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* string.c (rb_str_aset): should raise error if an indexing string
is not found in the receiver. * sprintf.c (rb_f_sprintf): "%d" should convert objects into integers using Integer(). * lib/tempfile.rb (Tempfile::size): added. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2517 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
4cb164ee2a
commit
b7bc0cae53
10 changed files with 54 additions and 33 deletions
12
ChangeLog
12
ChangeLog
|
@ -23,10 +23,22 @@ Mon Jun 3 07:07:07 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
|
||||||
* parse.y (yylex): should pushback proper char after '**'.
|
* parse.y (yylex): should pushback proper char after '**'.
|
||||||
(ruby-bugs-ja:PR#240)
|
(ruby-bugs-ja:PR#240)
|
||||||
|
|
||||||
|
Mon Jun 3 05:56:17 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* string.c (rb_str_aset): should raise error if an indexing string
|
||||||
|
is not found in the receiver.
|
||||||
|
|
||||||
|
* sprintf.c (rb_f_sprintf): "%d" should convert objects into
|
||||||
|
integers using Integer().
|
||||||
|
|
||||||
Sat Jun 1 19:20:07 2002 Masaki Suketa <masaki.suketa@nifty.ne.jp>
|
Sat Jun 1 19:20:07 2002 Masaki Suketa <masaki.suketa@nifty.ne.jp>
|
||||||
|
|
||||||
* ext/win32ole: merge from rough.
|
* ext/win32ole: merge from rough.
|
||||||
|
|
||||||
|
Fri May 31 17:11:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* lib/tempfile.rb (Tempfile::size): added.
|
||||||
|
|
||||||
Thu May 30 12:52:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
Thu May 30 12:52:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
* range.c (range_step): iteration done using "+" if elements are
|
* range.c (range_step): iteration done using "+" if elements are
|
||||||
|
|
15
eval.c
15
eval.c
|
@ -840,7 +840,6 @@ static NODE *top_cref;
|
||||||
#define PUSH_CREF(c) ruby_cref = rb_node_newnode(NODE_CREF,(c),0,ruby_cref)
|
#define PUSH_CREF(c) ruby_cref = rb_node_newnode(NODE_CREF,(c),0,ruby_cref)
|
||||||
#define POP_CREF() ruby_cref = ruby_cref->nd_next
|
#define POP_CREF() ruby_cref = ruby_cref->nd_next
|
||||||
|
|
||||||
#define scope_node super.klass
|
|
||||||
#define PUSH_SCOPE() do { \
|
#define PUSH_SCOPE() do { \
|
||||||
volatile int _vmode = scope_vmode; \
|
volatile int _vmode = scope_vmode; \
|
||||||
struct SCOPE * volatile _old; \
|
struct SCOPE * volatile _old; \
|
||||||
|
@ -2784,7 +2783,6 @@ rb_eval(self, n)
|
||||||
ruby_cref = (NODE*)node->nd_rval;
|
ruby_cref = (NODE*)node->nd_rval;
|
||||||
ruby_frame->cbase = node->nd_rval;
|
ruby_frame->cbase = node->nd_rval;
|
||||||
}
|
}
|
||||||
ruby_scope->scope_node = (VALUE)node;
|
|
||||||
if (node->nd_tbl) {
|
if (node->nd_tbl) {
|
||||||
VALUE *vars = ALLOCA_N(VALUE, node->nd_tbl[0]+1);
|
VALUE *vars = ALLOCA_N(VALUE, node->nd_tbl[0]+1);
|
||||||
*vars++ = (VALUE)node;
|
*vars++ = (VALUE)node;
|
||||||
|
@ -3064,6 +3062,7 @@ rb_eval(self, n)
|
||||||
NODE *list = node->nd_next;
|
NODE *list = node->nd_next;
|
||||||
|
|
||||||
str = rb_str_new3(node->nd_lit);
|
str = rb_str_new3(node->nd_lit);
|
||||||
|
if (!ruby_dyna_vars) rb_dvar_push(0, 0);
|
||||||
while (list) {
|
while (list) {
|
||||||
if (list->nd_head) {
|
if (list->nd_head) {
|
||||||
switch (nd_type(list->nd_head)) {
|
switch (nd_type(list->nd_head)) {
|
||||||
|
@ -3075,18 +3074,9 @@ rb_eval(self, n)
|
||||||
ruby_errinfo = Qnil;
|
ruby_errinfo = Qnil;
|
||||||
ruby_sourceline = nd_line(node);
|
ruby_sourceline = nd_line(node);
|
||||||
ruby_in_eval++;
|
ruby_in_eval++;
|
||||||
rb_dvar_push(0, 0);
|
|
||||||
list->nd_head = compile(list->nd_head->nd_lit,
|
list->nd_head = compile(list->nd_head->nd_lit,
|
||||||
ruby_sourcefile,
|
ruby_sourcefile,
|
||||||
ruby_sourceline);
|
ruby_sourceline);
|
||||||
if (ruby_scope->local_tbl) {
|
|
||||||
NODE *body = (NODE *)ruby_scope->scope_node;
|
|
||||||
if (body && body->nd_tbl != ruby_scope->local_tbl) {
|
|
||||||
if (body->nd_tbl) free(body->nd_tbl);
|
|
||||||
ruby_scope->local_vars[-1] =
|
|
||||||
(VALUE)(body->nd_tbl = ruby_scope->local_tbl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ruby_eval_tree = 0;
|
ruby_eval_tree = 0;
|
||||||
ruby_in_eval--;
|
ruby_in_eval--;
|
||||||
if (ruby_nerrs > 0) {
|
if (ruby_nerrs > 0) {
|
||||||
|
@ -3424,7 +3414,6 @@ module_setup(module, n)
|
||||||
PUSH_SCOPE();
|
PUSH_SCOPE();
|
||||||
PUSH_VARS();
|
PUSH_VARS();
|
||||||
|
|
||||||
ruby_scope->scope_node = (VALUE)node;
|
|
||||||
if (node->nd_tbl) {
|
if (node->nd_tbl) {
|
||||||
VALUE *vars = TMP_ALLOC(node->nd_tbl[0]+1);
|
VALUE *vars = TMP_ALLOC(node->nd_tbl[0]+1);
|
||||||
*vars++ = (VALUE)node;
|
*vars++ = (VALUE)node;
|
||||||
|
@ -4564,7 +4553,6 @@ rb_call0(klass, recv, id, argc, argv, body, nosuper)
|
||||||
ruby_cref = (NODE*)body->nd_rval;
|
ruby_cref = (NODE*)body->nd_rval;
|
||||||
ruby_frame->cbase = body->nd_rval;
|
ruby_frame->cbase = body->nd_rval;
|
||||||
}
|
}
|
||||||
ruby_scope->scope_node = (VALUE)body;
|
|
||||||
if (body->nd_tbl) {
|
if (body->nd_tbl) {
|
||||||
local_vars = TMP_ALLOC(body->nd_tbl[0]+1);
|
local_vars = TMP_ALLOC(body->nd_tbl[0]+1);
|
||||||
*local_vars++ = (VALUE)body;
|
*local_vars++ = (VALUE)body;
|
||||||
|
@ -5031,6 +5019,7 @@ eval(self, src, scope, file, line)
|
||||||
if (ruby_frame->prev) {
|
if (ruby_frame->prev) {
|
||||||
ruby_frame->iter = ruby_frame->prev->iter;
|
ruby_frame->iter = ruby_frame->prev->iter;
|
||||||
}
|
}
|
||||||
|
if (!ruby_dyna_vars) rb_dvar_push(0, 0);
|
||||||
}
|
}
|
||||||
if (file == 0) {
|
if (file == 0) {
|
||||||
file = ruby_sourcefile;
|
file = ruby_sourcefile;
|
||||||
|
|
|
@ -62,7 +62,7 @@ else
|
||||||
end
|
end
|
||||||
|
|
||||||
$ipv6 = false
|
$ipv6 = false
|
||||||
if enable_config("ipv6", false)
|
if enable_config("ipv6", true)
|
||||||
if try_link(<<EOF)
|
if try_link(<<EOF)
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
@ -226,7 +226,7 @@ have_struct_member('struct msghdr', 'msg_control', header=['sys/types.h', 'sys/s
|
||||||
have_struct_member('struct msghdr', 'msg_accrights', header=['sys/types.h', 'sys/socket.h'])
|
have_struct_member('struct msghdr', 'msg_accrights', header=['sys/types.h', 'sys/socket.h'])
|
||||||
|
|
||||||
$getaddr_info_ok = false
|
$getaddr_info_ok = false
|
||||||
if not enable_config("wide-getaddrinfo", false) and try_run(<<EOF)
|
if !enable_config("wide-getaddrinfo", false) and try_run(<<EOF)
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -322,6 +322,7 @@ if $ipv6 and not $getaddr_info_ok
|
||||||
Fatal: --enable-ipv6 is specified, and your OS seems to support IPv6 feature.
|
Fatal: --enable-ipv6 is specified, and your OS seems to support IPv6 feature.
|
||||||
But your getaddrinfo() and getnameinfo() are appeared to be broken. Sorry,
|
But your getaddrinfo() and getnameinfo() are appeared to be broken. Sorry,
|
||||||
you cannot compile IPv6 socket classes with broken these functions.
|
you cannot compile IPv6 socket classes with broken these functions.
|
||||||
|
You can try --enable-wide-getaddrinfo.
|
||||||
EOS
|
EOS
|
||||||
exit
|
exit
|
||||||
end
|
end
|
||||||
|
|
|
@ -590,7 +590,7 @@ sock_addrinfo(host, port, socktype, flags)
|
||||||
portp = 0;
|
portp = 0;
|
||||||
}
|
}
|
||||||
else if (FIXNUM_P(port)) {
|
else if (FIXNUM_P(port)) {
|
||||||
snprintf(pbuf, sizeof(pbuf), "%ld", FIX2INT(port));
|
snprintf(pbuf, sizeof(pbuf), "%d", FIX2INT(port));
|
||||||
portp = pbuf;
|
portp = pbuf;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -678,7 +678,7 @@ ipaddr(sockaddr)
|
||||||
error = getnameinfo(sockaddr, SA_LEN(sockaddr), hbuf, sizeof(hbuf),
|
error = getnameinfo(sockaddr, SA_LEN(sockaddr), hbuf, sizeof(hbuf),
|
||||||
pbuf, sizeof(pbuf), NI_NUMERICHOST | NI_NUMERICSERV);
|
pbuf, sizeof(pbuf), NI_NUMERICHOST | NI_NUMERICSERV);
|
||||||
if (error) {
|
if (error) {
|
||||||
rb_raise(rb_eSocket, "getnameinfo %s", gai_strerror(error));
|
rb_raise(rb_eSocket, "getnameinfo: %s", gai_strerror(error));
|
||||||
}
|
}
|
||||||
addr2 = rb_tainted_str_new2(hbuf);
|
addr2 = rb_tainted_str_new2(hbuf);
|
||||||
if (do_not_reverse_lookup) {
|
if (do_not_reverse_lookup) {
|
||||||
|
|
|
@ -65,7 +65,7 @@ module Singleton
|
||||||
# This catches ill advisted inclusions of Singleton in
|
# This catches ill advisted inclusions of Singleton in
|
||||||
# singletons types (sounds like an oxymoron) and
|
# singletons types (sounds like an oxymoron) and
|
||||||
# helps out people counting on transitive mixins
|
# helps out people counting on transitive mixins
|
||||||
unless mod.instance_of? (Class)
|
unless mod.instance_of?(Class)
|
||||||
raise TypeError, "Inclusion of the OO-Singleton module in module #{mod}"
|
raise TypeError, "Inclusion of the OO-Singleton module in module #{mod}"
|
||||||
end
|
end
|
||||||
unless (class << mod; self end) <= (class << Object; self end)
|
unless (class << mod; self end) <= (class << Object; self end)
|
||||||
|
@ -73,7 +73,7 @@ module Singleton
|
||||||
end
|
end
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
def included (klass)
|
def included(klass)
|
||||||
# remove build in copying methods
|
# remove build in copying methods
|
||||||
klass.class_eval do
|
klass.class_eval do
|
||||||
define_method(:clone) {raise TypeError, "can't clone singleton #{self.type}"}
|
define_method(:clone) {raise TypeError, "can't clone singleton #{self.type}"}
|
||||||
|
@ -87,7 +87,7 @@ module Singleton
|
||||||
private :new, :allocate
|
private :new, :allocate
|
||||||
|
|
||||||
# declare the self modifying klass#instance method
|
# declare the self modifying klass#instance method
|
||||||
define_method (:instance, Singleton::FirstInstanceCall)
|
define_method(:instance, Singleton::FirstInstanceCall)
|
||||||
|
|
||||||
# simple waiting loop hook - should do in most cases
|
# simple waiting loop hook - should do in most cases
|
||||||
# note the pre/post-conditions of a thread-critical state
|
# note the pre/post-conditions of a thread-critical state
|
||||||
|
@ -109,7 +109,7 @@ module Singleton
|
||||||
super
|
super
|
||||||
sub_klass.instance_eval do @__instance__ = nil end
|
sub_klass.instance_eval do @__instance__ = nil end
|
||||||
class << sub_klass
|
class << sub_klass
|
||||||
define_method (:instance, Singleton::FirstInstanceCall)
|
define_method(:instance, Singleton::FirstInstanceCall)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ module Singleton
|
||||||
res = super
|
res = super
|
||||||
res.instance_eval do @__instance__ = nil end
|
res.instance_eval do @__instance__ = nil end
|
||||||
class << res
|
class << res
|
||||||
define_method (:instance, Singleton::FirstInstanceCall)
|
define_method(:instance, Singleton::FirstInstanceCall)
|
||||||
end
|
end
|
||||||
res
|
res
|
||||||
end
|
end
|
||||||
|
@ -215,7 +215,7 @@ class Ups < SomeSingletonClass
|
||||||
@__instance__
|
@__instance__
|
||||||
end
|
end
|
||||||
def __sleep
|
def __sleep
|
||||||
sleep (rand(0.08))
|
sleep(rand(0.08))
|
||||||
end
|
end
|
||||||
def allocate
|
def allocate
|
||||||
__sleep
|
__sleep
|
||||||
|
|
|
@ -85,6 +85,15 @@ class Tempfile < SimpleDelegator
|
||||||
def path
|
def path
|
||||||
@tmpname
|
@tmpname
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def size
|
||||||
|
if @tmpfile
|
||||||
|
@tmpfile.flush
|
||||||
|
@tmpfile.stat.size
|
||||||
|
else
|
||||||
|
0
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if __FILE__ == $0
|
if __FILE__ == $0
|
||||||
|
|
11
numeric.c
11
numeric.c
|
@ -640,7 +640,8 @@ flo_zero_p(num)
|
||||||
return Qfalse;
|
return Qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE flo_is_nan_p(num)
|
static VALUE
|
||||||
|
flo_is_nan_p(num)
|
||||||
VALUE num;
|
VALUE num;
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -649,19 +650,21 @@ static VALUE flo_is_nan_p(num)
|
||||||
return isnan(value) ? Qtrue : Qfalse;
|
return isnan(value) ? Qtrue : Qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE flo_is_infinite_p(num)
|
static VALUE
|
||||||
|
flo_is_infinite_p(num)
|
||||||
VALUE num;
|
VALUE num;
|
||||||
{
|
{
|
||||||
double value = RFLOAT(num)->value;
|
double value = RFLOAT(num)->value;
|
||||||
|
|
||||||
if (isinf(value)) {
|
if (isinf(value)) {
|
||||||
return INT2FIX( value < 0 ? -1 : +1 );
|
return INT2FIX( value < 0 ? -1 : 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE flo_is_finite_p(num)
|
static VALUE
|
||||||
|
flo_is_finite_p(num)
|
||||||
VALUE num;
|
VALUE num;
|
||||||
{
|
{
|
||||||
double value = RFLOAT(num)->value;
|
double value = RFLOAT(num)->value;
|
||||||
|
|
10
parse.y
10
parse.y
|
@ -281,7 +281,6 @@ static void top_local_setup();
|
||||||
|
|
||||||
%%
|
%%
|
||||||
program : {
|
program : {
|
||||||
$<vars>$ = ruby_dyna_vars;
|
|
||||||
lex_state = EXPR_BEG;
|
lex_state = EXPR_BEG;
|
||||||
top_local_init();
|
top_local_init();
|
||||||
if ((VALUE)ruby_class == rb_cObject) class_nest = 0;
|
if ((VALUE)ruby_class == rb_cObject) class_nest = 0;
|
||||||
|
@ -303,7 +302,6 @@ program : {
|
||||||
ruby_eval_tree = block_append(ruby_eval_tree, $2);
|
ruby_eval_tree = block_append(ruby_eval_tree, $2);
|
||||||
top_local_setup();
|
top_local_setup();
|
||||||
class_nest = 0;
|
class_nest = 0;
|
||||||
ruby_dyna_vars = $<vars>1;
|
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -2170,6 +2168,7 @@ yycompile(f, line)
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
NODE *node = 0;
|
NODE *node = 0;
|
||||||
|
struct RVarmap *vp, *vars = ruby_dyna_vars;
|
||||||
|
|
||||||
if (!compile_for_eval && rb_safe_level() == 0 &&
|
if (!compile_for_eval && rb_safe_level() == 0 &&
|
||||||
rb_const_defined(rb_cObject, rb_intern("SCRIPT_LINES__"))) {
|
rb_const_defined(rb_cObject, rb_intern("SCRIPT_LINES__"))) {
|
||||||
|
@ -2210,6 +2209,13 @@ yycompile(f, line)
|
||||||
in_def = 0;
|
in_def = 0;
|
||||||
cur_mid = 0;
|
cur_mid = 0;
|
||||||
|
|
||||||
|
vp = ruby_dyna_vars;
|
||||||
|
ruby_dyna_vars = vars;
|
||||||
|
while (vp && vp != vars) {
|
||||||
|
struct RVarmap *tmp = vp;
|
||||||
|
vp = vp->next;
|
||||||
|
rb_gc_force_recycle((VALUE)tmp);
|
||||||
|
}
|
||||||
if (n == 0) node = ruby_eval_tree;
|
if (n == 0) node = ruby_eval_tree;
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
|
@ -349,8 +349,8 @@ rb_f_sprintf(argc, argv)
|
||||||
v = FIX2LONG(val);
|
v = FIX2LONG(val);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
v = NUM2LONG(val);
|
val = rb_Integer(val);
|
||||||
break;
|
goto bin_retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*p == 'u' || *p == 'd' || *p == 'i') base = 10;
|
if (*p == 'u' || *p == 'd' || *p == 'i') base = 10;
|
||||||
|
|
5
string.c
5
string.c
|
@ -1307,9 +1307,10 @@ rb_str_aset(str, indx, val)
|
||||||
|
|
||||||
case T_STRING:
|
case T_STRING:
|
||||||
beg = rb_str_index(str, indx, 0);
|
beg = rb_str_index(str, indx, 0);
|
||||||
if (beg != -1) {
|
if (beg < 0) {
|
||||||
rb_str_update(str, beg, RSTRING(indx)->len, val);
|
rb_raise(rb_eIndexError, "string not matched");
|
||||||
}
|
}
|
||||||
|
rb_str_update(str, beg, RSTRING(indx)->len, val);
|
||||||
return val;
|
return val;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in a new issue