parseLiteral function

ValueIndex<LiteralNode>? parseLiteral(
  1. String input,
  2. List<Token> tokenList,
  3. int index,
  4. Settings settings,
)

Implementation

ValueIndex<LiteralNode>? parseLiteral(
    String input, List<Token> tokenList, int index, Settings settings) {
  // literal: string | number | true_ | false_ | null_
  final token = tokenList[index];
  dynamic value;

  switch (token.type) {
    case TokenType.string:
      {
        value = parseString(safeSubstring(
            input, token.loc!.start.offset! + 1, token.loc!.end.offset! - 1));
        break;
      }
    case TokenType.number:
      {
        value = int.tryParse(token.value!);
        value ??= double.tryParse(token.value!);
        break;
      }
    case TokenType.true_:
      {
        value = true;
        break;
      }
    case TokenType.false_:
      {
        value = false;
        break;
      }
    case TokenType.null_:
      {
        value = null;
        break;
      }
    default:
      {
        return null;
      }
  }

  var literal = LiteralNode(value, token.value);
  if (settings.loc) {
    literal = literal.copyWith(loc: token.loc);
  }
  return ValueIndex(literal, index + 1);
}