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.



558
559
560
561
562
# File 'lib/saikuro.rb', line 558

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

Instance Method Details

#do_right_brace_token(token) ⇒ Object



582
583
584
585
586
# File 'lib/saikuro.rb', line 582

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.



567
568
569
570
571
572
573
574
575
576
577
578
579
580
# File 'lib/saikuro.rb', line 567

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