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.



560
561
562
563
564
# File 'lib/saikuro.rb', line 560

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

Instance Method Details

#do_right_brace_token(token) ⇒ Object



584
585
586
587
588
# File 'lib/saikuro.rb', line 584

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.



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

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