class TypeProf::Core::AST::BranchNode::LoopNode::BreakNode::NextNode::WhenNode::CaseNode::CaseMatchNode::AndNode
Attributes
Public Class Methods
Source
# File bundled-src/typeprof-0.31.1/lib/typeprof/core/ast/control.rb, line 398 def initialize(raw_node, e1 = nil, raw_e2 = raw_node.right, lenv) super(raw_node, lenv) @e1 = e1 || AST.create_node(raw_node.left, lenv) @e2 = AST.create_node(raw_e2 || raw_node.right, lenv) end
Calls superclass method
TypeProf::Core::AST::Node::new
Public Instance Methods
Source
# File bundled-src/typeprof-0.31.1/lib/typeprof/core/ast/control.rb, line 409 def install0(genv) ret = Vertex.new(self) v1 = @e1.install(genv) # For AND: if left side is truthy, apply its narrowing to right side # Use legacy detect_narrowing for now to maintain compatibility then_narrowing, _else_narrowing = @e1.narrowings if then_narrowing v2 = AST.with_narrowing(genv, self, @lenv, then_narrowing) do @e2.install(genv) end else v2 = @e2.install(genv) end @changes.add_edge(genv, v1, ret) @changes.add_edge(genv, v2, ret) ret end
Source
# File bundled-src/typeprof-0.31.1/lib/typeprof/core/ast/control.rb, line 431 def narrowings @narrowings ||= begin e1_then_narrowing, e1_else_narrowing = @e1.narrowings e2_then_narrowing, e2_else_narrowing = @e2.narrowings [e1_then_narrowing.and(e2_then_narrowing), e1_else_narrowing.or(e2_else_narrowing)] end end
Source
# File bundled-src/typeprof-0.31.1/lib/typeprof/core/ast/control.rb, line 407 def subnodes = { e1:, e2: } def install0(genv) ret = Vertex.new(self) v1 = @e1.install(genv) # For AND: if left side is truthy, apply its narrowing to right side # Use legacy detect_narrowing for now to maintain compatibility then_narrowing, _else_narrowing = @e1.narrowings if then_narrowing v2 = AST.with_narrowing(genv, self, @lenv, then_narrowing) do @e2.install(genv) end else v2 = @e2.install(genv) end @changes.add_edge(genv, v1, ret) @changes.add_edge(genv, v2, ret) ret end def narrowings @narrowings ||= begin e1_then_narrowing, e1_else_narrowing = @e1.narrowings e2_then_narrowing, e2_else_narrowing = @e2.narrowings [e1_then_narrowing.and(e2_then_narrowing), e1_else_narrowing.or(e2_else_narrowing)] end end end