[#37708] [Ruby 1.9 - Bug #4956][Open] [PATCH] string.c (tr_s_bang): fix leak with heap strings — Eric Wong <normalperson@...>
Eric Wong <normalperson@yhbt.net> wrote:
On Wed, Jul 06, 2011 at 04:46:44AM +0900, Eric Wong wrote:
[#37714] test fail test/matrix/test_matrix.rb:321 — KOSAKI Motohiro <kosaki.motohiro@...>
http://59.106.172.211/~chkbuild/ruby-trunk/log/20110701T110101Z.log.html.gz
2011/7/1 KOSAKI Motohiro <kosaki.motohiro@gmail.com>:
Test fixed, thanks (indeed, Matrix#** now implements non integer exponents).
2011/7/2 Marc-Andre Lafortune <ruby-core-mailing-list@marc-andre.ca>:
[#37724] open-ssl related errors on MacOSX — SASADA Koichi <ko1@...>
Hi,
2011/7/2 SASADA Koichi <ko1@atdot.net>:
2011/7/2 Martin Bo煬et <martin.bosslet@googlemail.com>:
[#37730] [Ruby 1.9 - Bug #4962][Open] come back gem_prelude! — Yusuke Endoh <mame@...>
On Sat, Jul 02, 2011 at 02:18:35PM +0900, Yusuke Endoh wrote:
[#37757] [Ruby 1.9 - Bug #4969][Open] Subtle issue with require — Thomas Sawyer <transfire@...>
[#37761] [Ruby 1.9 - Feature #4970][Open] FileUtils refactored — Thomas Sawyer <transfire@...>
[#37805] [Ruby 1.8 - Bug #4979][Open] `require 'foo'` is ambiguous when there is both foo.rb and foo.so — Antonio Terceiro <terceiro@...>
[#37840] [Ruby 1.9 - Feature #4985][Open] Add %S[] support for making a list of symbols — Aaron Patterson <aaron@...>
I guessed that %S(...) is S-expr syntax.
[#37853] [Ruby 1.9 - Bug #4989][Open] Document Socket constants — Eric Hodel <drbrain@...7.net>
Why change all the statuses to low here? I don't see the validity of
Hi
On Fri, Jul 8, 2011 at 08:25, KOSAKI Motohiro <kosaki.motohiro@gmail.com> wrote:
[#37858] [Ruby 1.9 - Bug #4992][Open] finalizer中のThread.newでSEGV — Shota Fukumori <sorah@...>
> -- Thread.new in finalizer raises SEGV
[#37866] [Backport87 - Feature #4996][Open] About 1.8.7 EOL — Shyouhei Urabe <shyouhei@...>
[#37913] [Ruby 1.9 - Bug #5003][Open] Enumerator#next segfaults in OS X Lion (10.7) — Ganesh Gunasegaran <ganesh.gunas@...>
[#37917] [Ruby 1.9 - Feature #5005][Open] Provide convenient access to original methods — Lazaridis Ilias <ilias@...>
[#37932] [Ruby 1.9 - Feature #5008][Open] Equal rights for Hash (like Array, String, Integer, Float) — Suraj Kurapati <sunaku@...>
On Thu, Mar 29, 2012 at 13:25, rosenfeld (Rodrigo Rosenfeld Rosas) <
[#37936] [Ruby 1.9 - Feature #5010][Open] Add Slop(-like) in stdlib and deprecate current OptionParser API — Rodrigo Rosenfeld Rosas <rr.rosas@...>
Hi,
Em 09-07-2011 20:13, Nobuyoshi Nakada escreveu:
[#37985] [Ruby 1.9 - Bug #2616] unable to trap in doze — Motohiro KOSAKI <kosaki.motohiro@...>
[#37988] [Ruby 1.9 - Feature #5016][Open] Kernel#caller with negative limit should limit result to N initial frames — Nikolai Weibull <now@...>
[#38011] [Ruby 1.9 - Bug #5018][Open] ruby_1_9_3 branch is missing from official GitHub mirror — Luis Lavena <luislavena@...>
[#38096] [Ruby 1.9 - Feature #5033][Open] PATCH: 1.9: gc_mark_children: Avoid gc_mark() tail recursion, use goto again. — Kurt Stephens <ks.ruby@...>
[#38109] [Ruby 1.9 - Bug #5034][Open] C Source Code formatting — Lazaridis Ilias <ilias@...>
[#38137] [Ruby 1.9 - Bug #5038][Open] Ruby 1.9.2 stops on some Regular Expressions — Bob Ambartsumov <bob@...>
[#38140] [Ruby 1.9 - Feature #5041][Open] Set FD_CLOEXEC for all fds (except 0, 1, 2) — Akira Tanaka <akr@...>
[#38158] Proposal to merge net2-http for Ruby 1.9.4 — Yehuda Katz <wycats@...>
I gave a talk at Ruby Kaigi about my work on Net::HTTP (
2011/7/18 Yehuda Katz <wycats@gmail.com>:
Yehuda Katz
[#38164] [Ruby 1.9 - Bug #5046][Open] Bug with xmlrpc::client, basic auth and long authentication strings — Herwin Weststrate <herwin@...>
[#38171] [Ruby 1.9 - Bug #5047][Open] Segfault (most likely involving require) — Jack Christensen <jack@...>
Hiroshi Nakamura <nakahiro@gmail.com> wrote:
On Jul 22, 2011, at 2:41 PM, Eric Wong wrote:
Thank you for the trying the patch.
[#38172] [Backport87 - Backport #5048][Open] Make failed on tk bindings under OSX Lion fresh install — "Wayne E. Seguin" <wayneeseguin@...>
[#38182] [Ruby 1.9 - Feature #5054][Open] Compress a sequence of ends — ANDO Yasushi ANDO <andyjpn@...>
[#38197] [Ruby 1.9 - Feature #5056][Open] About 1.9 EOL — Shyouhei Urabe <shyouhei@...>
Hi,
Hi,
On 23/08/11 at 06:50 +0900, SASADA Koichi wrote:
(2011/08/23 20:09), Lucas Nussbaum wrote:
On 23/08/11 at 20:20 +0900, NARUSE, Yui wrote:
Hello,
[#38295] [Ruby 1.9 - Feature #5064][Open] HTTP user-agent class — Eric Hodel <drbrain@...7.net>
[#38343] [Ruby 1.9 - Bug #5068][Open] Issue with "duplicated when clause is ignored" — Stefano Mioli <stefano.mioli@...>
[#38367] [Ruby 1.9 - Feature #5072][Open] Avoid inadvertent symbol creation in reflection methods — Jeremy Evans <merch-redmine@...>
[#38391] [Ruby 1.9 - Bug #5076][Open] Mac OS X Lion Support — Yui NARUSE <naruse@...>
[#38451] [Ruby 1.9 - Bug #5090][Open] Segfault using Enumerator — Robert Syme <rob.syme@...>
[#38464] [Ruby 1.9 - Bug #5091][Open] Can't require './.testrb' — Thomas Sawyer <transfire@...>
[#38491] 1.9.3 Status Update? — Joshua Ballanco <jballanc@...>
Hello ruby-core,
[#38510] [Ruby 1.9 - Feature #5097][Assigned] Supported platforms of Ruby 1.9.3 — Yui NARUSE <naruse@...>
On Mon, Jul 25, 2011 at 11:52 PM, Yui NARUSE <naruse@airemix.jp> wrote:
Yui NARUSE <naruse@airemix.jp> wrote:
[#38538] [Ruby 1.9 - Feature #5101][Open] allow optional timeout for TCPSocket.new — Eric Wong <normalperson@...>
2011/7/27 Eric Wong <normalperson@yhbt.net>:
Tanaka Akira <akr@fsij.org> wrote:
2011/7/29 Eric Wong <normalperson@yhbt.net>:
2011/7/30 Tanaka Akira <akr@fsij.org>:
[#38610] [Ruby 1.9 - Feature #5120][Open] String#split needs to be logical — Alexey Muranov <muranov@...>
[ruby-core:37938] Re: [Ruby 1.9 - Bug #5002] Ripper fails to distinguish local vars from vcalls [PATCH]
Hi,
At Sun, 10 Jul 2011 04:55:07 +0900,
Michael Edgar wrote in [ruby-core:37931]:
> As you note, splitting the variable node is necessary. I
> split 'variable' into 'user_variable' and 'keyword_variable',
> removing 'variable' entirely (since it would give r/r
> conflicts). However, this turns out to be a good thing
> overall: every other use of the `variable` production is on
> the LHS (or LHS-like constructs, like rescue Foo => exc),
> which bar the use of keywords anyway through manual checking.
It seems better but might error messages less user-readable.
Reduced patch based on the second patch with tests.
diff --git i/parse.y w/parse.y
index 9769bb9..af7ff27 100644
--- i/parse.y
+++ w/parse.y
@@ -426,6 +426,8 @@ static VALUE ripper_get_value(VALUE);
#define get_value(val) ripper_get_value(val)
static VALUE assignable_gen(struct parser_params*,VALUE);
#define assignable(lhs,node) assignable_gen(parser, (lhs))
+static int id_is_var_gen(struct parser_params *parser, ID id);
+#define id_is_var(id) id_is_var_gen(parser, (id))
#endif /* !RIPPER */
static ID formal_argument_gen(struct parser_params*, ID);
@@ -699,7 +701,7 @@ static void token_info_pop(struct parser_params*,
const char *token);
%type <node> lambda f_larglist lambda_body
%type <node> brace_block cmd_brace_block do_block lhs none fitem
%type <node> mlhs mlhs_head mlhs_basic mlhs_item mlhs_node mlhs_post mlhs_inner
-%type <id> fsym variable sym symbol operation operation2 operation3
+%type <id> fsym keyword_variable user_variable sym symbol operation
operation2 operation3
%type <id> cname fname op f_rest_arg f_block_arg opt_f_block_arg
f_norm_arg f_bad_arg
/*%%%*/
/*%
@@ -1601,10 +1603,14 @@ mlhs_post : mlhs_item
}
;
-mlhs_node : variable
+mlhs_node : user_variable
{
$$ = assignable($1, 0);
}
+ | keyword_variable
+ {
+ $$ = assignable($1, 0);
+ }
| primary_value '[' opt_call_args rbracket
{
/*%%%*/
@@ -1671,7 +1677,7 @@ mlhs_node : variable
}
;
-lhs : variable
+lhs : user_variable
{
$$ = assignable($1, 0);
/*%%%*/
@@ -1680,6 +1686,15 @@ lhs : variable
$$ = dispatch1(var_field, $$);
%*/
}
+ | keyword_variable
+ {
+ $$ = assignable($1, 0);
+ /*%%%*/
+ if (!$$) $$ = NEW_BEGIN(0);
+ /*%
+ $$ = dispatch1(var_field, $$);
+ %*/
+ }
| primary_value '[' opt_call_args rbracket
{
/*%%%*/
@@ -4257,12 +4272,14 @@ numeric : tINTEGER
}
;
-variable : tIDENTIFIER
+user_variable : tIDENTIFIER
| tIVAR
| tGVAR
| tCONSTANT
| tCVAR
- | keyword_nil {ifndef_ripper($$ = keyword_nil);}
+ ;
+
+keyword_variable: keyword_nil {ifndef_ripper($$ = keyword_nil);}
| keyword_self {ifndef_ripper($$ = keyword_self);}
| keyword_true {ifndef_ripper($$ = keyword_true);}
| keyword_false {ifndef_ripper($$ = keyword_false);}
@@ -4271,7 +4288,20 @@ variable : tIDENTIFIER
| keyword__ENCODING__ {ifndef_ripper($$ = keyword__ENCODING__);}
;
-var_ref : variable
+var_ref : user_variable
+ {
+ /*%%%*/
+ if (!($$ = gettable($1))) $$ = NEW_BEGIN(0);
+ /*%
+ if (id_is_var(get_id($1))) {
+ $$ = dispatch1(var_ref, $1);
+ }
+ else {
+ $$ = dispatch1(vcall, $1);
+ }
+ %*/
+ }
+ | keyword_variable
{
/*%%%*/
if (!($$ = gettable($1))) $$ = NEW_BEGIN(0);
@@ -4281,7 +4311,7 @@ var_ref : variable
}
;
-var_lhs : variable
+var_lhs : user_variable
{
$$ = assignable($1, 0);
/*%%%*/
@@ -4289,6 +4319,14 @@ var_lhs : variable
$$ = dispatch1(var_field, $$);
%*/
}
+ | keyword_variable
+ {
+ $$ = assignable($1, 0);
+ /*%%%*/
+ /*%
+ $$ = dispatch1(var_field, $$);
+ %*/
+ }
;
backref : tNTH_REF
@@ -8242,6 +8280,24 @@ gettable_gen(struct parser_params *parser, ID id)
compile_error(PARSER_ARG "identifier %s is not valid to get",
rb_id2name(id));
return 0;
}
+#else /* !RIPPER */
+static int
+id_is_var_gen(struct parser_params *parser, ID id)
+{
+ if (is_notop_id(id)) {
+ switch (id & ID_SCOPE_MASK) {
+ case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
+ return 1;
+ case ID_LOCAL:
+ if (dyna_in_block() && dvar_defined(id)) return 1;
+ if (local_id(id)) return 1;
+ /* method call without arguments */
+ return 0;
+ }
+ }
+ compile_error(PARSER_ARG "identifier %s is not valid to get",
rb_id2name(id));
+ return 0;
+}
#endif /* !RIPPER */
#ifdef RIPPER
diff --git i/test/ripper/test_parser_events.rb
w/test/ripper/test_parser_events.rb
index 14799d3..e6968e1 100644
--- i/test/ripper/test_parser_events.rb
+++ w/test/ripper/test_parser_events.rb
@@ -46,11 +46,15 @@ class TestRipper::ParserEvents < Test::Unit::TestCase
end
def test_var_ref
- assert_equal '[ref(a)]', parse('a')
+ assert_equal '[assign(var_field(a),ref(a))]', parse('a=a')
assert_equal '[ref(nil)]', parse('nil')
assert_equal '[ref(true)]', parse('true')
end
+ def test_vcall
+ assert_equal '[vcall(a)]', parse('a')
+ end
+
def test_BEGIN
assert_equal '[BEGIN([void()])]', parse('BEGIN{}')
assert_equal '[BEGIN([ref(nil)])]', parse('BEGIN{nil}')
@@ -77,15 +81,15 @@ class TestRipper::ParserEvents < Test::Unit::TestCase
assert_equal '[fcall(m,[])]', parse('m()')
assert_equal '[fcall(m,[1])]', parse('m(1)')
assert_equal '[fcall(m,[1,2])]', parse('m(1,2)')
- assert_equal '[fcall(m,[*ref(r)])]', parse('m(*r)')
- assert_equal '[fcall(m,[1,*ref(r)])]', parse('m(1,*r)')
- assert_equal '[fcall(m,[1,2,*ref(r)])]', parse('m(1,2,*r)')
- assert_equal '[fcall(m,[&ref(r)])]', parse('m(&r)')
- assert_equal '[fcall(m,[1,&ref(r)])]', parse('m(1,&r)')
- assert_equal '[fcall(m,[1,2,&ref(r)])]', parse('m(1,2,&r)')
- assert_equal '[fcall(m,[*ref(a),&ref(b)])]', parse('m(*a,&b)')
- assert_equal '[fcall(m,[1,*ref(a),&ref(b)])]', parse('m(1,*a,&b)')
- assert_equal '[fcall(m,[1,2,*ref(a),&ref(b)])]', parse('m(1,2,*a,&b)')
+ assert_equal '[fcall(m,[*vcall(r)])]', parse('m(*r)')
+ assert_equal '[fcall(m,[1,*vcall(r)])]', parse('m(1,*r)')
+ assert_equal '[fcall(m,[1,2,*vcall(r)])]', parse('m(1,2,*r)')
+ assert_equal '[fcall(m,[&vcall(r)])]', parse('m(&r)')
+ assert_equal '[fcall(m,[1,&vcall(r)])]', parse('m(1,&r)')
+ assert_equal '[fcall(m,[1,2,&vcall(r)])]', parse('m(1,2,&r)')
+ assert_equal '[fcall(m,[*vcall(a),&vcall(b)])]', parse('m(*a,&b)')
+ assert_equal '[fcall(m,[1,*vcall(a),&vcall(b)])]', parse('m(1,*a,&b)')
+ assert_equal '[fcall(m,[1,2,*vcall(a),&vcall(b)])]', parse('m(1,2,*a,&b)')
end
def test_args_add
@@ -120,8 +124,8 @@ class TestRipper::ParserEvents < Test::Unit::TestCase
end
def test_aref
- assert_equal '[aref(ref(v),[1])]', parse('v[1]')
- assert_equal '[aref(ref(v),[1,2])]', parse('v[1,2]')
+ assert_equal '[aref(vcall(v),[1])]', parse('v[1]')
+ assert_equal '[aref(vcall(v),[1,2])]', parse('v[1,2]')
end
def test_assoclist_from_args
@@ -143,7 +147,7 @@ class TestRipper::ParserEvents < Test::Unit::TestCase
end
def test_aref_field
- assert_equal '[assign(aref_field(ref(a),[1]),2)]', parse('a[1]=2')
+ assert_equal '[assign(aref_field(vcall(a),[1]),2)]', parse('a[1]=2')
end
def test_arg_ambiguous
@@ -323,7 +327,7 @@ class TestRipper::ParserEvents < Test::Unit::TestCase
tree = parse("foo.()", :on_call) {thru_call = true}
}
assert_equal true, thru_call
- assert_equal "[call(ref(foo),.,call,[])]", tree
+ assert_equal "[call(vcall(foo),.,call,[])]", tree
end
def test_excessed_comma
--
Nobu Nakada