class MODL::Parser::Parsed::ParsedTopLevelConditional

Class to represent a parsed grammar object

Attributes

conditionTests[RW]
topLevelConditionalReturns[RW]

Public Class Methods

new(global) click to toggle source
# File lib/modl/parser/parsed.rb, line 1023
def initialize(global)
  @global = global
  @topLevelConditionalReturns = []
  @conditionTests = []
  @file_importer = FileImporter.instance
end

Public Instance Methods

enterModl_top_level_conditional(ctx) click to toggle source
# File lib/modl/parser/parsed.rb, line 1074
def enterModl_top_level_conditional(ctx)
  @global.enter_condition
  i = 0
  modl_condition_test = ctx.modl_condition_test
  ctx_modl_top_level_conditional_return = ctx.modl_top_level_conditional_return

  while i < modl_condition_test.size
    condition_test = ParsedConditionTest.new @global
    ctx.modl_condition_test_i(i).enter_rule(condition_test)

    conditional_return = ParsedTopLevelConditionalReturn.new @global
    ctx.modl_top_level_conditional_return_i(i).enter_rule(conditional_return)
    @conditionTests[i] = condition_test
    @topLevelConditionalReturns[i] = conditional_return
    i += 1
  end
  if ctx_modl_top_level_conditional_return.size > modl_condition_test.size
    conditional_return = ParsedTopLevelConditionalReturn.new @global
    ctx.modl_top_level_conditional_return_i(ctx_modl_top_level_conditional_return.size - 1).enter_rule(conditional_return)
    @topLevelConditionalReturns[i] = conditional_return
  end
  extract_hash
  @global.exit_condition
end
extract_hash() click to toggle source
# File lib/modl/parser/parsed.rb, line 1030
def extract_hash
  @conditionTests.each_index do |i|
    next unless @conditionTests[i].evaluate

    item = @topLevelConditionalReturns[i]
    if item.structures[0].pair
      key = item.structures[0].pair.key
      key = Sutil.tail(key) if key[0] == '_'
      pair = item.structures[0].pair
      @global.pair(key, pair)

      if key.downcase.start_with? '*l'
        files = pair.valueItem.extract_hash if pair.valueItem
        files = pair.array.extract_hash if pair.array
        unless pair.loaded
          @file_importer.import_files files, @global
          pair.loaded = true
        end
      end
    end
    item.structures = OrphanHandler.adopt(@global, item.structures)
    return item.extract_hash
  end
  return unless @topLevelConditionalReturns.length > @conditionTests.length

  last_item = @topLevelConditionalReturns[-1]
  if last_item.structures[0].pair
    key = last_item.structures[0].pair.key
    key = Sutil.tail(key) if key[0] == '_'
    pair = last_item.structures[0].pair
    @global.pair(key, pair)

    if key.downcase.start_with? '*l'
      files = pair.valueItem.extract_hash if pair.valueItem
      files = pair.array.extract_hash if pair.array
      unless pair.loaded
        @file_importer.import_files files, @global
        pair.loaded = true
      end
    end
  end
  last_item.extract_hash
end