From 735fa246bf33c33b953ce8a3ed9e656897e30f60 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 30 Sep 2023 23:28:01 +0900 Subject: [PATCH] mruby-enumerator: remove internal attribute methods; ref #6068 Removed methods: obj, args, kwd, meth, fib. --- mrbgems/mruby-enum-lazy/mrblib/lazy.rb | 9 ++++--- mrbgems/mruby-enumerator/mrblib/enumerator.rb | 24 +++++++++++-------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/mrbgems/mruby-enum-lazy/mrblib/lazy.rb b/mrbgems/mruby-enum-lazy/mrblib/lazy.rb index e4f116a93..2b50ff314 100644 --- a/mrbgems/mruby-enum-lazy/mrblib/lazy.rb +++ b/mrbgems/mruby-enum-lazy/mrblib/lazy.rb @@ -47,9 +47,12 @@ class Enumerator raise ArgumentError, "undefined method #{meth}" end lz = Lazy.new(self, &block) - lz.obj = self - lz.meth = meth - lz.args = args + obj = self + lz.instance_eval { + @obj = obj + @meth = meth + @args = args + } lz end alias enum_for to_enum diff --git a/mrbgems/mruby-enumerator/mrblib/enumerator.rb b/mrbgems/mruby-enumerator/mrblib/enumerator.rb index 4cc18efd5..72cc97d5a 100644 --- a/mrbgems/mruby-enumerator/mrblib/enumerator.rb +++ b/mrbgems/mruby-enumerator/mrblib/enumerator.rb @@ -132,16 +132,20 @@ class Enumerator @stop_exc = false end - attr_accessor :obj, :meth, :args, :kwd - attr_reader :fib - def initialize_copy(obj) raise TypeError, "can't copy type #{obj.class}" unless obj.kind_of? Enumerator - raise TypeError, "can't copy execution context" if obj.fib - @obj = obj.obj - @meth = obj.meth - @args = obj.args - @kwd = obj.kwd + raise TypeError, "can't copy execution context" if obj.instance_eval{@fib} + meth = args = kwd = fib = nil + obj.instance_eval { + obj = @obj + meth = @meth + args = @args + kwd = @kwd + } + @obj = obj + @meth = meth + @args = args + @kwd = kwd @fib = nil @lookahead = nil @feedvalue = nil @@ -274,14 +278,14 @@ class Enumerator obj = self if 0 < argv.length obj = self.dup - args = obj.args + args = obj.instance_eval{@args} if !args.empty? args = args.dup args.concat argv else args = argv.dup end - obj.args = args + obj.instance_eval{@args = args} end return obj unless block enumerator_block_call(&block)