parseDefValue function

dynamic parseDefValue(
  1. ParsingContext context,
  2. int level
)

Implementation

dynamic parseDefValue(
    ParsingContext context,
    int level
    )
{
    if ( context.lineIndex < context.lineArray.length )
    {
        var DefLine( :line, :lineSpaceCount )
            = parseDefLine( context, level );

        if ( line == '[' )
        {
            return parseDefArray( context, level );
        }
        else if ( line == '{' )
        {
            return parseDefObject( context, level );
        }
        else if ( line == '(' )
        {
            return parseDefMap( context, level );
        }
        else if ( line.startsWith( '\'' )
                  || line.startsWith( '"' )
                  || line.startsWith( '`' )
                  || line.startsWith( 'ยด' ) )
        {
            context.lineIndex--;

            return parseDefQuotedString( context, level );
        }
        else
        {
            var tokenArray = getTokenArray( line );

            if ( tokenArray.length == 1
                 && tokenArray[ 0 ] == line.trim() )
            {
                if ( line == 'undefined' )
                {
                    return undefined;
                }
                else if ( line == 'null' )
                {
                    return null;
                }
                else if ( line == 'false' )
                {
                    return false;
                }
                else if ( line == 'true' )
                {
                    return true;
                }
                else if ( line == 'NaN' )
                {
                    return double.nan;
                }
                else if ( line == '-Infinity' )
                {
                    return double.negativeInfinity;
                }
                else if ( line == 'Infinity' )
                {
                    return double.infinity;
                }
                else if ( _hexadecimalIntegerExpression.hasMatch( line ) ||
                        _decimalRealExpression.hasMatch( line ) ||
                        _exponentialDecimalRealExpression.hasMatch( line ) )
                {
                    num? number = num.tryParse( line );

                    if ( number != null
                         && !number.isNaN )
                    {
                        return number;
                    }
                }
            }

            context.lineIndex--;

            return parseDefUnquotedString( context, level );
        }
    }
    else
    {
        throwParsingError( 'Invalid DEF value', context, level );
    }
}