@@ -439,16 +439,17 @@ enum Accessor {
439
439
BOTH
440
440
}
441
441
442
- protected void generateAccessor (Frame callerFrame , RubyModule module , Object [] names , Accessor accessor ,
443
- RootCallTarget target ) {
442
+ protected Object [] generateAccessors (Frame callerFrame , RubyModule module , Object [] names ,
443
+ Accessor accessor , RootCallTarget target ) {
444
444
needCallerFrame (callerFrame , target );
445
445
final Visibility visibility = DeclarationContext
446
446
.findVisibilityCheckSelfAndDefaultDefinee (module , callerFrame );
447
- createAccessors (module , names , accessor , visibility );
447
+ return createAccessors (module , names , accessor , visibility );
448
448
}
449
449
450
450
@ TruffleBoundary
451
- private void createAccessors (RubyModule module , Object [] names , Accessor accessor , Visibility visibility ) {
451
+ private Object [] createAccessors (RubyModule module , Object [] names , Accessor accessor ,
452
+ Visibility visibility ) {
452
453
final Node currentNode = getNode ();
453
454
final SourceSection sourceSection ;
454
455
if (currentNode != null ) {
@@ -457,19 +458,22 @@ private void createAccessors(RubyModule module, Object[] names, Accessor accesso
457
458
sourceSection = CoreLibrary .UNAVAILABLE_SOURCE_SECTION ;
458
459
}
459
460
461
+ Object [] generatedMethods = accessor == BOTH ? new Object [names .length * 2 ] : new Object [names .length ];
462
+ int i = 0 ;
460
463
for (Object nameObject : names ) {
461
464
final String name = NameToJavaStringNode .getUncached ().execute (nameObject );
462
465
if (accessor == BOTH ) {
463
- createAccessor (module , name , READER , visibility , sourceSection );
464
- createAccessor (module , name , WRITER , visibility , sourceSection );
466
+ generatedMethods [ i ++] = createAccessor (module , name , READER , visibility , sourceSection );
467
+ generatedMethods [ i ++] = createAccessor (module , name , WRITER , visibility , sourceSection );
465
468
} else {
466
- createAccessor (module , name , accessor , visibility , sourceSection );
469
+ generatedMethods [ i ++] = createAccessor (module , name , accessor , visibility , sourceSection );
467
470
}
468
471
}
472
+ return generatedMethods ;
469
473
}
470
474
471
475
@ TruffleBoundary
472
- private void createAccessor (RubyModule module , String name , Accessor accessor , Visibility visibility ,
476
+ private RubySymbol createAccessor (RubyModule module , String name , Accessor accessor , Visibility visibility ,
473
477
SourceSection sourceSection ) {
474
478
assert accessor != BOTH ;
475
479
final Arity arity = accessor == READER ? Arity .NO_ARGUMENTS : Arity .ONE_REQUIRED ;
@@ -516,6 +520,7 @@ private void createAccessor(RubyModule module, String name, Accessor accessor, V
516
520
nil );
517
521
518
522
module .fields .addMethod (getContext (), this , method );
523
+ return getLanguage ().getSymbol (method .getName ());
519
524
}
520
525
}
521
526
@@ -534,8 +539,7 @@ protected Object attr(
534
539
setter = false ;
535
540
}
536
541
537
- generateAccessor (callerFrame , module , names , setter ? BOTH : READER , target );
538
- return nil ;
542
+ return createArray (generateAccessors (callerFrame , module , names , setter ? BOTH : READER , target ));
539
543
}
540
544
541
545
@ TruffleBoundary
@@ -554,8 +558,7 @@ public abstract static class AttrAccessorNode extends GenerateAccessorNode {
554
558
@ Specialization
555
559
protected Object attrAccessor (
556
560
Frame callerFrame , RubyModule module , Object [] names , Object block , RootCallTarget target ) {
557
- generateAccessor (callerFrame , module , names , BOTH , target );
558
- return nil ;
561
+ return createArray (generateAccessors (callerFrame , module , names , BOTH , target ));
559
562
}
560
563
}
561
564
@@ -565,8 +568,7 @@ public abstract static class AttrReaderNode extends GenerateAccessorNode {
565
568
@ Specialization
566
569
protected Object attrReader (
567
570
Frame callerFrame , RubyModule module , Object [] names , Object block , RootCallTarget target ) {
568
- generateAccessor (callerFrame , module , names , READER , target );
569
- return nil ;
571
+ return createArray (generateAccessors (callerFrame , module , names , READER , target ));
570
572
}
571
573
}
572
574
@@ -576,8 +578,7 @@ public abstract static class AttrWriterNode extends GenerateAccessorNode {
576
578
@ Specialization
577
579
protected Object attrWriter (
578
580
Frame callerFrame , RubyModule module , Object [] names , Object block , RootCallTarget target ) {
579
- generateAccessor (callerFrame , module , names , WRITER , target );
580
- return nil ;
581
+ return createArray (generateAccessors (callerFrame , module , names , WRITER , target ));
581
582
}
582
583
}
583
584
0 commit comments