Class: TypedRb::Model::TmWhile

Inherits:
Expr show all
Defined in:
lib/typed/model/tm_while.rb

Instance Attribute Summary collapse

Attributes inherited from Expr

#col, #line, #node, #type

Instance Method Summary collapse

Constructor Details

#initialize(condition_expr, body_expr, node) ⇒ TmWhile

Returns a new instance of TmWhile.



8
9
10
11
12
# File 'lib/typed/model/tm_while.rb', line 8

def initialize(condition_expr, body_expr, node)
  super(node)
  @condition_expr = condition_expr
  @body_expr = body_expr
end

Instance Attribute Details

#body_exprObject (readonly)

Returns the value of attribute body_expr.



7
8
9
# File 'lib/typed/model/tm_while.rb', line 7

def body_expr
  @body_expr
end

#condition_exprObject (readonly)

Returns the value of attribute condition_expr.



7
8
9
# File 'lib/typed/model/tm_while.rb', line 7

def condition_expr
  @condition_expr
end

Instance Method Details

#check_type(context) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/typed/model/tm_while.rb', line 14

def check_type(context)
  condition_expr.check_type(context).compatible?(Types::TyObject.new(BasicObject, node), :lt)
  return Types::TyUnit.new(node) unless body_expr
  while_res = body_expr.check_type(context)
  if while_res.stack_jump? && (while_res.next? || while_res.break?)
    while_res.wrapped_type.check_type(context)
  elsif while_res.either?
    process_either_type(while_res, context)
  else
    while_res
  end
end