[前][次][番号順一覧][スレッド一覧]

ruby-changes:40381

From: nobu <ko1@a...>
Date: Fri, 6 Nov 2015 12:39:35 +0900 (JST)
Subject: [ruby-changes:40381] nobu:r52462 (trunk): change DOTQ

nobu	2015-11-06 12:39:23 +0900 (Fri, 06 Nov 2015)

  New Revision: 52462

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=52462

  Log:
    change DOTQ
    
    * defs/id.def (token_ops), parse.y (parser_yylex): change DOTQ
      from ".?" to "&.".  [ruby-core:71363] [Feature #11537]

  Modified files:
    trunk/ChangeLog
    trunk/NEWS
    trunk/defs/id.def
    trunk/lib/net/ftp.rb
    trunk/parse.y
    trunk/test/ripper/test_parser_events.rb
    trunk/test/ripper/test_scanner_events.rb
    trunk/test/ruby/test_call.rb
    trunk/test/ruby/test_iseq.rb
Index: defs/id.def
===================================================================
--- defs/id.def	(revision 52461)
+++ defs/id.def	(revision 52462)
@@ -98,7 +98,7 @@ token_ops = %[\ https://github.com/ruby/ruby/blob/trunk/defs/id.def#L98
   COLON3        ::
   ANDOP         &&
   OROP          ||
-  DOTQ          .?
+  DOTQ          &.
 ]
 
 class KeywordError < RuntimeError
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 52461)
+++ ChangeLog	(revision 52462)
@@ -1,3 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Fri Nov  6 12:39:21 2015  Nobuyoshi Nakada  <nobu@r...>
+
+	* defs/id.def (token_ops), parse.y (parser_yylex): change DOTQ
+	  from ".?" to "&.".  [ruby-core:71363] [Feature #11537]
+
 Fri Nov  6 09:01:26 2015  Nobuyoshi Nakada  <nobu@r...>
 
 	* parse.y (kwd_append): fix segv after invalid keyword argument,
Index: lib/net/ftp.rb
===================================================================
--- lib/net/ftp.rb	(revision 52461)
+++ lib/net/ftp.rb	(revision 52462)
@@ -615,15 +615,15 @@ module Net https://github.com/ruby/ruby/blob/trunk/lib/net/ftp.rb#L615
         result = String.new
       end
       begin
-        f.?binmode
+        f&.binmode
         retrbinary("RETR #{remotefile}", blocksize, rest_offset) do |data|
-          f.?write(data)
-          block.?(data)
-          result.?concat(data)
+          f&.write(data)
+          block&.(data)
+          result&.concat(data)
         end
         return result
       ensure
-        f.?close
+        f&.close
       end
     end
 
@@ -646,13 +646,13 @@ module Net https://github.com/ruby/ruby/blob/trunk/lib/net/ftp.rb#L646
       begin
         retrlines("RETR #{remotefile}") do |line, newline|
           l = newline ? line + "\n" : line
-          f.?print(l)
-          block.?(line, newline)
-          result.?concat(l)
+          f&.print(l)
+          block&.(line, newline)
+          result&.concat(l)
         end
         return result
       ensure
-        f.?close
+        f&.close
       end
     end
 
Index: parse.y
===================================================================
--- parse.y	(revision 52461)
+++ parse.y	(revision 52462)
@@ -875,7 +875,7 @@ static void token_info_pop(struct parser https://github.com/ruby/ruby/blob/trunk/parse.y#L875
 %token tASET		RUBY_TOKEN(ASET)   "[]="
 %token tLSHFT		RUBY_TOKEN(LSHFT)  "<<"
 %token tRSHFT		RUBY_TOKEN(RSHFT)  ">>"
-%token tDOTQ		RUBY_TOKEN(DOTQ)   ".?"
+%token tDOTQ		RUBY_TOKEN(DOTQ)   "&."
 %token tCOLON2		"::"
 %token tCOLON3		":: at EXPR_BEG"
 %token <id> tOP_ASGN	/* +=, -=  etc. */
@@ -8276,6 +8276,10 @@ parser_yylex(struct parser_params *parse https://github.com/ruby/ruby/blob/trunk/parse.y#L8276
 	    lex_state = EXPR_BEG;
 	    return tOP_ASGN;
 	}
+	else if (c == '.') {
+	    lex_state = EXPR_DOT;
+	    return tDOTQ;
+	}
 	pushback(c);
 	if (IS_SPCARG(c)) {
 	    rb_warning0("`&' interpreted as argument prefix");
@@ -8380,10 +8384,6 @@ parser_yylex(struct parser_params *parse https://github.com/ruby/ruby/blob/trunk/parse.y#L8384
 	    pushback(c);
 	    return tDOT2;
 	}
-	if (c == '?') {
-	    lex_state = EXPR_DOT;
-	    return tDOTQ;
-	}
 	pushback(c);
 	if (c != -1 && ISDIGIT(c)) {
 	    yyerror("no .<digit> floating literal anymore; put 0 before dot");
Index: NEWS
===================================================================
--- NEWS	(revision 52461)
+++ NEWS	(revision 52462)
@@ -20,17 +20,17 @@ with all sufficient information, see the https://github.com/ruby/ruby/blob/trunk/NEWS#L20
 
 * safe navigation operator:
 
-  * new method call syntax, `object.?foo', method #foo is called on
+  * new method call syntax, `object&.foo', method #foo is called on
     `object' if it is not nil.
     this is similar to `try!' in Active Support, except:
     * method name is syntactically required
           obj.try! {} # valid
-          obj.? {}    # syntax error
+          obj&. {}    # syntax error
     * arguments are evaluated only if a call is made:
           obj.try!(:foo, bar())  # bar() is always evaluated
-          obj.?foo(bar())        # bar() is conditionally evaluated
+          obj&.foo(bar())        # bar() is conditionally evaluated
     * attribute assignment is valid
-          obj.?attr += 1
+          obj&.attr += 1
 
 === Core classes updates (outstanding ones only)
 
Index: test/ruby/test_call.rb
===================================================================
--- test/ruby/test_call.rb	(revision 52461)
+++ test/ruby/test_call.rb	(revision 52462)
@@ -35,22 +35,22 @@ class TestCall < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_call.rb#L35
   def test_safe_call
     s = Struct.new(:x, :y, :z)
     o = s.new("x")
-    assert_equal("X", o.x.?upcase)
-    assert_nil(o.y.?upcase)
+    assert_equal("X", o.x&.upcase)
+    assert_nil(o.y&.upcase)
     assert_equal("x", o.x)
-    o.?x = 6
+    o&.x = 6
     assert_equal(6, o.x)
-    o.?x *= 7
+    o&.x *= 7
     assert_equal(42, o.x)
-    o.?y = 5
+    o&.y = 5
     assert_equal(5, o.y)
-    o.?z ||= 6
+    o&.z ||= 6
     assert_equal(6, o.z)
 
     o = nil
-    assert_nil(o.?x)
-    assert_nothing_raised(NoMethodError) {o.?x = 6}
-    assert_nothing_raised(NoMethodError) {o.?x *= 7}
+    assert_nil(o&.x)
+    assert_nothing_raised(NoMethodError) {o&.x = 6}
+    assert_nothing_raised(NoMethodError) {o&.x *= 7}
   end
 
   def test_safe_call_evaluate_arguments_only_method_call_is_made
@@ -59,10 +59,10 @@ class TestCall < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_call.rb#L59
     s = Struct.new(:x, :y)
     o = s.new(["a", "b", "c"])
 
-    o.y.?at(proc.call)
+    o.y&.at(proc.call)
     assert_equal(0, count)
 
-    o.x.?at(proc.call)
+    o.x&.at(proc.call)
     assert_equal(1, count)
   end
 end
Index: test/ruby/test_iseq.rb
===================================================================
--- test/ruby/test_iseq.rb	(revision 52461)
+++ test/ruby/test_iseq.rb	(revision 52462)
@@ -181,7 +181,7 @@ class TestISeq < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_iseq.rb#L181
   end
 
   def test_safe_call_chain
-    src = "a.?a.?a.?a.?a.?a"
+    src = "a&.a&.a&.a&.a&.a"
     body = compile(src, __LINE__, {peephole_optimization: true}).to_a[13]
     labels = body.select {|op, arg| op == :branchnil}.map {|op, arg| arg}
     assert_equal(1, labels.uniq.size)
Index: test/ripper/test_parser_events.rb
===================================================================
--- test/ripper/test_parser_events.rb	(revision 52461)
+++ test/ripper/test_parser_events.rb	(revision 52462)
@@ -391,14 +391,14 @@ class TestRipper::ParserEvents < Test::U https://github.com/ruby/ruby/blob/trunk/test/ripper/test_parser_events.rb#L391
     assert_equal "[call(vcall(foo),::,call,[])]", tree
 
     thru_call = false
-    tree = parse("self.?foo", :on_call) {thru_call = true}
+    tree = parse("self&.foo", :on_call) {thru_call = true}
     assert_equal true, thru_call
-    assert_equal "[call(ref(self),.?,foo)]", tree
+    assert_equal "[call(ref(self),&.,foo)]", tree
 
     thru_call = false
-    tree = parse("self.?foo()", :on_call) {thru_call = true}
+    tree = parse("self&.foo()", :on_call) {thru_call = true}
     assert_equal true, thru_call
-    assert_equal "[call(ref(self),.?,foo,[])]", tree
+    assert_equal "[call(ref(self),&.,foo,[])]", tree
   end
 
   def test_excessed_comma
@@ -569,7 +569,7 @@ class TestRipper::ParserEvents < Test::U https://github.com/ruby/ruby/blob/trunk/test/ripper/test_parser_events.rb#L569
     assert_equal("[defs(vcall(foo),.,bar,[],bodystmt([void()]))]", tree)
 
     thru_parse_error = false
-    tree = parse('def foo.?bar; end', :on_parse_error) {thru_parse_error = true}
+    tree = parse('def foo&.bar; end', :on_parse_error) {thru_parse_error = true}
     assert_equal(true, thru_parse_error)
   end
 
@@ -796,9 +796,9 @@ class TestRipper::ParserEvents < Test::U https://github.com/ruby/ruby/blob/trunk/test/ripper/test_parser_events.rb#L796
     assert_equal "[opassign(field(ref(self),.,foo),+=,1)]", tree
 
     thru_opassign = false
-    tree = parse("self.?foo += 1", :on_opassign) {thru_opassign = true}
+    tree = parse("self&.foo += 1", :on_opassign) {thru_opassign = true}
     assert_equal true, thru_opassign
-    assert_equal "[opassign(field(ref(self),.?,foo),+=,1)]", tree
+    assert_equal "[opassign(field(ref(self),&.,foo),+=,1)]", tree
   end
 
   def test_opassign_error
Index: test/ripper/test_scanner_events.rb
===================================================================
--- test/ripper/test_scanner_events.rb	(revision 52461)
+++ test/ripper/test_scanner_events.rb	(revision 52462)
@@ -535,8 +535,8 @@ class TestRipper::ScannerEvents < Test:: https://github.com/ruby/ruby/blob/trunk/test/ripper/test_scanner_events.rb#L535
                  scan('op', ':[]')
     assert_equal ['[]='],
                  scan('op', ':[]=')
-    assert_equal ['.?'],
-                 scan('op', 'a.?f')
+    assert_equal ['&.'],
+                 scan('op', 'a&.f')
     assert_equal [],
                  scan('op', %q[`make all`])
   end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]