   toString: -> @text
 
   @setter "matches offset matchLength ruleVariant"
-  @getter "parent parser offset matchLength",
+  @getter "parent parser offset matchLength, label pluralLabel",
     name: -> @_name || @ruleName || @class.getName()
     present: -> @_matchLength > 0
     matches: -> @_matches ||= []

  #################

  # add to appropriate list in @matches
  _bindToLabelLists: (label, match) ->
    pluralLabel = @parser.pluralize label
    {matches} = @
    @[pluralLabel] = push @[pluralLabel], match unless @__proto__[pluralLabel]

  # keep most recent match directly as node property
  # IFF the prototype doesn't already have a property of that name
  _bindToSingleLabels: (label, match) ->
    @[label] = match unless @__proto__[label]

    @_offset ?= @_parent.getNextOffset()
    @_matchLength ||= 0
    @_lastMatch = null
    @_label = null
    @_pluralLabel = null
    @_matches = null

  @createSubclass: (options) ->
