Class: MODL::Parser::Parsed::ParsedTopLevelConditional

Inherits:
MODLParserBaseListener show all
Defined in:
lib/modl/parser/parsed.rb

Overview

Class to represent a parsed grammar object

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from MODLParserBaseListener

#enterModl, #enterModl_array, #enterModl_array_conditional, #enterModl_array_conditional_return, #enterModl_array_item, #enterModl_array_value_item, #enterModl_condition, #enterModl_condition_group, #enterModl_condition_test, #enterModl_map, #enterModl_map_conditional, #enterModl_map_conditional_return, #enterModl_map_item, #enterModl_nb_array, #enterModl_operator, #enterModl_pair, #enterModl_primitive, #enterModl_structure, #enterModl_top_level_conditional_return, #enterModl_value, #enterModl_value_conditional, #enterModl_value_conditional_return, #enterModl_value_item, #enter_every_rule, #exitModl, #exitModl_array, #exitModl_array_conditional, #exitModl_array_conditional_return, #exitModl_array_item, #exitModl_array_value_item, #exitModl_condition, #exitModl_condition_group, #exitModl_condition_test, #exitModl_map, #exitModl_map_conditional, #exitModl_map_conditional_return, #exitModl_map_item, #exitModl_nb_array, #exitModl_operator, #exitModl_pair, #exitModl_primitive, #exitModl_structure, #exitModl_top_level_conditional, #exitModl_top_level_conditional_return, #exitModl_value, #exitModl_value_conditional, #exitModl_value_conditional_return, #exitModl_value_item, #exit_every_rule, #visit_error_node, #visit_terminal

Methods inherited from MODLParserListener

#enterModl, #enterModl_array, #enterModl_array_conditional, #enterModl_array_conditional_return, #enterModl_array_item, #enterModl_array_value_item, #enterModl_condition, #enterModl_condition_group, #enterModl_condition_test, #enterModl_map, #enterModl_map_conditional, #enterModl_map_conditional_return, #enterModl_map_item, #enterModl_nb_array, #enterModl_operator, #enterModl_pair, #enterModl_primitive, #enterModl_structure, #enterModl_top_level_conditional_return, #enterModl_value, #enterModl_value_conditional, #enterModl_value_conditional_return, #enterModl_value_item, #exitModl, #exitModl_array, #exitModl_array_conditional, #exitModl_array_conditional_return, #exitModl_array_item, #exitModl_array_value_item, #exitModl_condition, #exitModl_condition_group, #exitModl_condition_test, #exitModl_map, #exitModl_map_conditional, #exitModl_map_conditional_return, #exitModl_map_item, #exitModl_nb_array, #exitModl_operator, #exitModl_pair, #exitModl_primitive, #exitModl_structure, #exitModl_top_level_conditional, #exitModl_top_level_conditional_return, #exitModl_value, #exitModl_value_conditional, #exitModl_value_conditional_return, #exitModl_value_item

Constructor Details

#initialize(global) ⇒ ParsedTopLevelConditional

Returns a new instance of ParsedTopLevelConditional.



1023
1024
1025
1026
1027
1028
# File 'lib/modl/parser/parsed.rb', line 1023

def initialize(global)
  @global = global
  @topLevelConditionalReturns = []
  @conditionTests = []
  @file_importer = FileImporter.instance
end

Instance Attribute Details

#conditionTestsObject

Returns the value of attribute conditionTests.



1020
1021
1022
# File 'lib/modl/parser/parsed.rb', line 1020

def conditionTests
  @conditionTests
end

#topLevelConditionalReturnsObject

Returns the value of attribute topLevelConditionalReturns.



1021
1022
1023
# File 'lib/modl/parser/parsed.rb', line 1021

def topLevelConditionalReturns
  @topLevelConditionalReturns
end

Instance Method Details

#enterModl_top_level_conditional(ctx) ⇒ Object



1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
# 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_hashObject



1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
# 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