   ###
   class MissingContent extends NotAllowed
     constructor: (@message, @pattern, @childNode, @priority = 10) ->
+      super(@message, @pattern, @childNode, @priority)
     toString: ->
       if @message
         "missingContent { #{@message} }"

    constructor: (pattern1, pattern2) ->
      @pattern1 = getPattern pattern1
      @pattern2 = getPattern pattern2
    startTagOpenDeriv: (node) ->
      f1 = new Flip(builder.group, @pattern2)
      r1 = applyAfter(f1, @pattern1.startTagOpenDeriv(node))

   * Superclass for all (simplified) RNG pattern representation nodes
  ###
  class Pattern
    constructor: ->
      if this instanceof Empty
        @uniqueIndex = "empty"
      else
        @uniqueIndex = uniqueIndex++

    hash: ->
      parts = ["name", @constructor.name]
      if this instanceof Empty
        return "empty"
      if this instanceof Choice
        choices = [@pattern1.uniqueIndex, @pattern2.uniqueIndex].sort()
        parts.push "choices"
        parts.push choices
      else
        for attribute in ["pattern", "pattern1", "pattern2", "except", "name", "message", "childNode"]
          if this[attribute]?
            parts.push attribute
            if this[attribute].uniqueIndex?
              parts.push this[attribute].uniqueIndex
            else
              parts.push this[attribute]
      return parts.join("|")

    choiceLeaves: ->
      [@uniqueIndex]
    pruneChoiceLeaf: (pattern) ->
      this

    startTagOpenDeriv: (node) ->
