class Yadriggy::Rescue

begin-rescue-ensure.

`raise` is parsed as a method call (or a command).

Attributes

body[R]

@return [ASTnode|nil] the body of the rescue clause.

else[R]

@return [ASTnode|nil] the else clause.

ensure[R]

@return [ASTnode|nil] the ensure clause.

nested_rescue[R]

@return [Rescue|nil] the rest of rescue clauses.

The returned object's {#else} and {#ensure} are `nil`.
parameter[R]

@return [ASTnode|nil] the rescue parameter.

types[R]

@return [Array<ASTnode>] the exception types. It may be empty.

Public Class Methods

make(rescue_expr, else_expr, ensure_expr) click to toggle source
# File lib/yadriggy/ast.rb, line 1457
def self.make(rescue_expr, else_expr, ensure_expr)
  if rescue_expr.nil? && else_expr.nil? && ensure_expr.nil?
    nil
  else
    Rescue.new(rescue_expr, else_expr, ensure_expr)
  end
end
new(rescue_expr, else_expr=nil, ensure_expr=nil) click to toggle source
# File lib/yadriggy/ast.rb, line 1465
def initialize(rescue_expr, else_expr=nil, ensure_expr=nil)
  if rescue_expr.nil?
    @types = []
    @parameter = nil
    @body = nil
    @nested_rescue = nil
  else
    expr = has_tag?(rescue_expr, :rescue)
    rescue_clause = expr[1]
    if rescue_clause.nil?
      @types = []
    elsif rescue_clause[0] == :mrhs_new_from_args
      types1 = to_nodes(rescue_clause[1])
      @types = types1 << to_node(rescue_clause[2])
    else
      @types = to_nodes(rescue_clause)
    end

    if expr[2].nil?
      @parameter = nil
    else
      @parameter = to_node(has_tag?(has_tag?(expr[2], :var_field)[1],
                                    :@ident))
    end

    @body = Exprs.make(expr[3])
    @nested_rescue = to_node(expr[4])
    add_children(@types)
    add_child(@parameter)
    add_child(@body)
    add_child(@nested_rescue)
  end

  if else_expr.nil?
    @else = nil
  else
    if !else_expr.nil? && else_expr[0].is_a?(Array)
      else_body = else_expr
    else
      # Ruby 2.4 or earlier
      elsexpr = has_tag?(else_expr, :else)
      else_body = else_expr[1]
    end
    @else = Exprs.make(else_body)
    add_child(@else)
  end

  if ensure_expr.nil?
    @ensure = nil
  else
    ensexpr = has_tag?(ensure_expr, :ensure)
    @ensure = Exprs.make(ensexpr[1])
    add_child(@ensure)
  end
end
tag() click to toggle source
# File lib/yadriggy/ast.rb, line 1455
def self.tag() :rescue end

Public Instance Methods

accept(evaluator) click to toggle source

A method for Visitor pattern. @param [Eval] evaluator the visitor of Visitor pattern. @return [void]

# File lib/yadriggy/ast.rb, line 1524
def accept(evaluator)
  evaluator.rescue_end(self)
end
has_else?() click to toggle source

@return [Boolean] true if the else clause is included.

# File lib/yadriggy/ast.rb, line 1534
def has_else?
  !@else.nil?
end
has_ensure?() click to toggle source

@return [Boolean] true if the ensure clause is included.

# File lib/yadriggy/ast.rb, line 1539
def has_ensure?
  !@ensure.nil?
end
has_rescue?() click to toggle source

@return [Boolean] true if the rescue clause is included.

# File lib/yadriggy/ast.rb, line 1529
def has_rescue?
  !@body.nil?
end