Class: Idl::AryRangeAssignmentSyntaxNode

Inherits:
SyntaxNode show all
Defined in:
lib/idlc/ast.rb

Instance Method Summary collapse

Methods inherited from Treetop::Runtime::SyntaxNode

#set_input_file, #set_input_file_unless_already_set, #space?

Instance Method Details

#to_astObject



3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
# File 'lib/idlc/ast.rb', line 3051

def to_ast
  var = send(:var).to_ast
  brackets = send(:brackets).elements

  # Build access chain for all but the last bracket
  brackets[0..-2].each do |bracket|
    var =
      if bracket.msb.empty?
        AryElementAccessAst.new(input, interval, var, bracket.lsb.to_ast)
      else
        AryRangeAccessAst.new(input, interval, var,
                              bracket.msb.expression.to_ast, bracket.lsb.to_ast)
      end
  end

  # Use accumulated `var` for the assignment target
  last_bracket = brackets[-1]
  if last_bracket.msb.empty?
    AryElementAssignmentAst.new(input, interval, var, last_bracket.lsb.to_ast, send(:rval).to_ast)
  else
    AryRangeAssignmentAst.new(input, interval, var, last_bracket.msb.expression.to_ast, last_bracket.lsb.to_ast, send(:rval).to_ast)
  end
end