From eeb804f153eff4bde9fc528414bfd9c8c8e343a1 Mon Sep 17 00:00:00 2001 From: matz Date: Thu, 26 Feb 1998 07:43:11 +0000 Subject: *** empty log message *** git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@92 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/thread.rb | 48 +++++++++++++++++++++++++++++++++++++++++------- parse.y | 28 ++++++++++++++++++++++++---- version.h | 2 +- 3 files changed, 66 insertions(+), 12 deletions(-) diff --git a/lib/thread.rb b/lib/thread.rb index 5262ec539d..c33333f5f3 100644 --- a/lib/thread.rb +++ b/lib/thread.rb @@ -69,9 +69,37 @@ class Mutex unlock end end +end - def num_waiting - @waiting.size +class ConditionVariable + def initialize + @waiters = [] + @waiters_mutex = Mutex.new + end + + def wait(mutex) + mutex.unlock + @waiters_mutex.synchronize { + @waiters.push(Thread.current) + } + Thread.stop + mutex.lock + end + + def signal + @waiters_mutex.synchronize { + t = @waiters.shift + t.run if t + } + end + + def broadcast + @waiters_mutex.synchronize { + for t in @waiters + t.run + end + @waiters.clear + } end end @@ -116,6 +144,11 @@ class Queue @que.length end alias size length + + + def num_waiting + @waiting.size + end end class SizedQueue= max @max = max + Thread.critical = FALSE else - Thread.critical = TRUE diff = max - @max @max = max + Thread.critical = FALSE diff.times do t = @queue_wait.shift t.run if t end - Thread.critical = FALSE - @max end + max end def push(obj) @@ -150,6 +184,7 @@ class SizedQueue= @max @queue_wait.push Thread.current Thread.stop + Thread.critical = true end super end @@ -160,8 +195,7 @@ class SizedQueue1; + } undef_list : fname { @@ -523,6 +528,14 @@ op : DOT2 { $$ = DOT2; } | ASET { $$ = ASET; } | '`' { $$ = '`'; } +reswords : k__LINE__ | k__FILE__ | klBEGIN | klEND + | kALIAS | kAND | kBEGIN | kBREAK | kCASE | kCLASS | kDEF + | 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 + arg : variable '=' arg { value_expr($3); @@ -2586,12 +2599,16 @@ retry: case ':': c = nextc(); if (c == ':') { - if (lex_state == EXPR_BEG || - (lex_state == EXPR_ARG && space_seen)) { + if (lex_state == EXPR_BEG) { lex_state = EXPR_BEG; return COLON3; } - lex_state = EXPR_BEG; + if (lex_state == EXPR_ARG && space_seen) { + arg_ambiguous(); + lex_state = EXPR_BEG; + return COLON3; + } + lex_state = EXPR_DOT; return COLON2; } pushback(c); @@ -2877,12 +2894,15 @@ retry: result = IVAR; break; default: - if (lex_state != EXPR_FNAME && lex_state != EXPR_DOT) { + if (lex_state != EXPR_DOT) { /* See if it is a reserved word. */ kw = rb_reserved_word(tok(), toklen()); if (kw) { enum lex_state state = lex_state; lex_state = kw->state; + if (lex_state == EXPR_FNAME) { + yylval.id = rb_intern(kw->name); + } return kw->id[state != EXPR_BEG]; } } diff --git a/version.h b/version.h index 35baa59bd0..37659375ac 100644 --- a/version.h +++ b/version.h @@ -1,2 +1,2 @@ -#define RUBY_VERSION "1.1b8" +#define RUBY_VERSION "1.1b8_00" #define VERSION_DATE "98/02/20" -- cgit v1.2.3