Permalink
Browse files

* array.c: replace rb_protect_inspect() and rb_inspecting_p() by

  rb_exec_recursive() in eval.c.

* eval.c (rb_exec_recursive): new function.

* array.c (rb_ary_join): use rb_exec_recursive().

* array.c (rb_ary_inspect, rb_ary_hash): ditto.

* file.c (rb_file_join): ditto.

* hash.c (rb_hash_inspect, rb_hash_to_s, rb_hash_hash): ditto.

* io.c (rb_io_puts): ditto.

* object.c (rb_obj_inspect): ditto

* struct.c (rb_struct_inspect): ditto.

* lib/set.rb (SortedSet::setup): a hack to shut up warning.
  [ruby-talk:132866]

* lib/time.rb (Time::strptime): add new function.  inspired by
  [ruby-talk:132815].

* lib/parsedate.rb (ParseDate::strptime): ditto.

* regparse.c: move st_*_strend() functions from st.c.  fixed some
  potential memory leaks.

* exception error messages updated.  [ruby-core:04497]

* ext/socket/socket.c (Init_socket): add bunch of Socket
  constants.  Patch from Sam Roberts <sroberts@uniserve.com>.
  [ruby-core:04409]

* array.c (rb_ary_s_create): no need for negative argc check.
  [ruby-core:04463]

* array.c (rb_ary_unshift_m): ditto.

* lib/xmlrpc/parser.rb (XMLRPC::FaultException): make it subclass
  of StandardError class, not Exception class.  [ruby-core:04429]

* parse.y (fcall_gen): lvar(arg) will be evaluated as
  lvar.call(arg) when lvar is a defined local variable. [new]

* object.c (rb_class_initialize): call inherited method before
  calling initializing block.

* eval.c (rb_thread_start_1): initialize newly pushed frame.

* lib/open3.rb (Open3::popen3): $? should not be EXIT_FAILURE.
  fixed: [ruby-core:04444]

* eval.c (is_defined): NODE_IASGN is an assignment.

* ext/readline/readline.c (Readline.readline): use rl_outstream
  and rl_instream.  [ruby-dev:25699]

* ext/etc/etc.c (Init_etc): sGroup needs HAVE_ST_GR_PASSWD check
  [ruby-dev:25675]

* misc/ruby-mode.el: [ruby-core:04415]

* lib/rdoc/generators/html_generator.rb: [ruby-core:04412]

* lib/rdoc/generators/ri_generator.rb: ditto.

* struct.c (make_struct): fixed: [ruby-core:04402]

* ext/curses/curses.c (window_color_set): [ruby-core:04393]

* ext/socket/socket.c (Init_socket): SO_REUSEPORT added.
  [ruby-talk:130092]

* object.c: [ruby-doc:818]

* parse.y (open_args): fix too verbose warnings for the space
  before argument parentheses.  [ruby-dev:25492]

* parse.y (parser_yylex): ditto.

* parse.y (parser_yylex): the first expression in the parentheses
  should not be a command.  [ruby-dev:25492]

* lib/irb/context.rb (IRB::Context::initialize): [ruby-core:04330]

* object.c (Init_Object): remove Object#type.  [ruby-core:04335]

* st.c (st_foreach): report success/failure by return value.
  [ruby-Bugs-1396]

* parse.y: forgot to initialize parser struct.  [ruby-dev:25492]

* parse.y (parser_yylex): no tLABEL on EXPR_BEG.
  [ruby-talk:127711]

* document updates - [ruby-core:04296], [ruby-core:04301],
  [ruby-core:04302], [ruby-core:04307]

* dir.c (rb_push_glob): should work for NUL delimited patterns.

* dir.c (rb_glob2): should aware of offset in the pattern.

* string.c (rb_str_new4): should propagate taintedness.

* env.h: rename member names in struct FRAME; last_func -> callee,
  orig_func -> this_func, last_class -> this_class.

* struct.c (rb_struct_set): use original method name, not callee
  name, to retrieve member slot.  [ruby-core:04268]

* time.c (time_strftime): protect from format modification from GC
  finalizers.

* object.c (Init_Object): remove rb_obj_id_obsolete()

* eval.c (rb_mod_define_method): incomplete subclass check.
  [ruby-dev:25464]

* gc.c (rb_data_object_alloc): klass may be NULL.
  [ruby-list:40498]

* bignum.c (rb_big_rand): should return positive random number.
  [ruby-dev:25401]

* bignum.c (rb_big_rand): do not use rb_big_modulo to generate
  random bignums.  [ruby-dev:25396]

* variable.c (rb_autoload): [ruby-dev:25373]

* eval.c (svalue_to_avalue): [ruby-dev:25366]

* string.c (rb_str_justify): [ruby-dev:25367]

* io.c (rb_f_select): [ruby-dev:25312]

* ext/socket/socket.c (sock_s_getservbyport): [ruby-talk:124072]

* struct.c (make_struct): [ruby-dev:25249]

* dir.c (dir_open_dir): new function.  [ruby-dev:25242]

* io.c (rb_f_open): add type check for return value from to_open.

* lib/pstore.rb (PStore#transaction): Use the empty content when a
  file is not found.  [ruby-dev:24561]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8068 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information...
1 parent d29f9e0 commit 70bbad3cfd5a692c8e78ccf750eed3f1c7f186db matz committed Mar 4, 2005
Showing with 1,312 additions and 920 deletions.
  1. +230 −11 ChangeLog
  2. +35 −109 array.c
  3. +4 −2 bignum.c
  4. +9 −9 class.c
  5. +1 −2 common.mk
  6. +31 −14 dir.c
  7. +3 −3 env.h
  8. +1 −1 error.c
  9. +149 −97 eval.c
  10. +1 −1 ext/Win32API/Win32API.c
  11. +7 −7 ext/bigdecimal/bigdecimal.c
  12. +19 −2 ext/curses/curses.c
  13. +1 −1 ext/curses/extconf.rb
  14. +2 −2 ext/dl/cfunc.c
  15. +1 −1 ext/dl/cptr.c
  16. +3 −3 ext/dl/handle.c
  17. +5 −1 ext/etc/etc.c
  18. +1 −1 ext/iconv/iconv.c
  19. +2 −2 ext/openssl/ossl_cipher.c
  20. +2 −2 ext/pty/pty.c
  21. +9 −3 ext/readline/readline.c
  22. +26 −6 ext/socket/socket.c
  23. +2 −2 ext/strscan/strscan.c
  24. +26 −2 ext/tk/tcltklib.c
  25. +59 −59 ext/win32ole/win32ole.c
  26. +3 −3 ext/zlib/zlib.c
  27. +4 −6 file.c
  28. +1 −1 gc.c
  29. +48 −35 hash.c
  30. +2 −3 intern.h
  31. +33 −29 io.c
  32. +1 −1 lib/date.rb
  33. +1 −1 lib/fileutils.rb
  34. +1 −1 lib/irb/context.rb
  35. +1 −1 lib/open3.rb
  36. +6 −1 lib/parsedate.rb
  37. +8 −4 lib/pstore.rb
  38. +3 −3 lib/rdoc/generators/html_generator.rb
  39. +1 −1 lib/rdoc/generators/ri_generator.rb
  40. +140 −16 lib/rdoc/parsers/parse_c.rb
  41. +19 −3 lib/rdoc/parsers/parse_rb.rb
  42. +5 −1 lib/rdoc/parsers/parse_simple.rb
  43. +4 −4 lib/rexml/document.rb
  44. +1 −1 lib/rexml/element.rb
  45. +2 −2 lib/rexml/instruction.rb
  46. +54 −54 lib/rexml/xmldecl.rb
  47. +5 −0 lib/set.rb
  48. +44 −28 lib/time.rb
  49. +31 −21 lib/timeout.rb
  50. +2 −2 lib/wsdl/soap/definitions.rb
  51. +1 −1 lib/xmlrpc/parser.rb
  52. +2 −2 marshal.c
  53. +4 −2 misc/ruby-mode.el
  54. +4 −4 numeric.c
  55. +20 −59 object.c
  56. +2 −2 pack.c
  57. +47 −37 parse.y
  58. +4 −4 process.c
  59. +2 −2 range.c
  60. +1 −1 regint.h
  61. +85 −19 regparse.c
  62. +5 −5 ruby.c
  63. +13 −13 sample/test.rb
  64. +1 −1 signal.c
  65. +1 −1 sprintf.c
  66. +5 −133 st.c
  67. +1 −15 st.h
  68. +20 −16 string.c
  69. +24 −17 struct.c
  70. +10 −10 test/logger/test_logger.rb
  71. +9 −9 test/ruby/test_iterator.rb
  72. +1 −0 time.c
  73. +1 −2 variable.c
View
241 ChangeLog

Large diffs are not rendered by default.

Oops, something went wrong.
View
144 array.c
@@ -15,6 +15,7 @@
#include "ruby.h"
#include "util.h"
#include "st.h"
+#include "node.h"
VALUE rb_cArray, rb_cValues;
@@ -427,9 +428,6 @@ rb_ary_s_create(argc, argv, klass)
{
VALUE ary = ary_alloc(klass);
- if (argc < 0) {
- rb_raise(rb_eArgError, "negative number of arguments");
- }
if (argc > 0) {
RARRAY(ary)->ptr = ALLOC_N(VALUE, argc);
MEMCPY(RARRAY(ary)->ptr, argv, VALUE, argc);
@@ -705,9 +703,6 @@ rb_ary_unshift_m(argc, argv, ary)
{
long len = RARRAY(ary)->len;
- if (argc < 0) {
- rb_raise(rb_eArgError, "negative number of arguments");
- }
if (argc == 0) return ary;
/* make rooms by setting the last item */
@@ -1363,10 +1358,14 @@ rb_ary_dup(ary)
extern VALUE rb_output_fs;
static VALUE
-inspect_join(ary, arg)
+recursive_join(ary, arg, recur)
VALUE ary;
VALUE *arg;
+ int recur;
{
+ if (recur) {
+ return rb_str_new2("[...]");
+ }
return rb_ary_join(arg[0], arg[1]);
}
@@ -1396,15 +1395,12 @@ rb_ary_join(ary, sep)
case T_STRING:
break;
case T_ARRAY:
- if (rb_inspecting_p(tmp)) {
- tmp = rb_str_new2("[...]");
- }
- else {
+ {
VALUE args[2];
args[0] = tmp;
args[1] = sep;
- tmp = rb_protect_inspect(inspect_join, ary, (VALUE)args);
+ tmp = rb_exec_recursive(recursive_join, ary, (VALUE)args);
}
break;
default:
@@ -1464,96 +1460,17 @@ rb_ary_to_s(ary)
return rb_ary_join(ary, rb_output_fs);
}
-static ID inspect_key;
-
-struct inspect_arg {
- VALUE (*func)();
- VALUE arg1, arg2;
-};
-
-static VALUE
-inspect_call(arg)
- struct inspect_arg *arg;
-{
- return (*arg->func)(arg->arg1, arg->arg2);
-}
-
-static VALUE
-get_inspect_tbl(create)
- int create;
-{
- VALUE inspect_tbl = rb_thread_local_aref(rb_thread_current(), inspect_key);
-
- if (NIL_P(inspect_tbl)) {
- if (create) {
- tbl_init:
- inspect_tbl = rb_ary_new();
- rb_thread_local_aset(rb_thread_current(), inspect_key, inspect_tbl);
- }
- }
- else if (TYPE(inspect_tbl) != T_ARRAY) {
- rb_warn("invalid inspect_tbl value");
- if (create) goto tbl_init;
- rb_thread_local_aset(rb_thread_current(), inspect_key, Qnil);
- return Qnil;
- }
- return inspect_tbl;
-}
-
static VALUE
-inspect_ensure(obj)
- VALUE obj;
-{
- VALUE inspect_tbl;
-
- inspect_tbl = get_inspect_tbl(Qfalse);
- if (!NIL_P(inspect_tbl)) {
- rb_ary_pop(inspect_tbl);
- }
- return 0;
-}
-
-VALUE
-rb_protect_inspect(func, obj, arg)
- VALUE (*func)(ANYARGS);
- VALUE obj, arg;
-{
- struct inspect_arg iarg;
- VALUE inspect_tbl;
- VALUE id;
-
- inspect_tbl = get_inspect_tbl(Qtrue);
- id = rb_obj_id(obj);
- if (rb_ary_includes(inspect_tbl, id)) {
- return (*func)(obj, arg);
- }
- rb_ary_push(inspect_tbl, id);
- iarg.func = func;
- iarg.arg1 = obj;
- iarg.arg2 = arg;
-
- return rb_ensure(inspect_call, (VALUE)&iarg, inspect_ensure, obj);
-}
-
-VALUE
-rb_inspecting_p(obj)
- VALUE obj;
-{
- VALUE inspect_tbl;
-
- inspect_tbl = get_inspect_tbl(Qfalse);
- if (NIL_P(inspect_tbl)) return Qfalse;
- return rb_ary_includes(inspect_tbl, rb_obj_id(obj));
-}
-
-static VALUE
-inspect_ary(ary)
+inspect_ary(ary, dummy, recur)
VALUE ary;
+ VALUE dummy;
+ int recur;
{
int tainted = OBJ_TAINTED(ary);
long i;
VALUE s, str;
+ if (recur) return rb_tainted_str_new2("[...]");
str = rb_str_buf_new2("[");
for (i=0; i<RARRAY(ary)->len; i++) {
s = rb_inspect(RARRAY(ary)->ptr[i]);
@@ -1578,8 +1495,7 @@ rb_ary_inspect(ary)
VALUE ary;
{
if (RARRAY(ary)->len == 0) return rb_str_new2("[]");
- if (rb_inspecting_p(ary)) return rb_str_new2("[...]");
- return rb_protect_inspect(inspect_ary, ary, 0);
+ return rb_exec_recursive(inspect_ary, ary, 0);
}
/*
@@ -2254,7 +2170,7 @@ rb_ary_transpose(ary)
}
}
else if (elen != RARRAY(tmp)->len) {
- rb_raise(rb_eIndexError, "element size differ (%d should be %d)",
+ rb_raise(rb_eIndexError, "element size differs (%d should be %d)",
RARRAY(tmp)->len, elen);
}
for (j=0; j<elen; j++) {
@@ -2637,21 +2553,17 @@ rb_ary_eql(ary1, ary2)
return Qtrue;
}
-/*
- * call-seq:
- * array.hash -> fixnum
- *
- * Compute a hash-code for this array. Two arrays with the same content
- * will have the same hash code (and will compare using <code>eql?</code>).
- */
-
static VALUE
-rb_ary_hash(ary)
- VALUE ary;
+recursive_hash(ary, dummy, recur)
+ VALUE ary, dummy;
+ int recur;
{
long i, h;
VALUE n;
+ if (recur) {
+ return LONG2FIX(0);
+ }
h = RARRAY(ary)->len;
for (i=0; i<RARRAY(ary)->len; i++) {
h = (h << 1) | (h<0 ? 1 : 0);
@@ -2663,6 +2575,21 @@ rb_ary_hash(ary)
/*
* call-seq:
+ * array.hash -> fixnum
+ *
+ * Compute a hash-code for this array. Two arrays with the same content
+ * will have the same hash code (and will compare using <code>eql?</code>).
+ */
+
+static VALUE
+rb_ary_hash(ary)
+ VALUE ary;
+{
+ return rb_exec_recursive(recursive_hash, ary, 0);
+}
+
+/*
+ * call-seq:
* array.include?(obj) -> true or false
*
* Returns <code>true</code> if the given object is present in
@@ -3177,7 +3104,6 @@ Init_Array()
rb_define_method(rb_cArray, "nitems", rb_ary_nitems, 0);
id_cmp = rb_intern("<=>");
- inspect_key = rb_intern("__inspect_key__");
rb_cValues = rb_define_class("Values", rb_cArray);
}
View
@@ -1976,7 +1976,7 @@ rb_big_coerce(x, y)
return rb_assoc_new(rb_int2big(FIX2LONG(y)), x);
}
else {
- rb_raise(rb_eTypeError, "Can't coerce %s to Bignum",
+ rb_raise(rb_eTypeError, "can't coerce %s to Bignum",
rb_obj_classname(y));
}
/* not reached */
@@ -2015,11 +2015,13 @@ rb_big_rand(max, rand_buf)
return rb_float_new(rand_buf[0]);
}
v = bignew(len,1);
+ len--;
+ BDIGITS(v)[len] = BDIGITS(max)[len] * rand_buf[len];
while (len--) {
BDIGITS(v)[len] = ((BDIGIT)~0) * rand_buf[len];
}
- return rb_big_modulo((VALUE)v, max);
+ return v;
}
/*
View
18 class.c
@@ -159,24 +159,24 @@ VALUE
rb_make_metaclass(obj, super)
VALUE obj, super;
{
- VALUE klass = rb_class_boot(super);
- FL_SET(klass, FL_SINGLETON);
- RBASIC(obj)->klass = klass;
- rb_singleton_class_attached(klass, obj);
if (BUILTIN_TYPE(obj) == T_CLASS && FL_TEST(obj, FL_SINGLETON)) {
- RBASIC(klass)->klass = klass;
- RCLASS(klass)->super = RBASIC(rb_class_real(RCLASS(obj)->super))->klass;
+ return RBASIC(obj)->klass = rb_cClass;
}
else {
- VALUE metasuper = RBASIC(rb_class_real(super))->klass;
+ VALUE metasuper;
+ VALUE klass = rb_class_boot(super);
+ FL_SET(klass, FL_SINGLETON);
+ RBASIC(obj)->klass = klass;
+ rb_singleton_class_attached(klass, obj);
+
+ metasuper = RBASIC(rb_class_real(super))->klass;
/* metaclass of a superclass may be NULL at boot time */
if (metasuper) {
RBASIC(klass)->klass = metasuper;
}
+ return klass;
}
-
- return klass;
}
VALUE
View
@@ -241,8 +241,7 @@ inits.$(OBJEXT): {$(VPATH)}inits.c {$(VPATH)}ruby.h config.h \
{$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h
io.$(OBJEXT): {$(VPATH)}io.c {$(VPATH)}ruby.h config.h \
{$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \
- {$(VPATH)}rubyio.h {$(VPATH)}rubysig.h {$(VPATH)}env.h \
- {$(VPATH)}util.h
+ {$(VPATH)}rubyio.h {$(VPATH)}rubysig.h {$(VPATH)}util.h
main.$(OBJEXT): {$(VPATH)}main.c {$(VPATH)}ruby.h config.h \
{$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h
marshal.$(OBJEXT): {$(VPATH)}marshal.c {$(VPATH)}ruby.h config.h \
Oops, something went wrong.

0 comments on commit 70bbad3

Please sign in to comment.