Class: Yoda::Typing::Evaluator

Inherits:
Object
  • Object
show all
Defined in:
lib/yoda/typing/evaluator.rb

Overview

Evaluator interpret codes abstractly and assumes types of terms.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(context) ⇒ Evaluator

Returns a new instance of Evaluator.

Parameters:



9
10
11
# File 'lib/yoda/typing/evaluator.rb', line 9

def initialize(context)
  @context = context
end

Instance Attribute Details

#contextContext (readonly)

Returns:



6
7
8
# File 'lib/yoda/typing/evaluator.rb', line 6

def context
  @context
end

Instance Method Details

#bind_trace(node, trace) ⇒ Object

Parameters:

  • node (::AST::Node)
  • trace (Trace::Base)


21
22
23
# File 'lib/yoda/typing/evaluator.rb', line 21

def bind_trace(node, trace)
  context.bind_trace(node, trace)
end

#find_trace(node) ⇒ Trace::Base?

Parameters:

  • node (::AST::Node)

Returns:

  • (Trace::Base, nil)


27
28
29
# File 'lib/yoda/typing/evaluator.rb', line 27

def find_trace(node)
  context.find_trace(node)
end

#process(node) ⇒ Model::Types::Base

Parameters:

  • node (::AST::Node)

Returns:



15
16
17
# File 'lib/yoda/typing/evaluator.rb', line 15

def process(node)
  evaluate(node).tap { |type| bind_trace(node, Traces::Normal.new(context, type)) unless find_trace(node) }
end