Method: AND#evalPrecedence

Defined in:
lib/antlr4/atn/SemanticContext.rb

#evalPrecedence(parser, outerContext) ⇒ Object



223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
# File 'lib/antlr4/atn/SemanticContext.rb', line 223

def evalPrecedence(parser, outerContext)
    differs = false
    operands = Array.new
    self.opnds.each {|context|
        evaluated = context.evalPrecedence(parser, outerContext)
        if evaluated.equal? context then
            differs = false
        else
            differs = true
        end
#            differs = differs || (! (evaluated.equal? context))
        # The AND context is false if any element is false
        return nil if evaluated.nil? 
        if evaluated.equal? SemanticContext.NONE
            # Reduce the result by skipping true elements
            operands.push(evaluated)
        end
    }
    if not differs
        return self
    end

    if operands.length()==0
        # all elements were true, so the AND context is true
        return SemanticContext.NONE
    end

    result = nil
    operands.each {|o| 
        if result.nil? 
            result = o 
        else 
          result = result.andContext(o)
        end
    }
    return result
end