class TypeProf::Core::AST::BranchNode::LoopNode::BreakNode::NextNode::CaseNode::CaseMatchNode::AndNode::OrNode::ReturnNode::BeginNode
Attributes
body[R]
else_clause[R]
ensure_clause[R]
rescue_clauses[R]
rescue_conds[R]
Public Class Methods
new(raw_node, lenv)
click to toggle source
Calls superclass method
TypeProf::Core::AST::Node::new
# File typeprof-0.30.1/lib/typeprof/core/ast/control.rb, line 354 def initialize(raw_node, lenv) super(raw_node, lenv) @body = raw_node.statements ? AST.create_node(raw_node.statements, lenv) : DummyNilNode.new(code_range, lenv) @rescue_conds = [] @rescue_clauses = [] raw_res = raw_node.rescue_clause while raw_res raw_res.exceptions.each do |raw_cond| @rescue_conds << AST.create_node(raw_cond, lenv) end if raw_res.statements @rescue_clauses << AST.create_node(raw_res.statements, lenv) end raw_res = raw_res.subsequent end @else_clause = raw_node.else_clause&.statements ? AST.create_node(raw_node.else_clause.statements, lenv) : DummyNilNode.new(code_range, lenv) @ensure_clause = raw_node.ensure_clause&.statements ? AST.create_node(raw_node.ensure_clause.statements, lenv) : DummyNilNode.new(code_range, lenv) end
Public Instance Methods
define0(genv)
click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/control.rb, line 377 def define0(genv) @body.define(genv) @rescue_conds.each {|cond| cond.define(genv) } @rescue_clauses.each {|clause| clause.define(genv) } @else_clause.define(genv) if @else_clause @ensure_clause.define(genv) if @ensure_clause end
install0(genv)
click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/control.rb, line 393 def install0(genv) ret = Vertex.new(self) @changes.add_edge(genv, @body.install(genv), ret) @rescue_conds.each {|cond| cond.install(genv) } @rescue_clauses.each {|clause| @changes.add_edge(genv, clause.install(genv), ret) } @changes.add_edge(genv, @else_clause.install(genv), ret) if @else_clause @ensure_clause.install(genv) if @ensure_clause ret end
subnodes(= { body:, rescue_conds:, rescue_clauses:, else_clause:, ensure_clause: })
click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/control.rb, line 375 def subnodes = { body:, rescue_conds:, rescue_clauses:, else_clause:, ensure_clause: } def define0(genv) @body.define(genv) @rescue_conds.each {|cond| cond.define(genv) } @rescue_clauses.each {|clause| clause.define(genv) } @else_clause.define(genv) if @else_clause @ensure_clause.define(genv) if @ensure_clause end def undefine0(genv) @body.undefine(genv) @rescue_conds.each {|cond| cond.undefine(genv) } @rescue_clauses.each {|clause| clause.undefine(genv) } @else_clause.undefine(genv) if @else_clause @ensure_clause.undefine(genv) if @ensure_clause end def install0(genv) ret = Vertex.new(self) @changes.add_edge(genv, @body.install(genv), ret) @rescue_conds.each {|cond| cond.install(genv) } @rescue_clauses.each {|clause| @changes.add_edge(genv, clause.install(genv), ret) } @changes.add_edge(genv, @else_clause.install(genv), ret) if @else_clause @ensure_clause.install(genv) if @ensure_clause ret end end
undefine0(genv)
click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/control.rb, line 385 def undefine0(genv) @body.undefine(genv) @rescue_conds.each {|cond| cond.undefine(genv) } @rescue_clauses.each {|clause| clause.undefine(genv) } @else_clause.undefine(genv) if @else_clause @ensure_clause.undefine(genv) if @ensure_clause end