From b2b23fb1cdb54d5a9141867947b2ca77bf3730a3 Mon Sep 17 00:00:00 2001 From: matz Date: Wed, 14 Jul 2004 14:22:11 +0000 Subject: * gc.c, parse.y, lib/cgi.rb, lib/date.rb: last minute backports from HEAD. git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@6628 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- gc.c | 2 +- lib/cgi.rb | 15 ++++++++------- lib/cgi/session.rb | 6 +++--- lib/date.rb | 8 +++++++- parse.y | 9 ++++----- 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/gc.c b/gc.c index 68d58df47..7129a4c84 100644 --- a/gc.c +++ b/gc.c @@ -1434,7 +1434,7 @@ Init_stack(addr) STACK_LEVEL_MAX = (rlim.rlim_cur - space) / sizeof(VALUE); } } -#ifdef __ia64__ +#if defined(__ia64__) && (!defined(__GNUC__) || __GNUC__ < 2 || defined(__OPTIMIZE__)) /* ruby crashes on IA64 if compiled with optimizer on */ /* when if STACK_LEVEL_MAX is greater than this magic number */ /* I know this is a kludge. I suspect optimizer bug */ diff --git a/lib/cgi.rb b/lib/cgi.rb index 17bbdbeab..3141d3d69 100644 --- a/lib/cgi.rb +++ b/lib/cgi.rb @@ -1125,17 +1125,16 @@ class CGI @multipart end - class Value < DelegateClass(String) # :nodoc: - def initialize(str, params) + module Value # :nodoc: + def set_params(params) @params = params - super(str) end def [](idx, *args) if args.size == 0 warn "#{caller(1)[0]}:CAUTION! cgi['key'] == cgi.params['key'][0]; if want Array, use cgi.params['key']" - self + @params[idx] else - self.to_s[idx,*args] + super[idx,*args] end end def first @@ -1165,7 +1164,10 @@ class CGI Tempfile.new("CGI") end else - Value.new(value || "", params) + str = if value then value.dup else "" end + str.extend(Value) + str.set_params(params) + str end end @@ -2310,4 +2312,3 @@ class CGI end end # class CGI - diff --git a/lib/cgi/session.rb b/lib/cgi/session.rb index 845350139..a44de7cb8 100644 --- a/lib/cgi/session.rb +++ b/lib/cgi/session.rb @@ -210,7 +210,7 @@ class CGI # # session_expires:: the time the current session expires, as a # +Time+ object. If not set, the session will terminate - # when the user's browser is closed. + # when the user's browser is closed. # session_domain:: the hostname domain for which this session is valid. # If not set, defaults to the hostname of the server. # session_secure:: if +true+, this session will only work over HTTPS. @@ -365,7 +365,6 @@ class CGI raise ArgumentError, "session_id `%s' is invalid" % id end @path = dir+"/"+prefix+id - @path.untaint unless File::exist? @path @hash = {} end @@ -413,7 +412,8 @@ class CGI # Close and delete the session's FileStore file. def delete - File::unlink @path + File::unlink @path + rescue Errno::ENOENT end end diff --git a/lib/date.rb b/lib/date.rb index b50e98785..b8c15a420 100644 --- a/lib/date.rb +++ b/lib/date.rb @@ -711,7 +711,13 @@ class Date alias_method :__#{id.to_i}__, :#{id.to_s} private :__#{id.to_i}__ def #{id.to_s}(*args, &block) - (@__#{id.to_i}__ ||= [__#{id.to_i}__(*args, &block)])[0] + if @__#{id.to_i}__ + @__#{id.to_i}__ + elsif ! self.frozen? + @__#{id.to_i}__ ||= __#{id.to_i}__(*args, &block) + else + __#{id.to_i}__(*args, &block) + end end end; end diff --git a/parse.y b/parse.y index 9f01320a8..8fa177a62 100644 --- a/parse.y +++ b/parse.y @@ -5266,11 +5266,10 @@ static NODE* cond0(node) NODE *node; { - enum node_type type = nd_type(node); - + if (node == 0) return 0; assign_in_cond(node); - switch (type) { + switch (nd_type(node)) { case NODE_DSTR: case NODE_EVSTR: case NODE_STR: @@ -5294,8 +5293,8 @@ cond0(node) case NODE_DOT3: node->nd_beg = range_op(node->nd_beg); node->nd_end = range_op(node->nd_end); - if (type == NODE_DOT2) nd_set_type(node,NODE_FLIP2); - else if (type == NODE_DOT3) nd_set_type(node, NODE_FLIP3); + if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2); + else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3); node->nd_cnt = local_append(internal_id()); if (!e_option_supplied()) { int b = literal_node(node->nd_beg); -- cgit