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

ruby-changes:57367

From: Nobuyoshi <ko1@a...>
Date: Thu, 29 Aug 2019 15:29:12 +0900 (JST)
Subject: [ruby-changes:57367] Nobuyoshi Nakada: 2ed68d0ff9 (master): Revert "Add pipeline operator [Feature #15799]"

https://git.ruby-lang.org/ruby.git/commit/?id=2ed68d0ff9

From 2ed68d0ff9a932efbc4393c869534040dec8f647 Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Thu, 29 Aug 2019 15:09:43 +0900
Subject: Revert "Add pipeline operator [Feature #15799]"

This reverts commits:
* d365fd5a024254d7c105a62a015a7ea29ccf3e5d
* d780c3662484d6072b3a6945b840049de72c2096
* aa7211836b769231a2a8ef6b6ec2fd0ec882ef29
* 043f010c28e82ea38978bf8ed885416f133b5b75
* bb4dd7c6af05c7821d572e2592ea3d0cc748d81f
* 043f010c28e82ea38978bf8ed885416f133b5b75
* f169043d81524b5b529f2c1e9c35437ba5bc3a7a

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/94645

diff --git a/NEWS b/NEWS
index 89f7c41..bc099d4 100644
--- a/NEWS
+++ b/NEWS
@@ -48,17 +48,6 @@ sufficient information, see the ChangeLog file or Redmine https://github.com/ruby/ruby/blob/trunk/NEWS#L48
      " # This has been warned since 2.4
      EOS
 
-* Pipeline operator is experimentally added.
-
-  This code equals to the next code.
-
-     foo()
-      |> bar 1, 2
-      |> display
-
-     foo()
-      .bar(1, 2)
-      .display
 
 * The flip-flop syntax deprecation is reverted. [Feature #5400]
 
diff --git a/defs/id.def b/defs/id.def
index 1296b12..132e92c 100644
--- a/defs/id.def
+++ b/defs/id.def
@@ -117,7 +117,6 @@ token_ops = %[\ https://github.com/ruby/ruby/blob/trunk/defs/id.def#L117
   OROP          ||
   ANDDOT        &.
   METHREF       .:
-  PIPE          |>
 ]
 
 class KeywordError < RuntimeError
diff --git a/ext/ripper/eventids2.c b/ext/ripper/eventids2.c
index 663f8c1..ce4a285 100644
--- a/ext/ripper/eventids2.c
+++ b/ext/ripper/eventids2.c
@@ -262,7 +262,6 @@ static const struct token_assoc { https://github.com/ruby/ruby/blob/trunk/ext/ripper/eventids2.c#L262
     {tDSTAR,			O(op)},
     {tANDDOT,			O(op)},
     {tMETHREF,			O(op)},
-    {tPIPE,			O(op)},
     {tSTRING_BEG,		O(tstring_beg)},
     {tSTRING_CONTENT,		O(tstring_content)},
     {tSTRING_DBEG,		O(embexpr_beg)},
diff --git a/parse.y b/parse.y
index ade2e0a..694db6b 100644
--- a/parse.y
+++ b/parse.y
@@ -1009,7 +1009,7 @@ static void token_info_warn(struct parser_params *p, const char *token, token_in https://github.com/ruby/ruby/blob/trunk/parse.y#L1009
 %type <node> literal numeric simple_numeric ssym dsym symbol cpath
 %type <node> top_compstmt top_stmts top_stmt begin_block
 %type <node> bodystmt compstmt stmts stmt_or_begin stmt expr arg primary command command_call method_call
-%type <node> expr_value expr_value_do arg_value primary_value fcall rel_expr pipeline
+%type <node> expr_value expr_value_do arg_value primary_value fcall rel_expr
 %type <node> if_tail opt_else case_body case_args cases opt_rescue exc_list exc_var opt_ensure
 %type <node> args call_args opt_call_args
 %type <node> paren_args opt_paren_args args_tail opt_args_tail block_args_tail opt_block_args_tail
@@ -1067,7 +1067,6 @@ static void token_info_warn(struct parser_params *p, const char *token, token_in https://github.com/ruby/ruby/blob/trunk/parse.y#L1067
 %token <id> tANDDOT	RUBY_TOKEN(ANDDOT) "&."
 %token <id> tCOLON2	RUBY_TOKEN(COLON2) "::"
 %token <id> tMETHREF	RUBY_TOKEN(METHREF) ".:"
-%token tPIPE		RUBY_TOKEN(PIPE) "|>"
 %token tCOLON3		":: at EXPR_BEG"
 %token <id> tOP_ASGN	"operator-assignment" /* +=, -=  etc. */
 %token tASSOC		"=>"
@@ -1103,7 +1102,6 @@ static void token_info_warn(struct parser_params *p, const char *token, token_in https://github.com/ruby/ruby/blob/trunk/parse.y#L1102
 %nonassoc  modifier_if modifier_unless modifier_while modifier_until
 %left  keyword_or keyword_and
 %right keyword_not
-%left  tPIPE
 %nonassoc keyword_defined
 %right '=' tOP_ASGN
 %left modifier_rescue
@@ -1512,37 +1510,6 @@ expr		: command_call https://github.com/ruby/ruby/blob/trunk/parse.y#L1510
 			$$ = call_uni_op(p, method_cond(p, $2, &@2), '!', &@1, &@$);
 		    }
 		| arg
-		| pipeline
-		;
-
-pipeline	: expr tPIPE operation opt_paren_args
-		    {
-		    /*%%%*/
-			$$ = new_command_qcall(p, ID2VAL(idPIPE), $1, $3, $4, Qnull, &@3, &@$);
-		    /*% %*/
-		    /*% ripper: command_call!($1, ID2VAL(idPIPE), $3, $4) %*/
-		    }
-		| expr tPIPE operation opt_paren_args brace_block
-		    {
-		    /*%%%*/
-			$$ = new_command_qcall(p, ID2VAL(idPIPE), $1, $3, $4, $5, &@3, &@$);
-		    /*% %*/
-		    /*% ripper: method_add_block!(command_call!($1, ID2VAL(idPIPE), $3, $4), $5) %*/
-		    }
-		| expr tPIPE operation command_args
-		    {
-		    /*%%%*/
-			$$ = new_command_qcall(p, ID2VAL(idPIPE), $1, $3, $4, Qnull, &@3, &@$);
-		    /*% %*/
-		    /*% ripper: command_call!($1, ID2VAL(idPIPE), $3, $4) %*/
-		    }
-		| expr tPIPE operation command_args do_block
-		    {
-		    /*%%%*/
-			$$ = new_command_qcall(p, ID2VAL(idPIPE), $1, $3, $4, $5, &@3, &@$);
-		    /*% %*/
-		    /*% ripper: method_add_block!(command_call!($1, ID2VAL(idPIPE), $3, $4), $5) %*/
-		    }
 		;
 
 expr_value	: expr
@@ -8710,11 +8677,10 @@ parser_yylex(struct parser_params *p) https://github.com/ruby/ruby/blob/trunk/parse.y#L8677
 	      case '\13': /* '\v' */
 		space_seen = 1;
 		break;
-	      case '|':
 	      case '&':
 	      case '.': {
 		dispatch_delayed_token(p, tIGNORED_NL);
-		if (c == '|' ? peek(p, '>') : (peek(p, '.') == (c == '&'))) {
+		if (peek(p, '.') == (c == '&')) {
 		    pushback(p, c);
 		    dispatch_scan_event(p, tSP);
 		    goto retry;
@@ -8989,10 +8955,6 @@ parser_yylex(struct parser_params *p) https://github.com/ruby/ruby/blob/trunk/parse.y#L8955
 	    SET_LEX_STATE(EXPR_BEG);
 	    return tOP_ASGN;
 	}
-	if (c == '>') {
-	    SET_LEX_STATE(EXPR_DOT);
-	    return tPIPE;
-	}
 	SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG|EXPR_LABEL);
 	pushback(p, c);
 	return '|';
diff --git a/test/ripper/test_scanner_events.rb b/test/ripper/test_scanner_events.rb
index 02312ef..75ae294 100644
--- a/test/ripper/test_scanner_events.rb
+++ b/test/ripper/test_scanner_events.rb
@@ -573,8 +573,6 @@ class TestRipper::ScannerEvents < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ripper/test_scanner_events.rb#L573
                  scan('op', 'obj.:foo')
     assert_equal [],
                  scan('op', %q[`make all`])
-    assert_equal %w[|>],
-                 scan('op', %q[x|>y])
   end
 
   def test_symbeg
diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb
index f0a2290..05e6de3 100644
--- a/test/ruby/test_syntax.rb
+++ b/test/ruby/test_syntax.rb
@@ -1388,15 +1388,6 @@ eom https://github.com/ruby/ruby/blob/trunk/test/ruby/test_syntax.rb#L1388
     assert_syntax_error('@1', /outside block/)
   end
 
-  def test_pipeline_operator
-    assert_valid_syntax('x |> y')
-    x = nil
-    assert_equal("121", eval('x = 12 |> pow(2) |> to_s 11'))
-    assert_equal(12, x)
-    assert_equal([2, 4, 6], eval("1.. |> take 3\n|> map do @1 * 2 end"))
-    assert_syntax_error('a|>-b', /unexpected '-'/)
-  end
-
   def test_value_expr_in_condition
     mesg = /void value expression/
     assert_syntax_error("tap {a = (true ? next : break)}", mesg)
-- 
cgit v0.10.2


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

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