From fbcd0652944568c43a6ae427960d909d62ce6a8d Mon Sep 17 00:00:00 2001
From: Jeremy Evans <code@jeremyevans.net>
Date: Tue, 13 Aug 2019 22:44:36 -0700
Subject: Remove support for nil::Constant

This was an intentional bug added in 1.9.

The approach taken here is to add a second operand to the
getconstant instruction for whether nil should be allowed and
treated as current scope.

Fixes [Bug #11718]
---
 insns.def | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'insns.def')

diff --git a/insns.def b/insns.def
index 6cfb3b121f..e84fcecfe7 100644
--- a/insns.def
+++ b/insns.def
@@ -252,19 +252,19 @@ setclassvariable
     rb_cvar_set(vm_get_cvar_base(vm_get_cref(GET_EP()), GET_CFP()), id, val);
 }
 
-/* Get constant variable id. If klass is Qnil, constants
+/* Get constant variable id. If klass is Qnil and allow_nil is true, constants
    are searched in the current scope. Otherwise, get constant under klass
    class or module.
  */
 DEFINE_INSN
 getconstant
-(ID id)
+(ID id, VALUE allow_nil)
 (VALUE klass)
 (VALUE val)
 /* getconstant can kick autoload */
 // attr bool leaf = false; /* has rb_autoload_load() */
 {
-    val = vm_get_ev_const(ec, klass, id, 0);
+    val = vm_get_ev_const(ec, klass, id, allow_nil, 0);
 }
 
 /* Set constant variable id under cbase class or module.
-- 
cgit v1.2.3

