@@ -690,7 +690,7 @@ protected ArgumentsAndBlockTranslation translateArgumentsAndBlock(SourceIndexLen
690
690
isSplatted = true ;
691
691
arguments = new ParseNode []{ argsNode };
692
692
} else {
693
- throw new UnsupportedOperationException ("Unknown argument node type: " + argsNode .getClass ());
693
+ throw CompilerDirectives . shouldNotReachHere ("Unknown argument node type: " + argsNode .getClass ());
694
694
}
695
695
696
696
ArgumentsDescriptor keywordDescriptor = getKeywordArgumentsDescriptor (language , arguments );
@@ -3020,37 +3020,18 @@ public RubyNode visitXStrNode(XStrParseNode node) {
3020
3020
@ Override
3021
3021
public RubyNode visitYieldNode (YieldParseNode node ) {
3022
3022
final ParseNode argsNode = node .getArgsNode ();
3023
- boolean unsplat = false ;
3024
3023
3025
- final ParseNode [] arguments ;
3026
- if (argsNode == null ) {
3027
- // No arguments
3028
- arguments = EMPTY_ARGUMENTS ;
3029
- } else if (argsNode instanceof ArrayParseNode ) {
3030
- // Multiple arguments
3031
- arguments = ((ArrayParseNode ) argsNode ).children ();
3032
- } else if (argsNode instanceof SplatParseNode || argsNode instanceof ArgsCatParseNode ||
3033
- argsNode instanceof ArgsPushParseNode ) {
3034
- unsplat = true ;
3035
- arguments = new ParseNode []{ argsNode };
3036
- } else {
3037
- arguments = new ParseNode []{ node .getArgsNode () };
3038
- }
3039
-
3040
- ArgumentsDescriptor keywordDescriptor = getKeywordArgumentsDescriptor (language , arguments );
3024
+ final ArgumentsAndBlockTranslation argumentsAndBlock = translateArgumentsAndBlock (
3025
+ node .getPosition (), null , argsNode , "<yield>" );
3041
3026
3042
- final RubyNode [] argumentsTranslated = createArray (arguments .length );
3043
-
3044
- for (int i = 0 ; i < arguments .length ; i ++) {
3045
- argumentsTranslated [i ] = arguments [i ].accept (this );
3046
- }
3027
+ final RubyNode [] argumentsTranslated = argumentsAndBlock .getArguments ();
3047
3028
3048
3029
RubyNode readBlock = environment
3049
3030
.findLocalVarOrNilNode (TranslatorEnvironment .METHOD_BLOCK_NAME , node .getPosition ());
3050
3031
3051
3032
final RubyNode ret = new YieldExpressionNode (
3052
- unsplat ,
3053
- keywordDescriptor ,
3033
+ argumentsAndBlock . isSplatted () ,
3034
+ argumentsAndBlock . getArgumentsDescriptor () ,
3054
3035
argumentsTranslated ,
3055
3036
readBlock ,
3056
3037
environment .shouldWarnYieldInModuleBody ());
0 commit comments