summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-11-01 13:04:35 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-11-01 13:04:35 +0000
commit9974cb96d3c2ca18ab27aa37081fa4a8b37cb074 (patch)
tree8e3ffba4898afc1d4b9f82162d46157d0cf0a93f
parentcc1b72bc22453ac85b9308eb1c0e985b6e53cb7a (diff)
* eval.c (rb_call_super): should call method_missing if super is
called from Kernel method. * eval.c (exec_under): frame during eval should preserve external information. * configure.in: use proper option for Sun linker. A patch from Shinya Kuwamura <kuwa@labs.fujitsu.com>. [ruby-dev:27603] * numeric.c (fix_rshift): RDoc fix. [ruby-core:6351] * util.h (strtod): add #undef for platforms defines strtod() macro. [ruby-dev:27563] * ext/etc/etc.c: document update from mathew <meta@pobox.com>. [ruby-core:06473] * ext/fcntl/fcntl.c: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9490 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog27
-rw-r--r--configure.in6
-rw-r--r--eval.c14
-rw-r--r--ext/etc/etc.c135
-rw-r--r--ext/fcntl/fcntl.c75
-rw-r--r--ext/syck/rubyext.c1
-rw-r--r--lib/matrix.rb12
-rw-r--r--lib/pstore.rb2
-rw-r--r--lib/rdoc/parsers/parse_rb.rb1
-rw-r--r--numeric.c2
-rw-r--r--util.h1
11 files changed, 262 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index c811024c03..046c38b249 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Tue Nov 1 14:20:11 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call_super): should call method_missing if super is
+ called from Kernel method.
+
+ * eval.c (exec_under): frame during eval should preserve external
+ information.
+
Tue Nov 01 10:48:49 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
* ext/openssl/extconf.rb: should check ERR_peek_last_error().
@@ -5,6 +13,11 @@ Tue Nov 01 10:48:49 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
* ext/openssl/ossl.c (ossl_raise): ditto.
+Mon Oct 31 17:34:46 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * configure.in: use proper option for Sun linker. A patch from
+ Shinya Kuwamura <kuwa@labs.fujitsu.com>. [ruby-dev:27603]
+
Mon Oct 31 05:46:08 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
* ext/openssl/ossl_cipher.c (ossl_cipher_update): input data must
@@ -24,11 +37,25 @@ Mon Oct 31 05:38:26 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
* test/webrick/test_cookie.rb, test/webrick/test_cgi.rb,
test/webrick/webrick.cgi: add some test for cookie.
+Mon Oct 31 02:33:25 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (fix_rshift): RDoc fix. [ruby-core:6351]
+
+ * util.h (strtod): add #undef for platforms defines strtod()
+ macro. [ruby-dev:27563]
+
Mon Oct 31 02:31:41 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
* test/ruby/test_float.rb (test_precision): test by assert_in_delta.
[ruby-dev:27575]
+Sat Oct 29 01:58:25 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/etc/etc.c: document update from mathew <meta@pobox.com>.
+ [ruby-core:06473]
+
+ * ext/fcntl/fcntl.c: ditto.
+
Sat Oct 29 16:56:03 2005 Tadayoshi Funaba <tadf@dotrb.org>
* lib/date.rb: added seven predicates sunday? to saturday?.
diff --git a/configure.in b/configure.in
index dff993ef23..c58b3ca2f7 100644
--- a/configure.in
+++ b/configure.in
@@ -996,7 +996,11 @@ if test "$with_dln_a_out" != yes; then
[enable_rpath=$enableval], [enable_rpath="$rb_cv_binary_elf"])
if test "$enable_rpath" = yes; then
LIBPATHFLAG=" -L'%1\$-s'"
- RPATHFLAG=" -Wl,-R'%1\$-s'"
+ if test "$GCC" = yes; then
+ RPATHFLAG=" -Wl,-R'%1\$-s'"
+ else
+ RPATHFLAG=" -R'%1\$-s'"
+ fi
fi
fi
if test "${LDSHAREDXX}" = ""; then
diff --git a/eval.c b/eval.c
index 5932a1bba3..d5048d9465 100644
--- a/eval.c
+++ b/eval.c
@@ -5914,6 +5914,9 @@ rb_call_super(int argc, const VALUE *argv)
self = ruby_frame->self;
klass = ruby_frame->this_class;
+ if (RCLASS(klass)->super == 0) {
+ return method_missing(self, ruby_frame->this_func, argc, argv, CSTAT_SUPER);
+ }
PUSH_ITER(ruby_iter->iter ? ITER_PRE : ITER_NOT);
result = rb_call(RCLASS(klass)->super, self, ruby_frame->this_func, argc, argv, 3);
@@ -6256,14 +6259,15 @@ exec_under(VALUE (*func) (VALUE), VALUE under, VALUE cbase, VALUE args)
VALUE val = Qnil; /* OK */
int state;
int mode;
+ struct FRAME *f = ruby_frame->prev;
PUSH_CLASS(under);
PUSH_FRAME();
- ruby_frame->self = _frame.prev->self;
- ruby_frame->callee = _frame.prev->callee;
- ruby_frame->this_func = _frame.prev->this_func;
- ruby_frame->this_class = _frame.prev->this_class;
- ruby_frame->argc = _frame.prev->argc;
+ ruby_frame->self = f->self;
+ ruby_frame->callee = f->callee;
+ ruby_frame->this_func = f->this_func;
+ ruby_frame->this_class = f->this_class;
+ ruby_frame->argc = f->argc;
if (cbase) {
PUSH_CREF(cbase);
}
diff --git a/ext/etc/etc.c b/ext/etc/etc.c
index 3b788d72d7..94196e066a 100644
--- a/ext/etc/etc.c
+++ b/ext/etc/etc.c
@@ -34,6 +34,11 @@ char *getenv();
#endif
char *getlogin();
+/* Returns the short user name of the currently logged in user.
+ *
+ * e.g.
+ * Etc.getlogin -> 'guest'
+ */
static VALUE
etc_getlogin(obj)
VALUE obj;
@@ -104,6 +109,15 @@ setup_passwd(pwd)
}
#endif
+/* Returns the /etc/passwd information for the user with specified integer
+ * user id (uid).
+ *
+ * The information is returned as a Struct::Passwd; see getpwent above for
+ * details.
+ *
+ * e.g. * Etc.getpwuid(0) -> #<struct Struct::Passwd name="root",
+ * passwd="x", uid=0, gid=0, gecos="root",dir="/root", shell="/bin/bash">
+ */
static VALUE
etc_getpwuid(argc, argv, obj)
int argc;
@@ -130,6 +144,14 @@ etc_getpwuid(argc, argv, obj)
#endif
}
+/* Returns the /etc/passwd information for the user with specified login name.
+ *
+ * The information is returned as a Struct::Passwd; see getpwent above for
+ * details.
+ *
+ * e.g. * Etc.getpwnam('root') -> #<struct Struct::Passwd name="root",
+ * passwd="x", uid=0, gid=0, gecos="root",dir="/root", shell="/bin/bash">
+ */
static VALUE
etc_getpwnam(obj, nam)
VALUE obj, nam;
@@ -169,6 +191,21 @@ passwd_iterate()
}
#endif
+/* Provides a convenient Ruby iterator which executes a block for each entry
+ * in the /etc/passwd file.
+ *
+ * The code block is passed an Etc::Passwd struct; see getpwent above for
+ * details.
+ *
+ * Example:
+ *
+ * require 'etc'
+ *
+ * Etc.passwd {|u|
+ * puts u.name + " = " + u.gecos
+ * }
+ *
+ */
static VALUE
etc_passwd(obj)
VALUE obj;
@@ -191,6 +228,9 @@ etc_passwd(obj)
return Qnil;
}
+/* Resets the process of reading the /etc/passwd file, so that the next call
+ * to getpwent will return the first entry again.
+ */
static VALUE
etc_setpwent(obj)
VALUE obj;
@@ -201,6 +241,9 @@ etc_setpwent(obj)
return Qnil;
}
+/* Ends the process of scanning through the /etc/passwd file begun with
+ * getpwent, and closes the file.
+ */
static VALUE
etc_endpwent(obj)
VALUE obj;
@@ -211,6 +254,32 @@ etc_endpwent(obj)
return Qnil;
}
+/* Returns an entry from the /etc/passwd file. The first time it is called it
+ * opens the file and returns the first entry; each successive call returns
+ * the next entry, or nil if the end of the file has been reached.
+ *
+ * To close the file when processing is complete, call endpwent.
+ *
+ * Each entry is returned as a Struct::Passwd:
+ *
+ * - Passwd#name contains the short login name of the user as a String.
+ *
+ * - Passwd#passwd contains the encrypted password of the user as a String.
+ * an 'x' is returned if shadow passwords are in use. An '*' is returned
+ * if the user cannot log in using a password.
+ *
+ * - Passwd#uid contains the integer user ID (uid) of the user.
+ *
+ * - Passwd#gid contains the integer group ID (gid) of the user's primary group.
+ *
+ * - Passwd#gecos contains a longer String description of the user, such as
+ * a full name. Some Unix systems provide structured information in the
+ * gecos field, but this is system-dependent.
+ *
+ * - Passwd#dir contains the path to the home directory of the user as a String.
+ *
+ * - Passwd#shell contains the path to the login shell of the user as a String.
+ */
static VALUE
etc_getpwent(obj)
VALUE obj;
@@ -249,6 +318,16 @@ setup_group(grp)
}
#endif
+/* Returns information about the group with specified integer group id (gid),
+ * as found in /etc/group.
+ *
+ * The information is returned as a Struct::Group; see getgrent above for
+ * details.
+ *
+ * e.g. Etc.getgrgid(100) -> #<struct Struct::Group name="users", passwd="x",
+ * gid=100, mem=["meta", "root"]>
+ *
+ */
static VALUE
etc_getgrgid(obj, id)
VALUE obj, id;
@@ -267,6 +346,16 @@ etc_getgrgid(obj, id)
#endif
}
+/* Returns information about the group with specified String name, as found
+ * in /etc/group.
+ *
+ * The information is returned as a Struct::Group; see getgrent above for
+ * details.
+ *
+ * e.g. Etc.getgrnam('users') -> #<struct Struct::Group name="users",
+ * passwd="x", gid=100, mem=["meta", "root"]>
+ *
+ */
static VALUE
etc_getgrnam(obj, nam)
VALUE obj, nam;
@@ -307,6 +396,21 @@ group_iterate()
}
#endif
+/* Provides a convenient Ruby iterator which executes a block for each entry
+ * in the /etc/group file.
+ *
+ * The code block is passed an Etc::Group struct; see getgrent above for
+ * details.
+ *
+ * Example:
+ *
+ * require 'etc'
+ *
+ * Etc.group {|g|
+ * puts g.name + ": " + g.mem.join(', ')
+ * }
+ *
+ */
static VALUE
etc_group(obj)
VALUE obj;
@@ -329,6 +433,9 @@ etc_group(obj)
return Qnil;
}
+/* Resets the process of reading the /etc/group file, so that the next call
+ * to getgrent will return the first entry again.
+ */
static VALUE
etc_setgrent(obj)
VALUE obj;
@@ -339,6 +446,9 @@ etc_setgrent(obj)
return Qnil;
}
+/* Ends the process of scanning through the /etc/group file begun by
+ * getgrent, and closes the file.
+ */
static VALUE
etc_endgrent(obj)
VALUE obj;
@@ -349,6 +459,26 @@ etc_endgrent(obj)
return Qnil;
}
+/* Returns an entry from the /etc/group file. The first time it is called it
+ * opens the file and returns the first entry; each successive call returns
+ * the next entry, or nil if the end of the file has been reached.
+ *
+ * To close the file when processing is complete, call endgrent.
+ *
+ * Each entry is returned as a Struct::Group:
+ *
+ * - Group#name contains the name of the group as a String.
+ *
+ * - Group#passwd contains the encrypted password as a String. An 'x' is
+ * returned if password access to the group is not available; an empty
+ * string is returned if no password is needed to obtain membership of
+ * the group.
+ *
+ * - Group#gid contains the group's numeric ID as an integer.
+ *
+ * - Group#mem is an Array of Strings containing the short login names of the
+ * members of the group.
+ */
static VALUE
etc_getgrent(obj)
VALUE obj;
@@ -365,6 +495,11 @@ etc_getgrent(obj)
static VALUE mEtc;
+/* The etc module provides access to information from the /etc/passwd and
+ * /etc/group files on Linux and Unix systems.
+ *
+ * Documented by mathew <meta@pobox.com>.
+ */
void
Init_etc()
{
diff --git a/ext/fcntl/fcntl.c b/ext/fcntl/fcntl.c
index d48630fc66..57cca103f4 100644
--- a/ext/fcntl/fcntl.c
+++ b/ext/fcntl/fcntl.c
@@ -34,6 +34,81 @@ pack up your own arguments to pass as args for locking functions, etc.
#include "ruby.h"
#include <fcntl.h>
+/* Fcntl loads the constants defined in the system's <fcntl.h> C header
+ * file, and used with both the fcntl(2) and open(2) POSIX system calls.
+ *
+ * Copyright (C) 1997-2001 Yukihiro Matsumoto
+ *
+ * Documented by mathew <meta@pobox.com>
+ *
+ * = Usage
+ *
+ * To perform a fcntl(2) operation, use IO::fcntl in the core classes.
+ *
+ * To perform an open(2) operation, use IO::sysopen.
+ *
+ * The set of operations and constants available depends upon specific OS
+ * platform. Some values listed below may not be supported on your system.
+ *
+ * The constants supported by Ruby for use with IO::fcntl are:
+ *
+ * - F_DUPFD - duplicate a close-on-exec file handle to a non-close-on-exec
+ * file handle.
+ *
+ * - F_GETFD - read the close-on-exec flag of a file handle.
+ *
+ * - F_SETFD - set the close-on-exec flag of a file handle.
+ *
+ * - FD_CLOEXEC - the value of the close-on-exec flag.
+ *
+ * - F_GETFL - get file descriptor flags.
+ *
+ * - F_SETFL - set file descriptor flags.
+ *
+ * - O_APPEND, O_NONBLOCK, etc (see below) - file descriptor flag
+ * values for the above.
+ *
+ * - F_GETLK - determine whether a given region of a file is locked.
+ *
+ * - F_SETLK - acquire a lock on a region of a file.
+ *
+ * - F_SETLKW - acquire a lock on a region of a file, waiting if necessary.
+ *
+ * - F_RDLCK, F_WRLCK, F_UNLCK - types of lock for the above.
+ *
+ * The constants supported by Ruby for use with IO::sysopen are:
+ *
+ * - O_APPEND - open file in append mode.
+ *
+ * - O_NOCTTY - open tty without it becoming controlling tty.
+ *
+ * - O_CREAT - create file if it doesn't exist.
+ *
+ * - O_EXCL - used with O_CREAT, fail if file exists.
+ *
+ * - O_TRUNC - truncate file on open.
+ *
+ * - O_NONBLOCK / O_NDELAY - open in non-blocking mode.
+ *
+ * - O_RDONLY - open read-only.
+ *
+ * - O_WRONLY - open write-only.
+ *
+ * - O_RDWR - open read-write.
+ *
+ * - O_ACCMODE - mask to extract read/write flags.
+ *
+ * Example:
+ *
+ * require 'fcntl'
+ *
+ * fd = IO::sysopen('/tmp/tempfile',
+ * Fcntl::O_WRONLY | Fcntl::O_EXCL | Fcntl::O_CREAT)
+ * f = IO.open(fd)
+ * f.syswrite("TEMP DATA")
+ * f.close
+ *
+ */
void
Init_fcntl()
{
diff --git a/ext/syck/rubyext.c b/ext/syck/rubyext.c
index 6ae73a9714..ac0401ff9c 100644
--- a/ext/syck/rubyext.c
+++ b/ext/syck/rubyext.c
@@ -770,6 +770,7 @@ syck_parser_initialize(argc, argv, self)
Check_Type(options, T_HASH);
}
rb_ivar_set(self, s_options, options);
+ rb_ivar_set(self, s_input, Qnil);
return self;
}
diff --git a/lib/matrix.rb b/lib/matrix.rb
index 8058addb91..f22e09af09 100644
--- a/lib/matrix.rb
+++ b/lib/matrix.rb
@@ -602,7 +602,7 @@ class Matrix
for i in 0 .. size
next if i == k
- q = a[i][k] / akk
+ q = a[i][k].quo(akk)
a[i][k] = 0
(k + 1).upto(size) do
@@ -617,11 +617,11 @@ class Matrix
(k + 1).upto(size) do
|j|
- a[k][j] /= akk
+ a[k][j] = a[k][j].quo(akk)
end
0.upto(size) do
|j|
- @rows[k][j] /= akk
+ @rows[k][j] = @rows[k][j].quo(akk)
end
end
self
@@ -692,7 +692,7 @@ class Matrix
end
(k + 1).upto(size) do
|i|
- q = a[i][k] / akk
+ q = a[i][k].quo(akk)
(k + 1).upto(size) do
|j|
a[i][j] -= a[k][j] * q
@@ -758,7 +758,7 @@ class Matrix
end
(k + 1).upto(a_row_size - 1) do
|i|
- q = a[i][k] / akk
+ q = a[i][k].quo(akk)
(k + 1).upto(a_column_size - 1) do
|j|
a[i][j] -= a[k][j] * q
@@ -925,7 +925,7 @@ class Matrix
self * _M.inverse
else
x, y = other.coerce(self)
- x / y
+ x.quo(y)
end
end
diff --git a/lib/pstore.rb b/lib/pstore.rb
index 3f60b593f4..a691ce611e 100644
--- a/lib/pstore.rb
+++ b/lib/pstore.rb
@@ -1,7 +1,7 @@
# = PStore -- Transactional File Storage for Ruby Objects
#
# pstore.rb -
-# by unknown
+# originally by matz
# documentation by Kev Jackson and James Edward Gray II
#
# See PStore for documentation.
diff --git a/lib/rdoc/parsers/parse_rb.rb b/lib/rdoc/parsers/parse_rb.rb
index 41686aaaac..dfca7d807a 100644
--- a/lib/rdoc/parsers/parse_rb.rb
+++ b/lib/rdoc/parsers/parse_rb.rb
@@ -436,6 +436,7 @@ class RubyLex
def_exception(:SyntaxError, "%s")
include RubyToken
+ include IRB
attr_reader :continue
attr_reader :lex_state
diff --git a/numeric.c b/numeric.c
index 3c8adac113..634cde20b3 100644
--- a/numeric.c
+++ b/numeric.c
@@ -2467,7 +2467,7 @@ fix_lshift(VALUE x, VALUE y)
* call-seq:
* fix >> count => integer
*
- * Shifts _fix_ left _count_ positions (right if _count_ is negative).
+ * Shifts _fix_ right _count_ positions (left if _count_ is negative).
*/
static VALUE
diff --git a/util.h b/util.h
index 920549fbde..8780313629 100644
--- a/util.h
+++ b/util.h
@@ -60,6 +60,7 @@ char *ruby_getcwd(void);
#define my_getcwd() ruby_getcwd()
double ruby_strtod(const char*, char **);
+#undef strtod
#define strtod(s,e) ruby_strtod(s,e)
#endif /* UTIL_H */