Class: ParseBlock

Inherits:
EndableParseState show all
Defined in:
lib/saikuro.rb

Instance Attribute Summary

Attributes inherited from ParseState

#children, #complexity, #lines, #name, #parent

Instance Method Summary collapse

Methods inherited from EndableParseState

#do_end_token

Methods inherited from ParseState

#calc_complexity, #calc_lines, #compute_state, #compute_state_for_global, #count_tokens?, #do_begin_token, #do_block_token, #do_case_token, #do_class_token, #do_comment_token, #do_conditional_do_control_token, #do_conditional_token, #do_constant_token, #do_def_token, #do_else_token, #do_end_token, #do_identifier_token, #do_module_token, #do_one_line_conditional_token, #do_symbol_token, #end_debug, get_token_counter, #lexer=, #lexer_loop?, #make_state, make_top_state, #parse, set_token_counter, #top_state?

Constructor Details

#initialize(lexer, parent = nil) ⇒ ParseBlock

Returns a new instance of ParseBlock.



549
550
551
552
553
# File 'lib/saikuro.rb', line 549

def initialize(lexer,parent=nil)
  super(lexer,parent)
  @complexity = 1
  @lbraces = Array.new
end

Instance Method Details

#do_right_brace_token(token) ⇒ Object



573
574
575
576
577
# File 'lib/saikuro.rb', line 573

def do_right_brace_token(token)
  # we are done ? what about a hash in a block :-/
  @run = false
  nil
end

#parse_token(token) ⇒ Object

Because the token for a block and hash right brace is the same, we need to track the hash left braces to determine when an end is encountered.



558
559
560
561
562
563
564
565
566
567
568
569
570
571
# File 'lib/saikuro.rb', line 558

def parse_token(token)
  if token.is_a?(TkLBRACE)
    @lbraces.push(true)
  elsif token.is_a?(TkRBRACE)
    if @lbraces.empty?
      do_right_brace_token(token)
      #do_end_token(token)
    else
      @lbraces.pop
    end
  else
    super(token)
  end
end