Class: Modl::Parser::Parsed::ParsedValueConditional

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, #enterModl_top_level_conditional_return, #enterModl_value, #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, #enterModl_top_level_conditional_return, #enterModl_value, #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) ⇒ ParsedValueConditional

Returns a new instance of ParsedValueConditional.



1143
1144
1145
1146
1147
# File 'lib/modl/parser/parsed.rb', line 1143

def initialize(global)
  @global = global
  @conditionTests = []
  @valueConditionalReturns = []
end

Instance Attribute Details

#conditionTestsObject

Returns the value of attribute conditionTests.



1140
1141
1142
# File 'lib/modl/parser/parsed.rb', line 1140

def conditionTests
  @conditionTests
end

#valueConditionalReturnsObject

Returns the value of attribute valueConditionalReturns.



1141
1142
1143
# File 'lib/modl/parser/parsed.rb', line 1141

def valueConditionalReturns
  @valueConditionalReturns
end

Instance Method Details

#enterModl_value_conditional(ctx) ⇒ Object



1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
# File 'lib/modl/parser/parsed.rb', line 1157

def enterModl_value_conditional(ctx)
  i = 0
  ctx_modl_condition_test = ctx.modl_condition_test
  ctx_modl_value_conditional_return = ctx.modl_value_conditional_return

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

    @conditionTests[i] = condition_test

    return if ctx.modl_value_conditional_return_i(i).nil?

    conditional_return = ParsedValueConditionalReturn.new @global

    ctx.modl_value_conditional_return_i(i).enter_rule(conditional_return)

    @valueConditionalReturns[i] = conditional_return

    if ctx_modl_value_conditional_return.size > ctx_modl_condition_test.size
      condition_test = ParsedConditionTest.new @global
      conditional_return = ParsedValueConditionalReturn.new @global
      ctx.modl_value_conditional_return_i(ctx_modl_value_conditional_return.size - 1).enter_rule(conditional_return)
      @conditionTests[i + 1] = condition_test
      @valueConditionalReturns[i + 1] = conditional_return
    end

    i += 1
  end
end

#extract_hashObject



1149
1150
1151
1152
1153
1154
1155
# File 'lib/modl/parser/parsed.rb', line 1149

def extract_hash
  result = @conditionTests[0].evaluate

  return result if @valueConditionalReturns.length == 0
  return @valueConditionalReturns[0].extract_hash if result
  return @valueConditionalReturns[1].extract_hash
end