docs: def _typed_null_handler(c, ctx):
      """Handles typed null values. Entered once `null.` has been found."""
      assert c == _DOT
      c, self = yield
      nxt = _NULL_STARTS
      i = 0
      length = None
      done = False
      trans = ctx.immediate_transition(self)
      while True:
          if done:
              if _ends_value(c) or (ctx.container.ion_type is IonType.SEXP and c in _OPERATORS):
                  trans = ctx.event_transition(IonEvent, IonEventType.SCALAR, nxt.ion_type, None)
              else:
                  _illegal_character(c, ctx, 'Illegal null type.')
          elif length is None:
              if c not in nxt:
                  _illegal_character(c, ctx, 'Illegal null type.')
              nxt = nxt[c]
              if isinstance(nxt, _NullSequence):
                  length = len(nxt.sequence)
          else:
              if c != nxt[i]:
                  _illegal_character(c, ctx, 'Illegal null type.')
              i += 1
              done = i == length
          c, _ = yield trans