summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog17
-rw-r--r--configure.in27
-rw-r--r--dln.h10
-rw-r--r--eval.c20
-rw-r--r--gc.c5
-rw-r--r--io.c4
-rw-r--r--marshal.c2
-rw-r--r--pack.c6
-rw-r--r--parse.y7
-rw-r--r--process.c2
-rw-r--r--ruby.h28
-rw-r--r--sprintf.c2
-rw-r--r--string.c8
-rw-r--r--util.c36
-rw-r--r--version.h8
-rw-r--r--win32/config.h.in2
-rw-r--r--win32/config.status.in2
-rw-r--r--win32/setup.mak2
18 files changed, 101 insertions, 87 deletions
diff --git a/ChangeLog b/ChangeLog
index 74bd40d8a4..34cb8a4d08 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+Tue Dec 26 16:53:55 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_binding): recycling should be stopped for outer
+ scope too.
+
+ * eval.c (proc_new): ditto.
+
+Mon Dec 25 17:49:08 2000 K.Kosako <kosako@sofnec.co.jp>
+
+ * string.c (rb_str_replace_m): unexpected string share happens if
+ replace is done for associated (STR_NO_ORIG) string.
+
+Tue Dec 26 15:01:53 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_f_p): should not call rb_io_flush() if rb_defout is not
+ a IO (T_FILE).
+
Mon Dec 25 15:52:39 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
* stable version 1.6.2 released.
diff --git a/configure.in b/configure.in
index b24f492665..62a21fc750 100644
--- a/configure.in
+++ b/configure.in
@@ -163,6 +163,33 @@ if test "$rb_cv_have_attr_noreturn" = yes; then
AC_DEFINE(HAVE_ATTR_NORETURN)
fi
+AC_MSG_CHECKING(for inline)
+AC_CACHE_VAL(rb_cv_inline,
+[AC_TRY_COMPILE([
+extern __inline__ int foo() {return 0;}
+static __inline__ char* bar() {return "";}
+], [], rb_cv_inline="__inline__", )
+if test "$rb_cv_inline" = ""; then
+ AC_TRY_COMPILE([
+extern __inline int foo() {return 0;}
+static __inline char bar() {return "";}
+], [], rb_cv_inline="__inline", )
+fi
+if test "$rb_cv_inline" = ""; then
+ AC_TRY_COMPILE([
+extern inline int foo() {return 0;}
+static inline char bar() {return "";}
+], [], rb_cv_inline="inline", )
+fi])
+if test "$rb_cv_inline" = ""; then
+ AC_MSG_RESULT([not work])
+ AC_DEFINE(INLINE, /*inline*/)
+else
+ AC_MSG_RESULT($rb_cv_inline)
+ AC_DEFINE(HAVE_INLINE)
+ AC_DEFINE_UNQUOTED(INLINE, $rb_cv_inline)
+fi
+
dnl Checks for libraries.
case "$target_os" in
nextstep*) ;;
diff --git a/dln.h b/dln.h
index 7e3ab9fabb..940d82c414 100644
--- a/dln.h
+++ b/dln.h
@@ -13,13 +13,11 @@
#ifndef DLN_H
#define DLN_H
-#ifndef _
-#ifndef __STDC__
-# define _(args) ()
-# define const
-#else
+#undef _
+#ifdef HAVE_PROTOTYPES
# define _(args) args
-#endif
+#else
+# define _(args) ()
#endif
char *dln_find_exe _((const char*,const char*));
diff --git a/eval.c b/eval.c
index ae2ce62da9..57286486e0 100644
--- a/eval.c
+++ b/eval.c
@@ -5980,7 +5980,7 @@ static VALUE
rb_f_binding(self)
VALUE self;
{
- struct BLOCK *data;
+ struct BLOCK *data, *p;
struct RVarmap *vars;
VALUE bind;
@@ -6003,9 +6003,11 @@ rb_f_binding(self)
data->prev = 0;
}
- for (vars = data->dyna_vars; vars; vars = vars->next) {
- if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break;
- FL_SET(vars, DVAR_DONT_RECYCLE);
+ for (p = data; p; p = p->prev) {
+ for (vars = p->dyna_vars; vars; vars = vars->next) {
+ if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break;
+ FL_SET(vars, DVAR_DONT_RECYCLE);
+ }
}
scope_dup(data->scope);
POP_BLOCK();
@@ -6063,7 +6065,7 @@ proc_new(klass)
VALUE klass;
{
volatile VALUE proc;
- struct BLOCK *data;
+ struct BLOCK *data, *p;
struct RVarmap *vars;
if (!rb_block_given_p() && !rb_f_block_given_p()) {
@@ -6085,9 +6087,11 @@ proc_new(klass)
}
data->flags |= BLOCK_DYNAMIC;
- for (vars = data->dyna_vars; vars; vars = vars->next) {
- if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break;
- FL_SET(vars, DVAR_DONT_RECYCLE);
+ for (p = data; p; p = p->prev) {
+ for (vars = p->dyna_vars; vars; vars = vars->next) {
+ if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break;
+ FL_SET(vars, DVAR_DONT_RECYCLE);
+ }
}
scope_dup(data->scope);
proc_save_safe_level(proc);
diff --git a/gc.c b/gc.c
index a3578aef2f..0460cf553c 100644
--- a/gc.c
+++ b/gc.c
@@ -308,10 +308,7 @@ rb_data_object_alloc(klass, datap, dmark, dfree)
extern st_table *rb_class_tbl;
VALUE *rb_gc_stack_start = 0;
-#if defined(__GNUC__) && __GNUC__ >= 2
-__inline__
-#endif
-static int
+static INLINE int
is_pointer_to_heap(ptr)
void *ptr;
{
diff --git a/io.c b/io.c
index a422cc0869..8dcf258af9 100644
--- a/io.c
+++ b/io.c
@@ -2156,7 +2156,9 @@ rb_f_p(argc, argv)
for (i=0; i<argc; i++) {
rb_p(argv[i]);
}
- rb_io_flush(rb_defout);
+ if (TYPE(rb_defout) != T_FILE) {
+ rb_io_flush(rb_defout);
+ }
return Qnil;
}
diff --git a/marshal.c b/marshal.c
index cf84e5ed24..5c217a6879 100644
--- a/marshal.c
+++ b/marshal.c
@@ -14,7 +14,7 @@
#include "rubyio.h"
#include "st.h"
-#ifndef atof
+#if !defined(atof) && !defined(HAVE_STDLIB_H)
double strtod();
#endif
diff --git a/pack.c b/pack.c
index 5538600449..a6e4b08a1b 100644
--- a/pack.c
+++ b/pack.c
@@ -1026,11 +1026,7 @@ qpencode(str, from, len)
}
}
-#if defined(__GNUC__) && __GNUC__ >= 2 && !defined(RUBY_NO_INLINE)
-static __inline__ int
-#else
-static int
-#endif
+static INLINE int
hex2num(c)
char c;
{
diff --git a/parse.y b/parse.y
index d1f1a32321..da7bba3578 100644
--- a/parse.y
+++ b/parse.y
@@ -2043,10 +2043,7 @@ rb_compile_file(f, file, start)
return yycompile(strdup(f), start);
}
-#if defined(__GNUC__) && __GNUC__ >= 2
-__inline__
-#endif
-static int
+static INLINE int
nextc()
{
int c;
@@ -2794,7 +2791,7 @@ arg_ambiguous()
rb_warning("ambiguous first argument; make sure");
}
-#ifndef strtod
+#if !defined(strtod) && !defined(HAVE_STDLIB_H)
double strtod ();
#endif
diff --git a/process.c b/process.c
index 3537841d43..90153977b8 100644
--- a/process.c
+++ b/process.c
@@ -234,7 +234,9 @@ proc_waitpid2(argc, argv)
return rb_assoc_new(pid, rb_last_status);
}
+#ifndef HAVE_STRING_H
char *strtok();
+#endif
#ifdef HAVE_SETITIMER
#define before_exec() rb_thread_stop_timer()
diff --git a/ruby.h b/ruby.h
index ca97ee2c42..9784fc65d2 100644
--- a/ruby.h
+++ b/ruby.h
@@ -541,12 +541,15 @@ EXTERN VALUE rb_eNameError;
EXTERN VALUE rb_eSyntaxError;
EXTERN VALUE rb_eLoadError;
-#if defined(__GNUC__) && __GNUC__ >= 2 && !defined(RUBY_NO_INLINE)
-extern __inline__ VALUE rb_class_of _((VALUE));
-extern __inline__ int rb_type _((VALUE));
-extern __inline__ int rb_special_const_p _((VALUE));
+extern INLINE VALUE rb_class_of _((VALUE));
+extern INLINE int rb_type _((VALUE));
+extern INLINE int rb_special_const_p _((VALUE));
-extern __inline__ VALUE
+#if defined(HAVE_INLINE) || defined(RUBY_NO_INLINE)
+#ifndef RUBY_NO_INLINE
+extern
+#endif
+INLINE VALUE
rb_class_of(VALUE obj)
{
if (FIXNUM_P(obj)) return rb_cFixnum;
@@ -558,7 +561,10 @@ rb_class_of(VALUE obj)
return RBASIC(obj)->klass;
}
-extern __inline__ int
+#ifndef RUBY_NO_INLINE
+extern
+#endif
+INLINE int
rb_type(VALUE obj)
{
if (FIXNUM_P(obj)) return T_FIXNUM;
@@ -570,17 +576,15 @@ rb_type(VALUE obj)
return BUILTIN_TYPE(obj);
}
-extern __inline__ int
+#ifndef RUBY_NO_INLINE
+extern
+#endif
+INLINE int
rb_special_const_p(VALUE obj)
{
if (SPECIAL_CONST_P(obj)) return Qtrue;
return Qfalse;
}
-
-#else
-VALUE rb_class_of _((VALUE));
-int rb_type _((VALUE));
-int rb_special_const_p _((VALUE));
#endif
#include "intern.h"
diff --git a/sprintf.c b/sprintf.c
index 756de87ed9..cb567315ba 100644
--- a/sprintf.c
+++ b/sprintf.c
@@ -18,7 +18,7 @@
#define BIT_DIGITS(N) (((N)*146)/485 + 1) /* log2(10) =~ 146/485 */
-#ifndef atof
+#if !defined(atof) && !defined(HAVE_STDLIB_H)
double strtod();
#endif
diff --git a/string.c b/string.c
index ddf50e2eed..5edac14e66 100644
--- a/string.c
+++ b/string.c
@@ -1316,15 +1316,19 @@ static VALUE
rb_str_replace_m(str, str2)
VALUE str, str2;
{
+ if (str == str2) return str;
if (TYPE(str2) != T_STRING) str2 = rb_str_to_str(str2);
- rb_str_modify(str);
- if (RSTRING(str2)->orig && FL_TEST(str2, STR_NO_ORIG)) {
+ if (RSTRING(str2)->orig && !FL_TEST(str2, STR_NO_ORIG)) {
+ if (str_independent(str)) {
+ free(RSTRING(str)->ptr);
+ }
RSTRING(str)->len = RSTRING(str2)->len;
RSTRING(str)->ptr = RSTRING(str2)->ptr;
RSTRING(str)->orig = RSTRING(str2)->orig;
}
else {
+ rb_str_modify(str);
rb_str_resize(str, RSTRING(str2)->len);
memcpy(RSTRING(str)->ptr, RSTRING(str2)->ptr, RSTRING(str2)->len);
}
diff --git a/util.c b/util.c
index 9cbfb5fc74..25c00ae2d6 100644
--- a/util.c
+++ b/util.c
@@ -19,42 +19,6 @@
#define RUBY_NO_INLINE
#include "ruby.h"
-VALUE
-rb_class_of(obj)
- VALUE obj;
-{
- if (FIXNUM_P(obj)) return rb_cFixnum;
- if (obj == Qnil) return rb_cNilClass;
- if (obj == Qfalse) return rb_cFalseClass;
- if (obj == Qtrue) return rb_cTrueClass;
- if (SYMBOL_P(obj)) return rb_cSymbol;
-
- return RBASIC(obj)->klass;
-}
-
-int
-rb_type(obj)
- VALUE obj;
-{
- if (FIXNUM_P(obj)) return T_FIXNUM;
- if (obj == Qnil) return T_NIL;
- if (obj == Qfalse) return T_FALSE;
- if (obj == Qtrue) return T_TRUE;
- if (obj == Qundef) return T_UNDEF;
- if (SYMBOL_P(obj)) return T_SYMBOL;
-
- return BUILTIN_TYPE(obj);
-}
-
-int
-rb_special_const_p(obj)
- VALUE obj;
-{
- if (SPECIAL_CONST_P(obj)) return Qtrue;
-
- return Qfalse;
-}
-
#include "util.h"
#ifndef HAVE_STRING_H
char *strchr _((char*,char));
diff --git a/version.h b/version.h
index 71d484b8fd..5d1bd51c61 100644
--- a/version.h
+++ b/version.h
@@ -1,4 +1,4 @@
-#define RUBY_VERSION "1.6.2"
-#define RUBY_RELEASE_DATE "2000-12-25"
-#define RUBY_VERSION_CODE 162
-#define RUBY_RELEASE_CODE 20001225
+#define RUBY_VERSION "1.7.0"
+#define RUBY_RELEASE_DATE "2000-12-26"
+#define RUBY_VERSION_CODE 170
+#define RUBY_RELEASE_CODE 20001226
diff --git a/win32/config.h.in b/win32/config.h.in
index a7e28120e6..149faf7d8c 100644
--- a/win32/config.h.in
+++ b/win32/config.h.in
@@ -1,6 +1,8 @@
#define HAVE_PROTOTYPES 1
#define HAVE_STDARG_PROTOTYPES 1
/* #define HAVE_ATTR_NORETURN 1 */
+#define HAVE_INLINE 1
+#define INLINE __inline
/* #define HAVE_DIRENT_H 1 */
/* #define HAVE_UNISTD_H 1 */
#define HAVE_STDLIB_H 1
diff --git a/win32/config.status.in b/win32/config.status.in
index 461877b886..598eb792fe 100644
--- a/win32/config.status.in
+++ b/win32/config.status.in
@@ -4,7 +4,7 @@ s%@CPPFLAGS@%%g
s%@CXXFLAGS@%%g
s%@FFLAGS@%%g
s%@DEFS@%
- -DUSE_THREAD -DSIZEOF_INT=4 -DSIZEOF_SHORT=2 -DSIZEOF_LONG=4 -DSIZEOF_VOIDP=4 -DSIZEOF_FLOAT=4 -DSIZEOF_DOUBLE=8 -DHAVE_PROTOTYPES=1 -DHAVE_STDARG_PROTOTYPES=1 -DHAVE_STDLIB_H=1 -DHAVE_LIMITS_H=1 -DHAVE_FCNTL_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ST_RDEV=1 -DGETGROUPS_T=int -DRETSIGTYPE=void -DHAVE_ALLOCA=1 -DHAVE_FMOD=1 -DHAVE_WAITPID=1 -DHAVE_GETCWD=1 -DHAVE_CHSIZE=1 -DHAVE_GETGROUPS=1 -DHAVE_GETLOGIN=1 -DRSHIFT=\(x,y\)\ \(\(x\)\>\>y\) -DFILE_COUNT=_cnt -DDLEXT=\".so\" -DDLEXT2=\".dll\" -DRUBY_PLATFORM=\"i586-mswin32\" %g
+ -DUSE_THREAD -DSIZEOF_INT=4 -DSIZEOF_SHORT=2 -DSIZEOF_LONG=4 -DSIZEOF_VOIDP=4 -DSIZEOF_FLOAT=4 -DSIZEOF_DOUBLE=8 -DHAVE_PROTOTYPES=1 -DHAVE_STDARG_PROTOTYPES=1 -DHAVE_INLINE=1 -DINLINE=__inline -DHAVE_STDLIB_H=1 -DHAVE_LIMITS_H=1 -DHAVE_FCNTL_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ST_RDEV=1 -DGETGROUPS_T=int -DRETSIGTYPE=void -DHAVE_ALLOCA=1 -DHAVE_FMOD=1 -DHAVE_WAITPID=1 -DHAVE_GETCWD=1 -DHAVE_CHSIZE=1 -DHAVE_GETGROUPS=1 -DHAVE_GETLOGIN=1 -DRSHIFT=\(x,y\)\ \(\(x\)\>\>y\) -DFILE_COUNT=_cnt -DDLEXT=\".so\" -DDLEXT2=\".dll\" -DRUBY_PLATFORM=\"i586-mswin32\" %g
s%@LDFLAGS@%-nologo%g
s%@LIBS@%user32.lib advapi32.lib wsock32.lib%g
s%@exec_prefix@%${prefix}%g
diff --git a/win32/setup.mak b/win32/setup.mak
index 6bca4419b1..dce77e896c 100644
--- a/win32/setup.mak
+++ b/win32/setup.mak
@@ -18,7 +18,7 @@ Makefile:
@echo ### makefile for ruby $(OS) ###> $@
@echo srcdir = $(srcdir:\=/)>> $@
@echo RUBY_INSTALL_NAME = ruby>> $@
- @echo RUBY_SO_NAME = $(OS)-$$(RUBY_INSTALL_NAME)16>> $@
+ @echo RUBY_SO_NAME = $(OS)-$$(RUBY_INSTALL_NAME)17>> $@
@echo !INCLUDE $$(srcdir)/win32/Makefile.sub>> $@
config.h config.status: $(srcdir)/win32/$$@.in