Skip to content
Browse files

001225

git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@1075 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information...
1 parent d98cd10 commit eea16da9f859d0e876fd331066a230a44b9a6a50 matz committed Dec 25, 2000
Showing with 164 additions and 83 deletions.
  1. +32 −2 ChangeLog
  2. +7 −7 Makefile.in
  3. +1 −0 ToDo
  4. +0 −3 array.c
  5. +19 −16 bignum.c
  6. +4 −2 eval.c
  7. +9 −4 hash.c
  8. +1 −0 lib/date.rb
  9. +3 −3 lib/mkmf.rb
  10. +2 −2 lib/singleton.rb
  11. +2 −1 misc/ruby-mode.el
  12. +43 −0 object.c
  13. +10 −3 parse.y
  14. +0 −20 process.c
  15. +29 −18 string.c
  16. +2 −2 version.h
View
34 ChangeLog
@@ -10,6 +10,36 @@ Mon Dec 25 04:43:02 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
* lib/net/http.rb: does not send HEAD on closing socket.
+Mon Dec 25 00:44:48 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_any_cmp): should use rb_str_cmp() if TYPE == T_STRING
+ and CLASS_OF == rb_cString.
+
+ * string.c (rb_str_new4): should copy class of original too.
+
+Mon Dec 25 00:04:54 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_thread_schedule): initial value of `max' changed to -1.
+
+Fri Dec 22 17:59:30 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * stable version 1.6.2 released.
+
+Mon Dec 25 00:16:14 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_replace_m): copy-on-write replace.
+
+ * parse.y (yylex): should handle => after identifier as well as ==
+ and =~.
+
+Sat Dec 23 23:55:57 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_cstr2inum): Integer("") should not return 0.
+
+Sat Dec 23 11:55:57 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_and): Array#& should preverve original order.
+
Sat Dec 23 03:44:16 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
* lib/net/protocol.rb: set @closed false in Socket#reopen.
@@ -22,9 +52,9 @@ Sat Dec 23 03:44:16 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
* lib/net/http.rb: refactoring.
-Fri Dec 22 17:59:30 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+Fri Dec 22 23:11:12 2000 Ueno Katsuhiro <unnie@blue.sky.or.jp>
- * stable version 1.6.2 released.
+ * eval.c (rb_feature_p): ext might be null.
Fri Dec 22 17:04:12 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
View
14 Makefile.in
@@ -237,21 +237,21 @@ win32.@OBJEXT@: $(srcdir)/win32/win32.c
###
parse.@OBJEXT@: parse.y ruby.h config.h defines.h intern.h env.h node.h st.h regex.h util.h lex.c
###
-array.@OBJEXT@: array.c ruby.h config.h defines.h intern.h st.h
+array.@OBJEXT@: array.c ruby.h config.h defines.h intern.h util.h st.h
bignum.@OBJEXT@: bignum.c ruby.h config.h defines.h intern.h
-class.@OBJEXT@: class.c ruby.h config.h defines.h intern.h node.h st.h
+class.@OBJEXT@: class.c ruby.h config.h defines.h intern.h rubysig.h node.h st.h
compar.@OBJEXT@: compar.c ruby.h config.h defines.h intern.h
dir.@OBJEXT@: dir.c ruby.h config.h defines.h intern.h
dln.@OBJEXT@: dln.c config.h defines.h dln.h
dmyext.@OBJEXT@: dmyext.c
-enum.@OBJEXT@: enum.c ruby.h config.h defines.h intern.h
+enum.@OBJEXT@: enum.c ruby.h config.h defines.h intern.h node.h
error.@OBJEXT@: error.c ruby.h config.h defines.h intern.h env.h version.h
eval.@OBJEXT@: eval.c ruby.h config.h defines.h intern.h node.h env.h rubysig.h st.h dln.h
-file.@OBJEXT@: file.c ruby.h config.h defines.h intern.h rubyio.h rubysig.h
+file.@OBJEXT@: file.c ruby.h config.h defines.h intern.h rubyio.h rubysig.h dln.h
gc.@OBJEXT@: gc.c ruby.h config.h defines.h intern.h rubysig.h st.h node.h env.h re.h regex.h
hash.@OBJEXT@: hash.c ruby.h config.h defines.h intern.h st.h rubysig.h util.h
inits.@OBJEXT@: inits.c ruby.h config.h defines.h intern.h
-io.@OBJEXT@: io.c ruby.h config.h defines.h intern.h rubyio.h rubysig.h env.h
+io.@OBJEXT@: io.c ruby.h config.h defines.h intern.h rubyio.h rubysig.h env.h util.h
main.@OBJEXT@: main.c ruby.h config.h defines.h intern.h
marshal.@OBJEXT@: marshal.c ruby.h config.h defines.h intern.h rubyio.h st.h
prec.@OBJEXT@: prec.c ruby.h config.h defines.h intern.h
@@ -263,8 +263,8 @@ process.@OBJEXT@: process.c ruby.h config.h defines.h intern.h rubysig.h st.h
random.@OBJEXT@: random.c ruby.h config.h defines.h intern.h
range.@OBJEXT@: range.c ruby.h config.h defines.h intern.h
re.@OBJEXT@: re.c ruby.h config.h defines.h intern.h re.h regex.h
-regex.@OBJEXT@: regex.c config.h regex.h util.h
-ruby.@OBJEXT@: ruby.c ruby.h config.h defines.h intern.h dln.h util.h
+regex.@OBJEXT@: regex.c config.h regex.h
+ruby.@OBJEXT@: ruby.c ruby.h config.h defines.h intern.h dln.h node.h util.h
signal.@OBJEXT@: signal.c ruby.h config.h defines.h intern.h rubysig.h
sprintf.@OBJEXT@: sprintf.c ruby.h config.h defines.h intern.h
st.@OBJEXT@: st.c config.h st.h
View
1 ToDo
@@ -51,6 +51,7 @@ Hacking Interpreter
* export rb_io_{addstr,printf,puts,print}
* autoload should work with threads [ruby-talk:4589]
* remove stdio dependency from IOs.
+* warn for inconsistent local variable usage (lv m and method m at the same time).
Standard Libraries
View
3 array.c
@@ -1463,9 +1463,6 @@ rb_ary_and(ary1, ary2)
long i;
ary2 = to_ary(ary2);
- if (RARRAY(ary1)->len < RARRAY(ary2)->len) { /* swap */
- VALUE tmp = ary1; ary1 = ary2; ary2 = tmp;
- }
hash = ary_make_hash(ary2, 0);
for (i=0; i<RARRAY(ary1)->len; i++) {
View
35 bignum.c
@@ -219,12 +219,8 @@ rb_cstr2inum(str, base)
}
else {
base = 8;
- if (!str[1]) return INT2FIX(0);
}
}
- else if (str[0] == 0) {
- return INT2FIX(0);
- }
else {
base = 10;
}
@@ -256,7 +252,7 @@ rb_cstr2inum(str, base)
while (*end && ISSPACE(*end)) end++;
if (*end) { /* trailing garbage */
bad:
- rb_raise(rb_eArgError, "invalid literal for Integer: %s", s);
+ rb_raise(rb_eArgError, "invalid value for Integer: \"%s\"", s);
}
}
@@ -282,28 +278,28 @@ rb_cstr2inum(str, base)
for (i=len;i--;) zds[i]=0;
while (c = *str++) {
switch (c) {
+ case '8': case '9':
+ if (base == 8) {
+ c = base;
+ break;
+ }
case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
+ case '5': case '6': case '7':
c = c - '0';
break;
case 'a': case 'b': case 'c':
case 'd': case 'e': case 'f':
- c = c - 'a' + 10;
+ if (base != 16) c = base;
+ else c = c - 'a' + 10;
break;
case 'A': case 'B': case 'C':
case 'D': case 'E': case 'F':
- c = c - 'A' + 10;
+ if (base != 16) c = base;
+ else c = c - 'A' + 10;
break;
case '_':
continue;
default:
- if (badcheck) {
- if (ISSPACE(c)) {
- while (*str && ISSPACE(*str)) str++;
- if (!*str) break;
- }
- rb_raise(rb_eArgError, "invalid literal for Integer: %s", s);
- }
c = base;
break;
}
@@ -323,7 +319,14 @@ rb_cstr2inum(str, base)
break;
}
}
- if (badcheck && s+2 < str && str[-2] == '_') goto bad;
+ if (badcheck) {
+ str--;
+ if (s+1 < str && str[-1] == '_') goto bad;
+ if (ISSPACE(c)) {
+ while (*str && ISSPACE(*str)) str++;
+ }
+ if (*str) goto bad;
+ }
return bignorm(z);
}
View
6 eval.c
@@ -5162,7 +5162,7 @@ rb_feature_p(feature, wait)
load_wait:
if (loading_tbl) {
char *ext = strrchr(f, '.');
- if (strcmp(ext, ".rb") == 0) {
+ if (ext && strcmp(ext, ".rb") == 0) {
rb_thread_t th;
while (st_lookup(loading_tbl, f, &th)) {
@@ -7177,7 +7177,7 @@ rb_thread_schedule()
}
again:
- max = 0;
+ max = -1;
FD_ZERO(&readfds);
FD_ZERO(&writefds);
FD_ZERO(&exceptfds);
@@ -8332,6 +8332,7 @@ rb_thread_inspect(thread)
void
rb_thread_atfork()
{
+#if 0 /* enable on 1.7 */
rb_thread_t th;
if (rb_thread_alone()) return;
@@ -8344,6 +8345,7 @@ rb_thread_atfork()
main_thread = curr_thread;
curr_thread->next = curr_thread;
curr_thread->prev = curr_thread;
+#endif
}
static VALUE rb_cCont;
View
13 hash.c
@@ -59,11 +59,15 @@ rb_any_cmp(a, b)
VALUE a, b;
{
VALUE args[2];
- if (FIXNUM_P(a)) {
- if (FIXNUM_P(b)) return a != b;
+ if (FIXNUM_P(a) && FIXNUM_P(b)) {
+ return a != b;
}
- else if (TYPE(a) == T_STRING) {
- if (TYPE(b) == T_STRING) return rb_str_cmp(a, b);
+ if (TYPE(a) == T_STRING && RBASIC(a)->klass == rb_cString &&
+ TYPE(b) == T_STRING && RBASIC(b)->klass == rb_cString) {
+ return rb_str_cmp(a, b);
+ }
+ if (SYMBOL_P(a) && SYMBOL_P(b)) {
+ return a != b;
}
args[0] = a;
@@ -79,6 +83,7 @@ rb_any_hash(a)
switch (TYPE(a)) {
case T_FIXNUM:
+ case T_SYMBOL:
hval = a;
break;
View
1 lib/date.rb
@@ -202,6 +202,7 @@ def once(*ids)
for id in ids
module_eval <<-"end;"
alias_method :__#{id.to_i}__, :#{id.id2name}
+ private :__#{id.to_i}__
def #{id.id2name}(*args, &block)
(@__#{id.to_i}__ ||= [__#{id.to_i}__(*args, &block)])[0]
end
View
6 lib/mkmf.rb
@@ -44,7 +44,7 @@
end
LINK = "#{CONFIG['CC']} -o conftest -I#{$hdrdir} #{CFLAGS} -I#{CONFIG['includedir']} %s #{CONFIG['LDFLAGS']} %s conftest.c %s %s #{CONFIG['LIBS']}"
-CPP = "#{CONFIG['CPP']} -E -I#{$hdrdir} #{CFLAGS} -I#{CONFIG['includedir']} %s %s conftest.c"
+CPP = "#{CONFIG['CPP']} -E %s -I#{$hdrdir} #{CFLAGS} -I#{CONFIG['includedir']} %s %s conftest.c"
def rm_f(*files)
targets = []
@@ -104,7 +104,7 @@ def try_cpp(src, opt="")
cfile.print src
cfile.close
begin
- xsystem(format(CPP, $CFLAGS, opt))
+ xsystem(format(CPP, $CPPFLAGS, $CFLAGS, opt))
ensure
rm_f "conftest*"
end
@@ -115,7 +115,7 @@ def egrep_cpp(pat, src, opt="")
cfile.print src
cfile.close
begin
- xsystem(format(CPP+"|egrep #{pat}", $CFLAGS, opt))
+ xsystem(format(CPP+"|egrep #{pat}", $CPPFLAGS, $CFLAGS, opt))
ensure
rm_f "conftest*"
end
View
4 lib/singleton.rb
@@ -16,10 +16,10 @@ def Singleton.append_features(klass)
klass.instance_eval %{
@__instance__ = nil
def instance
- Thread.critical = true
unless @__instance__
+ Thread.critical = true
begin
- @__instance__ = new
+ @__instance__ ||= new
ensure
Thread.critical = false
end
View
3 misc/ruby-mode.el
@@ -663,13 +663,14 @@ An end of a defun is found by moving forward from the beginning of one."
(or (boundp 'font-lock-variable-name-face)
(setq font-lock-variable-name-face font-lock-type-face))
+
(add-hook 'ruby-mode-hook
'(lambda ()
(make-local-variable 'font-lock-syntactic-keywords)
(setq font-lock-syntactic-keywords
'(("\\$\\([#\"'`$\\]\\)" 1 (1 . nil))
("\\(#\\)[{$@]" 1 (1 . nil))
- ("\\(/\\)\\([^/]\\|\\\\/\\)*\\(/\\)"
+ ("\\(/\\)\\([^/\n]\\|\\\\/\\)*\\(/\\)"
(1 (7 . ?'))
(3 (7 . ?')))))
(make-local-variable 'font-lock-defaults)
View
43 object.c
@@ -15,6 +15,7 @@
#include "ruby.h"
#include "st.h"
#include <stdio.h>
+#include <errno.h>
VALUE rb_mKernel;
VALUE rb_cObject;
@@ -946,6 +947,48 @@ rb_Float(val)
case T_BIGNUM:
return rb_float_new(rb_big2dbl(val));
+ case T_STRING:
+ {
+ char *q, *p, *end;
+ double d;
+
+ q = p = STR2CSTR(val);
+ while (*p && ISSPACE(*p)) p++;
+ again:
+ d = strtod(p, &end);
+ if (p == end) {
+ bad:
+ rb_raise(rb_eArgError, "invalid value for Float: \"%s\"", q);
+ }
+ if (*end) {
+ if (*end == '_') {
+ char *buf = ALLOCA_N(char, strlen(p));
+ char *n = buf, *last;
+
+ while (*p) {
+ if (*p == '_') {
+ last = ++p;
+ continue;
+ }
+ *n++ = *p++;
+ }
+ while (*last && (*last == '_' || ISSPACE(*last)))
+ last++;
+ if (!*last) goto bad;
+ *n = '\0';
+ p = buf;
+ goto again;
+ }
+ while (*end && ISSPACE(*end)) end++;
+ if (*end) goto bad;
+ }
+ if (errno == ERANGE) {
+ errno = 0;
+ rb_raise(rb_eArgError, "Float %s out of range", p);
+ }
+ return rb_float_new(d);
+ }
+
case T_NIL:
return rb_float_new(0.0);
View
13 parse.y
@@ -3244,9 +3244,11 @@ yylex()
tokadd(c);
seen_e++;
is_float++;
- if ((c = nextc()) == '-' || c == '+')
+ while ((c = nextc()) == '_')
+ seen_uc = 1;
+ if (c == '-' || c == '+')
tokadd(c);
- else
+ else
continue;
break;
@@ -3628,7 +3630,12 @@ yylex()
}
else {
if (lex_state == EXPR_FNAME) {
- if ((c = nextc()) == '=' && !peek('=') && !peek('~')) {
+#if 0
+ if ((c = nextc()) == '=' && !peek('=') && !peek('~') && !peek('>')) {
+#else
+ if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
+ (!peek('=') || lex_p + 1 < lex_pend && lex_p[1] == '>')) {
+#endif
result = tIDENTIFIER;
tokadd(c);
}
View
20 process.c
@@ -531,21 +531,6 @@ rb_f_exec(argc, argv)
}
static VALUE
-fork_rescue(data, errinfo)
- VALUE data, errinfo;
-{
- int status = 1;
-
- if (rb_obj_is_kind_of(errinfo, rb_eSystemExit)) {
- VALUE st = rb_iv_get(errinfo, "status");
-
- status = NUM2INT(st);
- }
- ruby_finalize();
- _exit(status);
-}
-
-static VALUE
rb_f_fork(obj)
VALUE obj;
{
@@ -560,15 +545,10 @@ rb_f_fork(obj)
#endif
rb_thread_atfork();
if (rb_block_given_p()) {
-#if 0
- rb_rescue2(rb_yield, Qnil, fork_rescue, 0, rb_eException, 0);
- _exit(0);
-#else
int status;
rb_protect(rb_yield, Qnil, &status);
ruby_stop(status);
-#endif
}
return Qnil;
View
47 string.c
@@ -97,19 +97,29 @@ VALUE
rb_str_new4(orig)
VALUE orig;
{
- if (OBJ_FROZEN(orig)) return orig;
+ VALUE klass;
+
+ klass = CLASS_OF(orig);
+ while (TYPE(klass) == T_ICLASS || FL_TEST(klass, FL_SINGLETON)) {
+ klass = (VALUE)RCLASS(klass)->super;
+ }
+
if (RSTRING(orig)->orig) {
+ VALUE str;
+
if (FL_TEST(orig, STR_NO_ORIG)) {
- orig = rb_str_new(RSTRING(orig)->ptr, RSTRING(orig)->len);
- OBJ_FREEZE(orig);
- return orig;
+ str = rb_str_new(RSTRING(orig)->ptr, RSTRING(orig)->len);
}
- OBJ_FREEZE(RSTRING(orig)->orig);
- return RSTRING(orig)->orig;
+ else {
+ str = rb_str_new3(RSTRING(orig)->orig);
+ }
+ OBJ_FREEZE(str);
+ RBASIC(str)->klass = klass;
+ return str;
}
else {
NEWOBJ(str, struct RString);
- OBJSETUP(str, rb_cString, T_STRING);
+ OBJSETUP(str, klass, T_STRING);
str->len = RSTRING(orig)->len;
str->ptr = RSTRING(orig)->ptr;
@@ -203,14 +213,7 @@ rb_str_dup(str)
str2 = rb_str_new3(RSTRING(str)->orig);
}
else {
- NEWOBJ(dup, struct RString);
- OBJSETUP(dup, klass, T_STRING);
-
- str2 = rb_str_new4(str);
- dup->len = RSTRING(str2)->len;
- dup->ptr = RSTRING(str2)->ptr;
- dup->orig = str2;
- str2 = (VALUE)dup;
+ str2 = rb_str_new3(rb_str_new4(str));
}
OBJ_INFECT(str2, str);
RBASIC(str2)->klass = klass;
@@ -1315,10 +1318,18 @@ rb_str_replace_m(str, str2)
{
if (TYPE(str2) != T_STRING) str2 = rb_str_to_str(str2);
rb_str_modify(str);
- rb_str_resize(str, RSTRING(str2)->len);
- memcpy(RSTRING(str)->ptr, RSTRING(str2)->ptr, RSTRING(str2)->len);
- if (OBJ_TAINTED(str2)) OBJ_TAINT(str);
+ if (RSTRING(str2)->orig && FL_TEST(str2, STR_NO_ORIG)) {
+ RSTRING(str)->len = RSTRING(str2)->len;
+ RSTRING(str)->ptr = RSTRING(str2)->ptr;
+ RSTRING(str)->orig = RSTRING(str2)->orig;
+ }
+ else {
+ rb_str_resize(str, RSTRING(str2)->len);
+ memcpy(RSTRING(str)->ptr, RSTRING(str2)->ptr, RSTRING(str2)->len);
+ }
+
+ if (OBJ_TAINTED(str2)) OBJ_TAINT(str);
return str;
}
View
4 version.h
@@ -1,4 +1,4 @@
#define RUBY_VERSION "1.6.2"
-#define RUBY_RELEASE_DATE "2000-12-22"
+#define RUBY_RELEASE_DATE "2000-12-25"
#define RUBY_VERSION_CODE 162
-#define RUBY_RELEASE_CODE 20001222
+#define RUBY_RELEASE_CODE 20001225

0 comments on commit eea16da

Please sign in to comment.
Something went wrong with that request. Please try again.