summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1999-06-25 09:02:52 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1999-06-25 09:02:52 +0000
commit01a24da8d31dad0bd15b96a4527dbccb345c6a78 (patch)
treecd137ccc900fd4fc9d4932059aed25eed41f8c62
parent031d2e84df58ed54948671931544c41cf32da1ca (diff)
990625
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_3@492 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog46
-rw-r--r--Makefile.in2
-rw-r--r--configure8
-rw-r--r--configure.in8
-rw-r--r--eval.c39
-rw-r--r--ext/Win32API/depend2
-rw-r--r--ext/dbm/depend2
-rw-r--r--ext/etc/depend2
-rw-r--r--ext/extmk.rb.in22
-rw-r--r--ext/fcntl/depend2
-rw-r--r--ext/gdbm/depend2
-rw-r--r--ext/md5/depend2
-rw-r--r--ext/nkf/depend2
-rw-r--r--ext/socket/depend6
-rw-r--r--ext/tcltklib/depend2
-rw-r--r--ext/tk/depend2
-rw-r--r--gc.c2
-rw-r--r--lib/mkmf.rb1
-rw-r--r--missing/isinf.c1
-rw-r--r--missing/strftime.c2
-rw-r--r--node.h12
-rw-r--r--pack.c11
-rw-r--r--parse.y38
-rw-r--r--re.c7
-rw-r--r--regex.c44
-rw-r--r--ruby.h3
-rw-r--r--rubyio.h1
-rw-r--r--sample/test.rb8
-rw-r--r--string.c14
-rw-r--r--variable.c5
-rw-r--r--version.c5
-rw-r--r--version.h4
32 files changed, 178 insertions, 129 deletions
diff --git a/ChangeLog b/ChangeLog
index 739d458612..280aedf68f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,40 @@
+Fri Jun 25 13:07:20 1999 Koji Oda <oda@bsd1.qnes.nec.co.jp>
+
+ * missing/isinf.c: include "config.h" added.
+
+Fri Jun 25 13:09:12 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * pack.c (pack_unpack): needed to initialize natint.
+
+ * regex.c (re_compile_pattern): add start_paren to avoid too much
+ finalization on maybe_finalize_jump.
+
+Fri Jun 25 07:25:05 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * lib/mkmf.rb: initialize $(topdir).
+
+ * ext/extmk.rb.in (install_rb): install lib/*.rb properly.
+
+ * configure.in (linux): specifies -rpath on --enable-shared.
+
+ * configure.in (aix): ruby.imp must reside in $(topdir).
+
+Thu Jun 24 19:11:29 1999 Yoshida Masato <yoshidam@yoshidam.net>
+
+ * parse.y (rb_str_extend): multi-byte identifier in expression
+ interpolation in strings.
+
+ * parse.y (yylex): support multi-byte char identifiers.
+
+Thu Jun 24 15:27:13 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (f_arg): check duplicate argument names.
+
+ * gc.c (rb_gc_mark): marking wrong member for NODE_ARGS.
+
+ * string.c (rb_str_rindex): POSITION specifies start point, not
+ end point.
+
Thu Jun 24 13:00:17 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
* regex.c (print_mbc): wrong boundary.
@@ -8,6 +45,11 @@ Thu Jun 24 11:02:51 1999 Yoshida Masato <yoshidam@yoshidam.net>
* pack.c (uv_to_utf8): mask needed.
+Wed Jun 23 21:03:56 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * ruby.h (struct RFile): remove iv_tbl from struct. instance
+ variables are handled as generic ivs.
+
Wed Jun 23 22:06:26 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
* pack.c (utf8_to_uv): pack to 7 bytes sequence.
@@ -615,7 +657,7 @@ Mon Apr 19 13:49:11 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
* eval.c (eval): should restore ruby_dyna_vars.
-Fri Apr 16 21:40:43 1999 Nobuyoshu Nakada <gea02117@nifty.ne.jp>
+Fri Apr 16 21:40:43 1999 Nobuyoshi Nakada <gea02117@nifty.ne.jp>
* io.c (f_backquote): pipe_open may return nil.
@@ -641,7 +683,7 @@ Thu Apr 15 23:46:20 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
* ruby.c (rubylib_mangle): mangle path by RUBYLIB_PREFIX.
-Wed Apr 14 23:52:51 1999 SHIROYAMA Takayuki <psi@tokyo.stellar.co.jp>
+Wed Apr 14 23:52:51 1999 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
* node.h (NODE_LMASK): should be long to avoid overflow.
diff --git a/Makefile.in b/Makefile.in
index 6fbd9fcf5c..2fb4542b52 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -107,12 +107,12 @@ install: rbconfig.rb
clean:; @rm -f $(OBJS) $(LIBRUBY_A) $(LIBRUBY_SO) $(LIBRUBY_ALIASES) $(MAINOBJ) rbconfig.rb
@rm -f ext/extinit.c ext/extinit.o dmyext.o
@-./miniruby$(binsuffix) -Xext extmk.rb clean 2> /dev/null || true
+ @rm -f $(PROGRAM) miniruby$(binsuffix)
distclean: clean
@rm -f Makefile ext/extmk.rb config.h
@rm -f ext/config.cache config.cache config.log config.status
@rm -f *~ core *.core gmon.out y.tab.c y.output ruby.imp
- @rm -f $(PROGRAM) miniruby$(binsuffix)
realclean: distclean
@rm -f parse.c
diff --git a/configure b/configure
index 3c68d45271..bca443db68 100644
--- a/configure
+++ b/configure
@@ -4017,7 +4017,7 @@ echo "configure:3939: checking whether OS depend dynamic link works" >&5
rb_cv_dlopen=yes ;;
aix*) LDSHARED='/usr/ccs/bin/ld'
XLDFLAGS='-Wl,-bE:ruby.imp'
- DLDFLAGS='-eInit_$(TARGET) -bI:$(hdrdir)/ruby.imp -bM:SRE -T512 -H512 -lc'
+ DLDFLAGS='-eInit_$(TARGET) -bI:$(topdir)/ruby.imp -bM:SRE -T512 -H512 -lc'
rb_cv_dlopen=yes ;;
human*) DLDFLAGS=''
@@ -4477,7 +4477,11 @@ if test "$enable_shared" = 'yes'; then
LIBRUBYARG='-L. -l$(RUBY_INSTALL_NAME)'
CFLAGS="$CFLAGS $CCDLFLAGS"
case "$host_os" in
- sunos4*|linux*)
+ sunos4*)
+ LIBRUBY_ALIASES='lib$(RUBY_INSTALL_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_INSTALL_NAME).so'
+ ;;
+ linux*)
+ XLDFLAGS='-Wl,-rpath,${prefix}/lib':/usr/lib:/lib
LIBRUBY_ALIASES='lib$(RUBY_INSTALL_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_INSTALL_NAME).so'
;;
freebsd*)
diff --git a/configure.in b/configure.in
index dfe9fce5ce..127a8efc20 100644
--- a/configure.in
+++ b/configure.in
@@ -458,7 +458,7 @@ if test "$with_dln_a_out" != yes; then
rb_cv_dlopen=yes ;;
aix*) LDSHARED='/usr/ccs/bin/ld'
XLDFLAGS='-Wl,-bE:ruby.imp'
- DLDFLAGS='-eInit_$(TARGET) -bI:$(hdrdir)/ruby.imp -bM:SRE -T512 -H512 -lc'
+ DLDFLAGS='-eInit_$(TARGET) -bI:$(topdir)/ruby.imp -bM:SRE -T512 -H512 -lc'
rb_cv_dlopen=yes ;;
human*) DLDFLAGS=''
@@ -673,7 +673,11 @@ if test "$enable_shared" = 'yes'; then
LIBRUBYARG='-L. -l$(RUBY_INSTALL_NAME)'
CFLAGS="$CFLAGS $CCDLFLAGS"
case "$host_os" in
- sunos4*|linux*)
+ sunos4*)
+ LIBRUBY_ALIASES='lib$(RUBY_INSTALL_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_INSTALL_NAME).so'
+ ;;
+ linux*)
+ XLDFLAGS='-Wl,-rpath,${prefix}/lib':/usr/lib:/lib
LIBRUBY_ALIASES='lib$(RUBY_INSTALL_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_INSTALL_NAME).so'
;;
freebsd*)
diff --git a/eval.c b/eval.c
index de7e9864d2..2695d84dc3 100644
--- a/eval.c
+++ b/eval.c
@@ -1708,10 +1708,6 @@ rb_eval(self, node)
{
int state;
volatile VALUE result = Qnil;
-#ifdef NOBLOCK_RECUR
- NODE * volatile next = 0;
- NODE * volatile nstack = 0;
-#endif
#define RETURN(v) { result = (v); goto finish; }
@@ -1720,7 +1716,6 @@ rb_eval(self, node)
switch (nd_type(node)) {
case NODE_BLOCK:
-#ifndef NOBLOCK_RECUR
if (!node->nd_next) {
node = node->nd_head;
goto again;
@@ -1730,14 +1725,6 @@ rb_eval(self, node)
node = node->nd_next;
}
break;
-#else
- if (next) {
- nstack = rb_node_newnode(NODE_CREF,next,0,nstack);
- }
- next = node->nd_next;
- node = node->nd_head;
- goto again;
-#endif
case NODE_POSTEXE:
rb_f_END();
nd_set_type(node, NODE_NIL); /* exec just once */
@@ -1795,11 +1782,7 @@ rb_eval(self, node)
case NODE_IF:
ruby_sourceline = nd_line(node);
-#ifdef NOBLOCK_RECUR
- if (RTEST(result)){
-#else
if (RTEST(rb_eval(self, node->nd_cond))) {
-#endif
node = node->nd_body;
}
else {
@@ -1811,11 +1794,7 @@ rb_eval(self, node)
{
VALUE val;
-#ifdef NOBLOCK_RECUR
- val = result;
-#else
val = rb_eval(self, node->nd_head);
-#endif
node = node->nd_body;
while (node) {
NODE *tag;
@@ -2161,13 +2140,7 @@ rb_eval(self, node)
TMP_PROTECT;
BEGIN_CALLARGS;
-#ifdef NOBLOCK_RECUR_incomplete
- printf("mid %s recv: ", rb_id2name(node->nd_mid));
- rb_p(result);
- recv = result;
-#else
recv = rb_eval(self, node->nd_recv);
-#endif
SETUP_ARGS(node->nd_args);
END_CALLARGS;
@@ -2845,18 +2818,6 @@ rb_eval(self, node)
}
finish:
CHECK_INTS;
-#ifdef NOBLOCK_RECUR
- if (next) {
- node = next;
- next = 0;
- goto again;
- }
- if (nstack) {
- node = nstack->nd_head;
- nstack = nstack->nd_next;
- goto again;
- }
-#endif
return result;
}
diff --git a/ext/Win32API/depend b/ext/Win32API/depend
index 517b546de3..b224bb66c9 100644
--- a/ext/Win32API/depend
+++ b/ext/Win32API/depend
@@ -1 +1 @@
-Win32API.o : Win32API.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h
+Win32API.o : Win32API.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h
diff --git a/ext/dbm/depend b/ext/dbm/depend
index d7f1f419d4..5fae80b096 100644
--- a/ext/dbm/depend
+++ b/ext/dbm/depend
@@ -1 +1 @@
-dbm.o: dbm.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h
+dbm.o: dbm.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h
diff --git a/ext/etc/depend b/ext/etc/depend
index fb3318a0c6..ac706477b0 100644
--- a/ext/etc/depend
+++ b/ext/etc/depend
@@ -1 +1 @@
-etc.o : etc.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h
+etc.o : etc.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h
diff --git a/ext/extmk.rb.in b/ext/extmk.rb.in
index fb7236441a..d3ff174894 100644
--- a/ext/extmk.rb.in
+++ b/ext/extmk.rb.in
@@ -147,12 +147,13 @@ def try_run(src, opt="")
end
end
-def install_rb(mfile)
+def install_rb(mfile, srcdir)
+ libdir = srcdir + "/lib"
path = []
dir = []
- Find.find("lib") do |f|
+ Find.find(libdir) do |f|
next unless /\.rb$/ =~ f
- f = f[4..-1]
+ f = f[libdir.length+1..-1]
path.push f
dir |= File.dirname(f)
end
@@ -161,7 +162,7 @@ def install_rb(mfile)
mfile.printf "\t@test -d $(DESTDIR)$(pkglibdir)/%s || mkdir $(DESTDIR)$(pkglibdir)/%s\n", f, f
end
for f in path
- mfile.printf "\t$(INSTALL_DATA) lib/%s $(DESTDIR)$(pkglibdir)/%s\n", f, f
+ mfile.printf "\t$(INSTALL_DATA) $(srcdir)/lib/%s $(DESTDIR)$(pkglibdir)/%s\n", f, f
end
end
@@ -347,13 +348,14 @@ SHELL = /bin/sh
srcdir = #{$srcdir}
VPATH = #{$srcdir}
-hdrdir = #{$topdir}
+topdir = #{$topdir}
+hdrdir = #{$top_srcdir}
DESTDIR =
CC = @CC@
prefix = @prefix@
-CFLAGS = %s -I#{$topdir} -I#{$top_srcdir} -I@includedir@ #{CFLAGS} #$CFLAGS %s
+CFLAGS = %s -I$(topdir) -I$(hdrdir) -I@includedir@ #{CFLAGS} #$CFLAGS %s
DLDFLAGS = #$DLDFLAGS #$LDFLAGS
LDSHARED = @LDSHARED@ #{defflag}
", if $static then "" else "@CCDLFLAGS@" end, $defs.join(" ")
@@ -418,7 +420,7 @@ EOS
$(INSTALL_DLLIB) $(DLLIB) $(DESTDIR)$(archdir)/$(DLLIB)
"
end
- install_rb(mfile)
+ install_rb(mfile, $srcdir)
mfile.printf "\n"
if $static
@@ -449,11 +451,11 @@ $(DLLIB): $(OBJS)
"
end
- if File.exist?("depend")
- dfile = open("depend", "r")
+ if File.exist?("#{$srcdir}/depend")
+ dfile = open("#{$srcdir}/depend", "r")
mfile.printf "###\n"
while line = dfile.gets()
- mfile.printf "%s", line
+ mfile.printf "%s", line.gsub('\$\(hdrdir\)/config.h', '$(topdir)/config.h')
end
dfile.close
end
diff --git a/ext/fcntl/depend b/ext/fcntl/depend
index a7915c7d92..10eab64a46 100644
--- a/ext/fcntl/depend
+++ b/ext/fcntl/depend
@@ -1 +1 @@
-fcntl.o: fcntl.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h
+fcntl.o: fcntl.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h
diff --git a/ext/gdbm/depend b/ext/gdbm/depend
index 9e157bc23f..c080a81619 100644
--- a/ext/gdbm/depend
+++ b/ext/gdbm/depend
@@ -1 +1 @@
-gdbm.o: gdbm.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h
+gdbm.o: gdbm.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h
diff --git a/ext/md5/depend b/ext/md5/depend
index abb2a47419..c99f78ee90 100644
--- a/ext/md5/depend
+++ b/ext/md5/depend
@@ -1,2 +1,2 @@
md5c.o: md5c.c md5.h
-md5init.o: md5init.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h md5.h
+md5init.o: md5init.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h md5.h
diff --git a/ext/nkf/depend b/ext/nkf/depend
index db730602e7..645bc869c8 100644
--- a/ext/nkf/depend
+++ b/ext/nkf/depend
@@ -1 +1 @@
-nkf.o : nkf.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h nkf1.7/nkf.c
+nkf.o : nkf.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h nkf1.7/nkf.c
diff --git a/ext/socket/depend b/ext/socket/depend
index df2f0c5d16..cca6d4e62a 100644
--- a/ext/socket/depend
+++ b/ext/socket/depend
@@ -1,3 +1,3 @@
-socket.o : socket.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h $(hdrdir)/rubyio.h $(hdrdir)/rubysig.h sockport.h
-getnameinfo.o: getnameinfo.c $(hdrdir)/config.h addrinfo.h sockport.h
-getaddrinfo.o: getaddrinfo.c $(hdrdir)/config.h addrinfo.h sockport.h
+socket.o : socket.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/rubyio.h $(hdrdir)/rubysig.h sockport.h
+getnameinfo.o: getnameinfo.c $(topdir)/config.h addrinfo.h sockport.h
+getaddrinfo.o: getaddrinfo.c $(topdir)/config.h addrinfo.h sockport.h
diff --git a/ext/tcltklib/depend b/ext/tcltklib/depend
index 71d9f20537..e91f9dacbf 100644
--- a/ext/tcltklib/depend
+++ b/ext/tcltklib/depend
@@ -1 +1 @@
-tcltklib.o: tcltklib.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h
+tcltklib.o: tcltklib.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h
diff --git a/ext/tk/depend b/ext/tk/depend
index e325a82c0f..fd63e230f0 100644
--- a/ext/tk/depend
+++ b/ext/tk/depend
@@ -1 +1 @@
-tkutil.o: tkutil.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h
+tkutil.o: tkutil.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h
diff --git a/gc.c b/gc.c
index f3a39905c0..96974dba2d 100644
--- a/gc.c
+++ b/gc.c
@@ -459,7 +459,6 @@ rb_gc_mark(ptr)
case NODE_OR:
case NODE_CASE:
case NODE_SCLASS:
- case NODE_ARGS:
case NODE_DOT2:
case NODE_DOT3:
case NODE_FLIP2:
@@ -493,6 +492,7 @@ rb_gc_mark(ptr)
case NODE_RETURN:
case NODE_YIELD:
case NODE_COLON2:
+ case NODE_ARGS:
obj = RANY(obj->as.node.u1.node);
goto Top;
diff --git a/lib/mkmf.rb b/lib/mkmf.rb
index b1f431c7e1..82beea6b4f 100644
--- a/lib/mkmf.rb
+++ b/lib/mkmf.rb
@@ -349,6 +349,7 @@ SHELL = /bin/sh
#### Start of system configuration section. ####
srcdir = #{$srcdir}
+topdir = #{$hdrdir}
hdrdir = #{$hdrdir}
CC = #{CONFIG["CC"]}
diff --git a/missing/isinf.c b/missing/isinf.c
index 992ca57f67..3e1e410455 100644
--- a/missing/isinf.c
+++ b/missing/isinf.c
@@ -1,3 +1,4 @@
+#include "config.h"
#ifdef HAVE_STRING_H
# include <string.h>
#else
diff --git a/missing/strftime.c b/missing/strftime.c
index 18a6a7bf0b..cc3f1a8070 100644
--- a/missing/strftime.c
+++ b/missing/strftime.c
@@ -45,6 +45,8 @@
* January 1996
*/
+#include "config.h"
+
#ifndef GAWK
#include <stdio.h>
#include <ctype.h>
diff --git a/node.h b/node.h
index d8484127dd..4add37b47c 100644
--- a/node.h
+++ b/node.h
@@ -225,17 +225,9 @@ typedef struct RNode {
#define NEW_RFUNC(b1,b2) NEW_SCOPE(block_append(b1,b2))
#define NEW_SCOPE(b) rb_node_newnode(NODE_SCOPE,local_tbl(),cur_cref,(b))
#define NEW_BLOCK(a) rb_node_newnode(NODE_BLOCK,a,0,0)
-#ifdef NOBLOCK_RECUR
-#define NEW_IF(c,t,e) block_append(c,rb_node_newnode(NODE_IF,0,t,e))
-#else
#define NEW_IF(c,t,e) rb_node_newnode(NODE_IF,c,t,e)
-#endif
#define NEW_UNLESS(c,t,e) NEW_IF(c,e,t)
-#ifdef NOBLOCK_RECUR
-#define NEW_CASE(h,b) block_append(h,rb_node_newnode(NODE_CASE,0,b,0))
-#else
#define NEW_CASE(h,b) rb_node_newnode(NODE_CASE,h,b,0)
-#endif
#define NEW_WHEN(c,t,e) rb_node_newnode(NODE_WHEN,c,t,e)
#define NEW_OPT_N(b) rb_node_newnode(NODE_OPT_N,0,b,0)
#define NEW_WHILE(c,b,n) rb_node_newnode(NODE_WHILE,c,b,n)
@@ -285,11 +277,7 @@ typedef struct RNode {
#define NEW_XSTR(s) rb_node_newnode(NODE_XSTR,s,0,0)
#define NEW_DXSTR(s) rb_node_newnode(NODE_DXSTR,s,0,0)
#define NEW_EVSTR(s,l) rb_node_newnode(NODE_EVSTR,rb_str_new(s,l),0,0)
-#ifdef NOBLOCK_RECUR_incomplete
-#define NEW_CALL(r,m,a) block_append(r,rb_node_newnode(NODE_CALL,0,m,a))
-#else
#define NEW_CALL(r,m,a) rb_node_newnode(NODE_CALL,r,m,a)
-#endif
#define NEW_FCALL(m,a) rb_node_newnode(NODE_FCALL,0,m,a)
#define NEW_VCALL(m) rb_node_newnode(NODE_VCALL,0,m,0)
#define NEW_SUPER(a) rb_node_newnode(NODE_SUPER,0,0,a)
diff --git a/pack.c b/pack.c
index b9988830a6..5461aaddc1 100644
--- a/pack.c
+++ b/pack.c
@@ -984,7 +984,7 @@ hex2num(c)
#ifdef NATINT_PACK
#define PACK_LENGTH_ADJUST(type,sz) do { \
- int t__len = NATINT_LEN((type),(sz)); \
+ int t__len = NATINT_LEN(type,(sz)); \
tmp = 0; \
if (len > (send-s)/t__len) { \
if (!star) { \
@@ -1018,7 +1018,7 @@ pack_unpack(str, fmt)
char type;
int len, tmp, star;
#ifdef NATINT_PACK
- int natint; /* native integer */
+ int natint; /* native integer */
#endif
s = str2cstr(str, &len);
@@ -1028,6 +1028,9 @@ pack_unpack(str, fmt)
ary = rb_ary_new();
while (p < pend) {
+#ifdef NATINT_PACK
+ natint = 0;
+#endif
star = 0;
type = *p++;
if (*p == '_') {
@@ -1630,7 +1633,9 @@ uv_to_utf8(buf, uv)
buf[5] = (uv&0x3f)|0x80;
return 6;
}
+#if SIZEOF_LONG > 4
if (uv <= 0xfffffffff) {
+#endif
buf[0] = 0xfe;
buf[1] = ((uv>>30)&0x3f)|0x80;
buf[2] = ((uv>>24)&0x3f)|0x80;
@@ -1639,8 +1644,10 @@ uv_to_utf8(buf, uv)
buf[5] = ((uv>>6)&0x3f)|0x80;
buf[6] = (uv&0x3f)|0x80;
return 7;
+#if SIZEOF_LONG > 4
}
rb_raise(rb_eArgError, "uv_to_utf8(); too big value");
+#endif
}
static unsigned long
diff --git a/parse.y b/parse.y
index a47a3253b7..06d79a914d 100644
--- a/parse.y
+++ b/parse.y
@@ -180,7 +180,7 @@ static void top_local_setup();
%type <node> mlhs mlhs_head mlhs_tail mlhs_basic mlhs_entry mlhs_item mlhs_node
%type <id> variable symbol operation operation2 operation3
%type <id> cname fname op f_rest_arg
-%type <num> f_arg
+%type <num> f_norm_arg f_arg
%token tUPLUS /* unary+ */
%token tUMINUS /* unary- */
%token tPOW /* ** */
@@ -1505,18 +1505,19 @@ f_args : f_arg ',' f_optarg ',' f_rest_arg opt_f_block_arg
$$ = NEW_ARGS(0, 0, -1);
}
-f_arg : tIDENTIFIER
+f_norm_arg : tIDENTIFIER
{
if (!is_local_id($1))
yyerror("formal argument must be local variable");
+ else if (local_id($1))
+ yyerror("duplicate argument name");
local_cnt($1);
$$ = 1;
}
- | f_arg ',' tIDENTIFIER
+
+f_arg : f_norm_arg
+ | f_arg ',' f_norm_arg
{
- if (!is_local_id($3))
- yyerror("formal argument must be local variable");
- local_cnt($3);
$$ += 1;
}
@@ -1524,6 +1525,8 @@ f_opt : tIDENTIFIER '=' arg
{
if (!is_local_id($1))
yyerror("formal argument must be local variable");
+ else if (local_id($1))
+ yyerror("duplicate optional argument name");
$$ = assignable($1, $3);
}
@@ -1541,6 +1544,8 @@ f_rest_arg : tSTAR tIDENTIFIER
{
if (!is_local_id($2))
yyerror("rest argument must be local variable");
+ else if (local_id($2))
+ yyerror("duplicate rest argument name");
$$ = local_cnt($2);
}
| tSTAR
@@ -2703,9 +2708,6 @@ yylex()
}
if (lex_state == EXPR_BEG || lex_state == EXPR_MID ||
(lex_state == EXPR_ARG && space_seen && !ISSPACE(c))) {
- if (ISDIGIT(c)) {
- goto start_num;
- }
pushback(c);
lex_state = EXPR_BEG;
return tUPLUS;
@@ -3165,7 +3167,6 @@ yylex()
if (ismbchar(c)) {
int i, len = mbclen(c)-1;
- tokadd(c);
for (i = 0; i < len; i++) {
c = nextc();
tokadd(c);
@@ -3326,7 +3327,21 @@ rb_str_extend(list, term)
return list;
}
}
- /* through */
+
+ while (is_identchar(c)) {
+ tokadd(c);
+ if (ismbchar(c)) {
+ int i, len = mbclen(c)-1;
+
+ for (i = 0; i < len; i++) {
+ c = nextc();
+ tokadd(c);
+ }
+ }
+ c = nextc();
+ }
+ pushback(c);
+ break;
case '@':
tokadd(c);
@@ -3336,7 +3351,6 @@ rb_str_extend(list, term)
if (ismbchar(c)) {
int i, len = mbclen(c)-1;
- tokadd(c);
for (i = 0; i < len; i++) {
c = nextc();
tokadd(c);
diff --git a/re.c b/re.c
index 451b9b6208..4ecc46eee5 100644
--- a/re.c
+++ b/re.c
@@ -530,10 +530,11 @@ rb_reg_search(reg, str, pos, reverse)
}
regs = RMATCH(match)->regs;
- range = RSTRING(str)->len - pos;
if (reverse) {
- range = -range;
- pos = RSTRING(str)->len;
+ range = -pos;
+ }
+ else {
+ range = RSTRING(str)->len - pos;
}
result = re_search(RREGEXP(reg)->ptr,RSTRING(str)->ptr,RSTRING(str)->len,
pos, range, regs);
diff --git a/regex.c b/regex.c
index db01577e66..fd06aca153 100644
--- a/regex.c
+++ b/regex.c
@@ -344,6 +344,7 @@ enum regexpcode
and store it in a memory register. Followed by
one byte containing the register number. Register
numbers must be in the range 0 through RE_NREGS. */
+ start_paren, /* Place holder at the start of (?:..). */
stop_paren, /* Place holder at the end of (?:..). */
casefold_on, /* Turn on casefold flag. */
casefold_off, /* Turn off casefold flag. */
@@ -464,7 +465,7 @@ re_set_syntax(syntax)
static unsigned int
utf8_firstbyte(c)
- unsigned int c;
+ unsigned long c;
{
if (c < 0x80) return c;
if (c <= 0x7ff) return ((c>>6)&0xff)|0xc0;
@@ -472,12 +473,16 @@ utf8_firstbyte(c)
if (c <= 0x1fffff) return ((c>>18)&0xff)|0xf0;
if (c <= 0x3ffffff) return ((c>>24)&0xff)|0xf8;
if (c <= 0x7fffffff) return ((c>>30)&0xff)|0xfc;
+#if SIZEOF_INT > 4
if (c <= 0xfffffffff) return 0xfe;
+#else
+ return 0xfe;
+#endif
}
static void
print_mbc(c)
- unsigned int c;
+ unsigned long c;
{
if (current_mbctype == MBCTYPE_UTF8) {
if (c < 0x80)
@@ -587,13 +592,13 @@ print_mbc(c)
} while (0)
#define EXTRACT_MBC(p) \
- ((unsigned short)((unsigned char)(p)[0] << 24 | \
+ ((unsigned long)((unsigned char)(p)[0] << 24 | \
(unsigned char)(p)[1] << 16 | \
(unsigned char)(p)[2] << 8 | \
(unsigned char)(p)[3]))
#define EXTRACT_MBC_AND_INCR(p) \
- ((unsigned short)((p) += 4, \
+ ((unsigned long)((p) += 4, \
(unsigned char)(p)[-4] << 24 | \
(unsigned char)(p)[-3] << 16 | \
(unsigned char)(p)[-2] << 8 | \
@@ -614,14 +619,14 @@ print_mbc(c)
unsigned char sbc_map[sbc_size]; same as charset(_not)? up to here.
unsigned short mbc_size; number of intervals.
struct {
- unsigned int beg; beginning of interval.
- unsigned int end; end of interval.
+ unsigned long beg; beginning of interval.
+ unsigned long end; end of interval.
} intervals[mbc_size];
}; */
static void
set_list_bits(c1, c2, b)
- unsigned int c1, c2;
+ unsigned long c1, c2;
unsigned char *b;
{
unsigned char sbc_size = b[-1];
@@ -667,7 +672,7 @@ set_list_bits(c1, c2, b)
static int
is_in_list(c, b)
- unsigned int c;
+ unsigned long c;
const unsigned char *b;
{
unsigned short size;
@@ -736,6 +741,10 @@ print_partial_compiled_pattern(start, end)
printf("/stop_memory/%d/%d", mcnt, *p++);
break;
+ case start_paren:
+ printf("/start_paren");
+ break;
+
case stop_paren:
printf("/stop_paren");
break;
@@ -997,6 +1006,7 @@ calculate_must_string(start, end)
case endbuf:
case endbuf2:
case push_dummy_failure:
+ case start_paren:
case stop_paren:
case posix_on:
case posix_off:
@@ -1699,6 +1709,7 @@ re_compile_pattern(pattern, size, bufp)
break;
case ':':
+ BUFPUSH(start_paren);
pending_exact = 0;
default:
break;
@@ -2617,6 +2628,7 @@ re_compile_fastmap(bufp)
case wordend:
case pop_and_fail:
case push_dummy_failure:
+ case start_paren:
case stop_paren:
continue;
@@ -2785,7 +2797,7 @@ re_compile_fastmap(bufp)
}
{
unsigned short size;
- unsigned int c, beg, end;
+ unsigned long c, beg, end;
p += p[-1] + 2;
size = EXTRACT_UNSIGNED(&p[-2]);
@@ -2834,7 +2846,7 @@ re_compile_fastmap(bufp)
}
{
unsigned short size;
- unsigned int c, beg, end;
+ unsigned long c, beg, end;
p += p[-1] + 2;
size = EXTRACT_UNSIGNED(&p[-2]);
@@ -3042,7 +3054,7 @@ re_search(bufp, string, size, startpos, range, regs)
}
else if (fastmap && (bufp->stclass)) {
register unsigned char *p;
- unsigned int c;
+ unsigned long c;
int irange = range;
p = (unsigned char*)string+startpos;
@@ -3476,6 +3488,7 @@ re_match(bufp, string_arg, size, pos, regs)
p += 2;
continue;
+ case start_paren:
case stop_paren:
break;
@@ -3698,7 +3711,8 @@ re_match(bufp, string_arg, size, pos, regs)
if ((enum regexpcode)*p1 == stop_memory ||
(enum regexpcode)*p1 == start_memory)
p1 += 3; /* Skip over args, too. */
- else if ((enum regexpcode)*p1 == stop_paren)
+ else if (/*(enum regexpcode)*p1 == start_paren ||*/
+ (enum regexpcode)*p1 == stop_paren)
p1 += 1;
else
break;
@@ -3790,7 +3804,8 @@ re_match(bufp, string_arg, size, pos, regs)
if ((enum regexpcode)*p1 == stop_memory ||
(enum regexpcode)*p1 == start_memory)
p1 += 3; /* Skip over args, too. */
- else if ((enum regexpcode)*p1 == stop_paren)
+ else if (/*(enum regexpcode)*p1 == start_paren ||*/
+ (enum regexpcode)*p1 == stop_paren)
p1 += 1;
else
break;
@@ -4052,10 +4067,11 @@ re_match(bufp, string_arg, size, pos, regs)
pop_loop:
switch ((enum regexpcode)*p1) {
case stop_paren:
+#if 0
failed_paren = 1;
p1++;
goto pop_loop;
-
+#endif
case jump_n:
case finalize_push_n:
is_a_jump_n = 1;
diff --git a/ruby.h b/ruby.h
index 01beafcf68..b973105a8b 100644
--- a/ruby.h
+++ b/ruby.h
@@ -130,7 +130,7 @@ VALUE rb_int2inum _((long));
#define Qtrue 2
#define Qnil 4
-# define RTEST(v) rb_test_false_or_nil((VALUE)(v))
+#define RTEST(v) rb_test_false_or_nil((VALUE)(v))
#define NIL_P(v) ((VALUE)(v) == Qnil)
#define CLASS_OF(v) rb_class_of((VALUE)(v))
@@ -265,7 +265,6 @@ struct RHash {
struct RFile {
struct RBasic basic;
- struct st_table *iv_tbl;
struct OpenFile *fptr;
};
diff --git a/rubyio.h b/rubyio.h
index 979c6e607b..1df37b1501 100644
--- a/rubyio.h
+++ b/rubyio.h
@@ -36,7 +36,6 @@ typedef struct OpenFile {
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(obj)->fptr)
#define MakeOpenFile(obj, fp) do {\
- RFILE(obj)->iv_tbl = 0;\
fp = RFILE(obj)->fptr = ALLOC(OpenFile);\
fp->f = fp->f2 = NULL;\
fp->mode = 0;\
diff --git a/sample/test.rb b/sample/test.rb
index 023ff69d72..a849a42fc2 100644
--- a/sample/test.rb
+++ b/sample/test.rb
@@ -609,6 +609,14 @@ ABCD
ABCD
END
+ok(/^(ab+)+b/ =~ "ababb" && $& == "ababb")
+ok(/^(?:ab+)+b/ =~ "ababb" && $& == "ababb")
+ok(/^(ab+)+/ =~ "ababb" && $& == "ababb")
+ok(/^(?:ab+)+/ =~ "ababb" && $& == "ababb")
+
+ok(/(\s+\d+){2}/ =~ " 1 2" && $& == " 1 2")
+ok(/(?:\s+\d+){2}/ =~ " 1 2" && $& == " 1 2")
+
$x.gsub!(/((.|\n)*?)B((.|\n)*?)D/){$1+$3}
ok($x == "AC\nAC\n")
diff --git a/string.c b/string.c
index 2e4a95ecb9..f191bd1f4d 100644
--- a/string.c
+++ b/string.c
@@ -623,10 +623,10 @@ rb_str_rindex(argc, argv, str)
if (rb_scan_args(argc, argv, "11", &sub, &position) == 2) {
pos = NUM2INT(position);
- if (pos > RSTRING(str)->len) return Qnil;
+ if (pos > RSTRING(str)->len) pos = RSTRING(str)->len;
}
else {
- pos = 0;
+ pos = RSTRING(str)->len;
}
switch (TYPE(sub)) {
@@ -637,9 +637,9 @@ rb_str_rindex(argc, argv, str)
case T_STRING:
/* substring longer than string */
- if (RSTRING(str)->len - pos < RSTRING(sub)->len) return Qnil;
- sbeg = RSTRING(str)->ptr + pos;
- s = RSTRING(str)->ptr + RSTRING(str)->len - RSTRING(sub)->len;
+ if (pos < RSTRING(sub)->len) return Qnil;
+ sbeg = RSTRING(str)->ptr;
+ s = RSTRING(str)->ptr + pos - RSTRING(sub)->len;
t = RSTRING(sub)->ptr;
len = RSTRING(sub)->len;
while (sbeg <= s) {
@@ -653,8 +653,8 @@ rb_str_rindex(argc, argv, str)
case T_FIXNUM:
{
int c = FIX2INT(sub);
- char *p = RSTRING(str)->ptr + RSTRING(str)->len - 1;
- char *pbeg = RSTRING(str)->ptr + pos;
+ char *p = RSTRING(str)->ptr + pos - 1;
+ char *pbeg = RSTRING(str)->ptr;
while (pbeg <= p) {
if (*p == c) return INT2NUM(p - RSTRING(str)->ptr);
diff --git a/variable.c b/variable.c
index 0edb280da2..c8ad22f4b1 100644
--- a/variable.c
+++ b/variable.c
@@ -833,7 +833,6 @@ rb_ivar_get(obj, id)
case T_OBJECT:
case T_CLASS:
case T_MODULE:
- case T_FILE:
if (ROBJECT(obj)->iv_tbl && st_lookup(ROBJECT(obj)->iv_tbl, id, &val))
return val;
break;
@@ -860,7 +859,6 @@ rb_ivar_set(obj, id, val)
case T_OBJECT:
case T_CLASS:
case T_MODULE:
- case T_FILE:
if (!ROBJECT(obj)->iv_tbl) ROBJECT(obj)->iv_tbl = st_init_numtable();
st_insert(ROBJECT(obj)->iv_tbl, id, val);
break;
@@ -880,7 +878,6 @@ rb_ivar_defined(obj, id)
case T_OBJECT:
case T_CLASS:
case T_MODULE:
- case T_FILE:
if (ROBJECT(obj)->iv_tbl && st_lookup(ROBJECT(obj)->iv_tbl, id, 0))
return Qtrue;
break;
@@ -916,7 +913,6 @@ rb_obj_instance_variables(obj)
case T_OBJECT:
case T_CLASS:
case T_MODULE:
- case T_FILE:
ary = rb_ary_new();
if (ROBJECT(obj)->iv_tbl) {
st_foreach(ROBJECT(obj)->iv_tbl, ivar_i, ary);
@@ -955,7 +951,6 @@ rb_obj_remove_instance_variable(obj, name)
case T_OBJECT:
case T_CLASS:
case T_MODULE:
- case T_FILE:
if (ROBJECT(obj)->iv_tbl) {
st_delete(ROBJECT(obj)->iv_tbl, &id, &val);
}
diff --git a/version.c b/version.c
index 57039d5cfe..42d2ef84ca 100644
--- a/version.c
+++ b/version.c
@@ -35,7 +35,12 @@ Init_version()
void
ruby_show_version()
{
+#if RUBY_VERSION_CODE < 140
+ printf("ruby %s-%d [%s]\n", RUBY_VERSION, RUBY_RELEASE_CODE % 1000000,
+ RUBY_PLATFORM);
+#else
printf("ruby %s (%s) [%s]\n", RUBY_VERSION, RUBY_RELEASE_DATE, RUBY_PLATFORM);
+#endif
}
void
diff --git a/version.h b/version.h
index 06c560ff92..d6d3aa2974 100644
--- a/version.h
+++ b/version.h
@@ -1,4 +1,4 @@
#define RUBY_VERSION "1.3.4"
-#define RUBY_RELEASE_DATE "1999-06-24"
+#define RUBY_RELEASE_DATE "1999-06-25"
#define RUBY_VERSION_CODE 134
-#define RUBY_RELEASE_CODE 19990624
+#define RUBY_RELEASE_CODE 19990625