2018-09-12 14:21:24 +00:00
|
|
|
# frozen_string_literal: true
|
2018-09-12 13:15:43 +00:00
|
|
|
|
2013-07-04 22:54:50 +00:00
|
|
|
module Mutant
|
|
|
|
class Subject
|
|
|
|
class Method
|
|
|
|
# Instance method subjects
|
|
|
|
class Instance < self
|
|
|
|
|
|
|
|
NAME_INDEX = 0
|
2018-12-25 11:42:51 +00:00
|
|
|
SYMBOL = '#'
|
2013-07-04 22:54:50 +00:00
|
|
|
|
2014-03-15 17:00:18 +00:00
|
|
|
# Prepare subject for mutation insertion
|
|
|
|
#
|
|
|
|
# @return [self]
|
|
|
|
def prepare
|
2014-12-07 21:14:54 +00:00
|
|
|
scope.__send__(:undef_method, name)
|
2014-03-15 17:00:18 +00:00
|
|
|
self
|
|
|
|
end
|
|
|
|
|
2015-08-18 22:37:52 +00:00
|
|
|
# Mutator for memoizable memoized instance methods
|
2013-07-04 22:54:50 +00:00
|
|
|
class Memoized < self
|
2014-06-29 21:25:17 +00:00
|
|
|
include AST::Sexp
|
2013-07-04 22:54:50 +00:00
|
|
|
|
2014-03-28 15:42:46 +00:00
|
|
|
# Prepare subject for mutation insertion
|
|
|
|
#
|
|
|
|
# @return [self]
|
|
|
|
def prepare
|
2014-12-07 21:14:54 +00:00
|
|
|
scope.__send__(:memoized_methods).instance_variable_get(:@memory).delete(name)
|
2016-02-14 04:28:59 +00:00
|
|
|
super()
|
2014-03-28 15:42:46 +00:00
|
|
|
end
|
|
|
|
|
2013-07-04 22:54:50 +00:00
|
|
|
private
|
|
|
|
|
2015-07-03 15:21:39 +00:00
|
|
|
# Memoizer node for mutant
|
2013-07-04 22:54:50 +00:00
|
|
|
#
|
|
|
|
# @param [Parser::AST::Node] mutant
|
|
|
|
#
|
|
|
|
# @return [Parser::AST::Node]
|
2014-12-07 21:27:38 +00:00
|
|
|
def wrap_node(mutant)
|
2013-07-04 22:54:50 +00:00
|
|
|
s(:begin, mutant, s(:send, nil, :memoize, s(:args, s(:sym, name))))
|
|
|
|
end
|
|
|
|
|
|
|
|
end # Memoized
|
|
|
|
end # Instance
|
|
|
|
end # Method
|
|
|
|
end # Subject
|
|
|
|
end # Mutant
|