diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-11-01 13:04:35 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-11-01 13:04:35 +0000 |
commit | 9974cb96d3c2ca18ab27aa37081fa4a8b37cb074 (patch) | |
tree | 8e3ffba4898afc1d4b9f82162d46157d0cf0a93f | |
parent | cc1b72bc22453ac85b9308eb1c0e985b6e53cb7a (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 <[email protected]>. [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 <[email protected]>.
[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-- | ChangeLog | 27 | ||||
-rw-r--r-- | configure.in | 6 | ||||
-rw-r--r-- | eval.c | 14 | ||||
-rw-r--r-- | ext/etc/etc.c | 135 | ||||
-rw-r--r-- | ext/fcntl/fcntl.c | 75 | ||||
-rw-r--r-- | ext/syck/rubyext.c | 1 | ||||
-rw-r--r-- | lib/matrix.rb | 12 | ||||
-rw-r--r-- | lib/pstore.rb | 2 | ||||
-rw-r--r-- | lib/rdoc/parsers/parse_rb.rb | 1 | ||||
-rw-r--r-- | numeric.c | 2 | ||||
-rw-r--r-- | util.h | 1 |
11 files changed, 262 insertions, 14 deletions
@@ -1,3 +1,11 @@ +Tue Nov 1 14:20:11 2005 Yukihiro Matsumoto <[email protected]> + + * 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 <[email protected]> * ext/openssl/extconf.rb: should check ERR_peek_last_error(). @@ -5,6 +13,11 @@ Tue Nov 01 10:48:49 2005 GOTOU Yuuzou <[email protected]> * ext/openssl/ossl.c (ossl_raise): ditto. +Mon Oct 31 17:34:46 2005 Yukihiro Matsumoto <[email protected]> + + * configure.in: use proper option for Sun linker. A patch from + Shinya Kuwamura <[email protected]>. [ruby-dev:27603] + Mon Oct 31 05:46:08 2005 GOTOU Yuuzou <[email protected]> * ext/openssl/ossl_cipher.c (ossl_cipher_update): input data must @@ -24,11 +37,25 @@ Mon Oct 31 05:38:26 2005 GOTOU Yuuzou <[email protected]> * 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 <[email protected]> + + * 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 <[email protected]> * test/ruby/test_float.rb (test_precision): test by assert_in_delta. [ruby-dev:27575] +Sat Oct 29 01:58:25 2005 Yukihiro Matsumoto <[email protected]> + + * ext/etc/etc.c: document update from mathew <[email protected]>. + [ruby-core:06473] + + * ext/fcntl/fcntl.c: ditto. + Sat Oct 29 16:56:03 2005 Tadayoshi Funaba <[email protected]> * 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 @@ -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 <[email protected]>. + */ 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 <[email protected]> + * + * = 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 @@ -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 @@ -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 */ |