Object _readValue()

in packages/rfw/lib/src/dart/text.dart [2308:2381]


  Object _readValue({ required bool extended, bool nullOk = false }) {
    if (_source.current is _SymbolToken) {
      switch ((_source.current as _SymbolToken).symbol) {
        case _SymbolToken.openBracket:
          return _readList(extended: extended);
        case _SymbolToken.openBrace:
          return _readMap(extended: extended);
      }
    } else if (_source.current is _IntegerToken) {
      final Object result = (_source.current as _IntegerToken).value;
      _advance();
      return result;
    } else if (_source.current is _DoubleToken) {
      final Object result = (_source.current as _DoubleToken).value;
      _advance();
      return result;
    } else if (_source.current is _StringToken) {
      final Object result = (_source.current as _StringToken).value;
      _advance();
      return result;
    } else if (_source.current is _IdentifierToken) {
      final String identifier = (_source.current as _IdentifierToken).value;
      if (identifier == 'true') {
        _advance();
        return true;
      }
      if (identifier == 'false') {
        _advance();
        return false;
      }
      if (identifier == 'null' && nullOk) {
        _advance();
        return missing;
      }
      if (!extended) {
        throw ParserException._unexpected(_source.current);
      }
      if (identifier == 'event') {
        _advance();
        return EventHandler(_readString(), _readMap(extended: true));
      }
      if (identifier == 'args') {
        _advance();
        return ArgsReference(_readParts());
      }
      if (identifier == 'data') {
        _advance();
        return DataReference(_readParts());
      }
      if (identifier == 'state') {
        _advance();
        return StateReference(_readParts());
      }
      if (identifier == 'switch') {
        _advance();
        return _readSwitch();
      }
      if (identifier == 'set') {
        _advance();
        _expectIdentifier('state');
        final StateReference stateReference = StateReference(_readParts());
        _expectSymbol(_SymbolToken.equals);
        final Object value = _readValue(extended: true);
        return SetStateHandler(stateReference, value);
      }
      final int index = _loopIdentifiers.lastIndexOf(identifier) + 1;
      if (index > 0) {
        _advance();
        return LoopReference(_loopIdentifiers.length - index, _readParts(optional: true));
      }
      return _readConstructorCall();
    }
    throw ParserException._unexpected(_source.current);
  }