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.



562
563
564
565
566
# File 'lib/saikuro.rb', line 562

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

Instance Method Details

#do_right_brace_token(token) ⇒ Object



586
587
588
589
590
# File 'lib/saikuro.rb', line 586

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.



571
572
573
574
575
576
577
578
579
580
581
582
583
584
# File 'lib/saikuro.rb', line 571

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