Project

General

Profile

Actions

Feature #16123

closed

Allow calling a private method with `self.`

Added by dylants (Dylan Thacker-Smith) about 2 years ago. Updated about 2 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:94511]

Description

Problem

There is an inconsistency between calling a private attribute writer being allowed with self.value = syntax and self.value not being allowed on a private attribute writer.

Calling a private method in this way can be useful when trying to assign the return value of this private method to a local variable with the same name.

Solution

The attached patch handles this by compiling the calling into a function call by using the VM_CALL_FCALL flag, so it is as if the call were made without the self. prefix, except it won't be confused with local variables at the VM instruction level. It is also compiled like an assignment call, except I didn't use the COMPILE_RECV macro, since that would remove the CHECK macro usage around the COMPILE line.


Files

0001-Allow-calling-a-private-method-with-self.diff.txt (3.28 KB) 0001-Allow-calling-a-private-method-with-self.diff.txt Allow calling a private method with `self.` dylants (Dylan Thacker-Smith), 08/23/2019 08:44 PM

Related issues

Related to Ruby master - Bug #16947: private method unexpected behaviorClosedActions
Is duplicate of Ruby master - Feature #11297: Allow private method of self to be calledClosedActions
Actions

Also available in: Atom PDF