diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-03-03 05:17:39 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-03-03 05:17:39 +0000 |
commit | 6a6d0ad22009c437217eb6aeb4c3750f7a3aaa6d (patch) | |
tree | 4ab0fd67ef12ea789ccb12df06654057f5ee6f87 | |
parent | 0cd0eab641a16d6e59f424ab3f5fad3550fa54b5 (diff) | |
download | ruby-6a6d0ad22009c437217eb6aeb4c3750f7a3aaa6d.tar.gz |
* parse.y (arg): parse 'lhs = a rescue b' as 'lhs=(a rescue b)'.
* io.c (rb_io_fread): should not clearerr() if there's no filled
buffer (i.e. rb_io_fread() returning zero).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3543 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | io.c | 6 | ||||
-rw-r--r-- | lib/date.rb | 4 | ||||
-rw-r--r-- | lib/debug.rb | 18 | ||||
-rw-r--r-- | parse.y | 62 | ||||
-rw-r--r-- | sample/test.rb | 1 | ||||
-rw-r--r-- | version.h | 8 |
7 files changed, 62 insertions, 46 deletions
@@ -1,3 +1,12 @@ +Mon Mar 3 11:29:04 2003 Yukihiro Matsumoto <matz@ruby-lang.org> + + * parse.y (arg): parse 'lhs = a rescue b' as 'lhs=(a rescue b)'. + +Mon Mar 3 02:53:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org> + + * io.c (rb_io_fread): should not clearerr() if there's no filled + buffer (i.e. rb_io_fread() returning zero). + Mon Mar 03 01:42:35 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net> * misc/ruby-mode.el (ruby-expr-beg): escaped char syntax. @@ -710,8 +710,10 @@ rb_io_fread(ptr, len, f) #if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN case EWOULDBLOCK: #endif - clearerr(f); - return len - n; + if (len - n > 0) { + clearerr(f); + return len - n; + } } return 0; } diff --git a/lib/date.rb b/lib/date.rb index 51cc95ee18..e04f0b01b0 100644 --- a/lib/date.rb +++ b/lib/date.rb @@ -365,7 +365,7 @@ class Date when Numeric; return @ajd <=> other when Date; return @ajd <=> other.ajd end - raise TypeError, 'expected numeric or date' + nil end def === (other) @@ -373,7 +373,7 @@ class Date when Numeric; return jd == other when Date; return jd == other.jd end - raise TypeError, 'expected numeric or date' + false end def >> (n) diff --git a/lib/debug.rb b/lib/debug.rb index 74e06e010c..8f2999a3ab 100644 --- a/lib/debug.rb +++ b/lib/debug.rb @@ -158,10 +158,9 @@ class Context def debug_eval(str, binding) begin val = eval(str, binding) - val - rescue StandardError, ScriptError - at = eval("caller(0)", binding) - stdout.printf "%s:%s\n", at.shift, $!.to_s.sub(/\(eval\):1:(in `.*?':)?/, '') #` + rescue StandardError, ScriptError => e + at = eval("caller(1)", binding) + stdout.printf "%s:%s\n", at.shift, e.to_s.sub(/\(eval\):1:(in `.*?':)?/, '') for i in at stdout.printf "\tfrom %s\n", i end @@ -297,6 +296,12 @@ class Context stdout.print "Trace off.\n" end + when /^\s*b(?:reak)?\s+(.+)[#.](.+)$/ + pos = $2.intern.id2name + file = debug_eval($1, binding) + break_points.push [true, 0, file, pos] + stdout.printf "Set breakpoint %d at %s.%s\n", break_points.size, file, pos + when /^\s*b(?:reak)?\s+(?:(.+):)?(.+)$/ pos = $2 file = File.basename($1 || file) @@ -646,7 +651,7 @@ EOHELP def check_break_points(file, pos, binding, id) return false if break_points.empty? - file = File.basename(file) +# file = File.basename(file) n = 1 for b in break_points if b[0] @@ -709,7 +714,8 @@ EOHELP when 'call' @frames.unshift [binding, file, line, id] if check_break_points(file, id.id2name, binding, id) or - check_break_points(klass.to_s, id.id2name, binding, id) + check_break_points(klass.to_s, id.id2name, binding, id) or + check_break_points(klass, id.id2name, binding, id) suspend_all debug_command(file, line, id, binding) end @@ -240,7 +240,7 @@ static void top_local_setup(); %type <node> singleton strings string string1 xstring regexp %type <node> string_contents xstring_contents string_content %type <node> words qwords word_list qword_list word -%type <node> literal numeric dsym cpath clhs +%type <node> literal numeric dsym cpath %type <node> bodystmt compstmt stmts stmt expr arg primary command command_call method_call %type <node> expr_value arg_value primary_value %type <node> if_tail opt_else case_body cases opt_rescue exc_list exc_var opt_ensure @@ -290,7 +290,7 @@ static void top_local_setup(); %nonassoc tLOWEST %nonassoc tLBRACE_ARG -%left kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD +%nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD %left kOR kAND %right kNOT %nonassoc kDEFINED @@ -451,6 +451,10 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem nd_set_type($$, NODE_WHILE); } } + | stmt kRESCUE_MOD stmt + { + $$ = NEW_RESCUE($1, NEW_RESBODY(0,$3,0), 0); + } | klBEGIN { if (in_def || in_single) { @@ -475,6 +479,7 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem } | lhs '=' command_call { + value_expr($3); $$ = node_assign($1, $3); } | mlhs '=' command_call @@ -483,10 +488,6 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem $1->nd_value = NEW_RESTARY($3); $$ = $1; } - | clhs '=' command_call - { - $$ = node_assign($1, $3); - } | var_lhs tOP_ASGN command_call { value_expr($3); @@ -574,10 +575,6 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem { $$ = node_assign($1, NEW_SVALUE($3)); } - | clhs '=' mrhs - { - $$ = node_assign($1, NEW_SVALUE($3)); - } | mlhs '=' arg_value { $1->nd_value = $3; @@ -588,10 +585,6 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem $1->nd_value = $3; $$ = $1; } - | clhs '=' arg - { - $$ = node_assign($1, $3); - } | expr ; @@ -612,10 +605,6 @@ expr : command_call { $$ = NEW_NOT(cond($2)); } - | arg kRESCUE_MOD command_call - { - $$ = NEW_RESCUE($1, NEW_RESBODY(0,$3,0), 0); - } | arg ; @@ -808,6 +797,12 @@ mlhs_node : variable { $$ = attrset($1, $3); } + | primary_value tCOLON2 tCONSTANT + { + if (in_def || in_single) + yyerror("dynamic constant assignment"); + $$ = NEW_CDECL(0, 0, NEW_COLON2($1, $3)); + } | backref { rb_backref_error($1); @@ -835,19 +830,17 @@ lhs : variable { $$ = attrset($1, $3); } - | backref - { - rb_backref_error($1); - $$ = 0; - } - ; - -clhs : primary_value tCOLON2 tCONSTANT + | primary_value tCOLON2 tCONSTANT { if (in_def || in_single) yyerror("dynamic constant assignment"); $$ = NEW_CDECL(0, 0, NEW_COLON2($1, $3)); } + | backref + { + rb_backref_error($1); + $$ = 0; + } ; cname : tIDENTIFIER @@ -933,14 +926,17 @@ reswords : k__LINE__ | k__FILE__ | klBEGIN | klEND | kDEFINED | kDO | kELSE | kELSIF | kEND | kENSURE | kFALSE | kFOR | kIF_MOD | kIN | kMODULE | kNEXT | kNIL | kNOT | kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF | kSUPER - | kTHEN | kTRUE | kUNDEF | kUNLESS_MOD | kUNTIL_MOD | kWHEN - | kWHILE_MOD | kYIELD | kRESCUE_MOD + | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD ; arg : lhs '=' arg { $$ = node_assign($1, $3); } + | lhs '=' arg kRESCUE_MOD arg + { + $$ = node_assign($1, NEW_RESCUE($3, NEW_RESBODY(0,$5,0), 0)); + } | var_lhs tOP_ASGN arg { value_expr($3); @@ -1019,6 +1015,10 @@ arg : lhs '=' arg $$ = NEW_OP_ASGN2($1, $3, $4, $5); fixpos($$, $1); } + | primary_value tCOLON2 tCONSTANT tOP_ASGN arg + { + yyerror("constant re-assignment"); + } | backref tOP_ASGN arg { rb_backref_error($1); @@ -1157,10 +1157,6 @@ arg : lhs '=' arg { $$ = logop(NODE_OR, $1, $3); } - | arg kRESCUE_MOD arg - { - $$ = NEW_RESCUE($1, NEW_RESBODY(0,$3,0), 0); - } | kDEFINED opt_nl {in_defined = 1;} arg { in_defined = 0; @@ -1674,11 +1670,13 @@ primary_value : primary ; then : term + | ':' | kTHEN | term kTHEN ; do : term + | ':' | kDO_COND ; diff --git a/sample/test.rb b/sample/test.rb index d0a364f17c..141575bc90 100644 --- a/sample/test.rb +++ b/sample/test.rb @@ -1,5 +1,6 @@ #! /usr/bin/env ruby +$KCODE = "none" $testnum=0 $ntest=0 $failed = 0 @@ -1,11 +1,11 @@ #define RUBY_VERSION "1.8.0" -#define RUBY_RELEASE_DATE "2003-02-28" +#define RUBY_RELEASE_DATE "2003-03-03" #define RUBY_VERSION_CODE 180 -#define RUBY_RELEASE_CODE 20030228 +#define RUBY_RELEASE_CODE 20030303 #define RUBY_VERSION_MAJOR 1 #define RUBY_VERSION_MINOR 8 #define RUBY_VERSION_TEENY 0 #define RUBY_RELEASE_YEAR 2003 -#define RUBY_RELEASE_MONTH 02 -#define RUBY_RELEASE_DAY 28 +#define RUBY_RELEASE_MONTH 03 +#define RUBY_RELEASE_DAY 03 |