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