@@ -811,8 +811,16 @@ def assert_satisfactory_implementation(receiver, method_name, ruby_kwargs)
811811 end
812812
813813 class ExtendedState
814+ def initialize ( args , object )
815+ @arguments = args
816+ @object = object
817+ @memos = nil
818+ @added_extras = nil
819+ end
820+
814821 attr_accessor :arguments , :object , :memos , :added_extras
815822 end
823+
816824 # Wrap execution with hooks.
817825 # Written iteratively to avoid big stack traces.
818826 # @return [Object] Whatever the
@@ -823,9 +831,7 @@ def with_extensions(obj, args, ctx)
823831 # This is a hack to get the _last_ value for extended obj and args,
824832 # in case one of the extensions doesn't `yield`.
825833 # (There's another implementation that uses multiple-return, but I'm wary of the perf cost of the extra arrays)
826- extended = ExtendedState . new
827- extended . arguments = args # rubocop:disable Development/ContextIsPassedCop
828- extended . object = obj
834+ extended = ExtendedState . new ( args , obj )
829835 value = run_extensions_before_resolve ( obj , args , ctx , extended ) do |obj , args |
830836 if ( added_extras = extended . added_extras )
831837 args = args . dup
@@ -835,7 +841,7 @@ def with_extensions(obj, args, ctx)
835841 end
836842
837843 extended_obj = extended . object
838- extended_args = extended . arguments
844+ extended_args = extended . arguments # rubocop:disable Development/ContextIsPassedCop
839845 memos = extended . memos || EMPTY_HASH
840846
841847 ctx . schema . after_lazy ( value ) do |resolved_value |
0 commit comments