@@ -55,17 +55,6 @@ public static TokenListParserResult<ExpressionToken, Expression> TryPartialParse
55
55
. IgnoreThen ( Token . EqualTo ( ExpressionToken . In ) )
56
56
. Value ( Operators . RuntimeOpNotIn ) ;
57
57
58
- static readonly TokenListParser < ExpressionToken , string > IsNull =
59
- Token . EqualTo ( ExpressionToken . Is )
60
- . IgnoreThen ( Token . EqualTo ( ExpressionToken . Null ) )
61
- . Value ( Operators . RuntimeOpIsNull ) ;
62
-
63
- static readonly TokenListParser < ExpressionToken , string > IsNotNull =
64
- Token . EqualTo ( ExpressionToken . Is )
65
- . IgnoreThen ( Token . EqualTo ( ExpressionToken . Not ) )
66
- . IgnoreThen ( Token . EqualTo ( ExpressionToken . Null ) )
67
- . Value ( Operators . RuntimeOpIsNotNull ) ;
68
-
69
58
static readonly TokenListParser < ExpressionToken , Func < Expression , Expression > > PropertyPathStep =
70
59
Token . EqualTo ( ExpressionToken . Period )
71
60
. IgnoreThen ( Token . EqualTo ( ExpressionToken . Identifier ) )
@@ -86,22 +75,35 @@ from close in Token.EqualTo(ExpressionToken.RBracket)
86
75
from lparen in Token . EqualTo ( ExpressionToken . LParen )
87
76
from expr in Parse . Ref ( ( ) => Expr ) . ManyDelimitedBy ( Token . EqualTo ( ExpressionToken . Comma ) )
88
77
from rparen in Token . EqualTo ( ExpressionToken . RParen )
89
- from ci in Token . EqualTo ( ExpressionToken . CI ) . Value ( true ) . OptionalOrDefault ( false )
78
+ from ci in Token . EqualTo ( ExpressionToken . CI ) . Value ( true ) . OptionalOrDefault ( )
90
79
select ( Expression ) new CallExpression ( ci , name . ToStringValue ( ) , expr ) ) . Named ( "function" ) ;
91
80
92
81
static readonly TokenListParser < ExpressionToken , Expression > ArrayLiteral =
93
82
( from lbracket in Token . EqualTo ( ExpressionToken . LBracket )
94
83
from expr in Parse . Ref ( ( ) => Expr ) . ManyDelimitedBy ( Token . EqualTo ( ExpressionToken . Comma ) )
95
84
from rbracket in Token . EqualTo ( ExpressionToken . RBracket )
96
85
select ( Expression ) new ArrayExpression ( expr ) ) . Named ( "array" ) ;
97
-
86
+
87
+ static readonly TokenListParser < ExpressionToken , KeyValuePair < string , Expression > > IdentifierMember =
88
+ from key in Token . EqualTo ( ExpressionToken . Identifier ) . Or ( Token . EqualTo ( ExpressionToken . BuiltInIdentifier ) )
89
+ from value in Token . EqualTo ( ExpressionToken . Colon )
90
+ . IgnoreThen ( Parse . Ref ( ( ) => Expr ) )
91
+ . Cast < ExpressionToken , Expression , Expression ? > ( )
92
+ . OptionalOrDefault ( )
93
+ select KeyValuePair . Create < string , Expression > (
94
+ key . ToStringValue ( ) ,
95
+ value ?? ( key . Kind == ExpressionToken . BuiltInIdentifier ?
96
+ new AmbientPropertyExpression ( key . ToStringValue ( ) . Substring ( 1 ) , true ) :
97
+ new AmbientPropertyExpression ( key . ToStringValue ( ) , false ) ) ) ;
98
+
99
+ static readonly TokenListParser < ExpressionToken , KeyValuePair < string , Expression > > StringMember =
100
+ from key in Token . EqualTo ( ExpressionToken . String ) . Apply ( ExpressionTextParsers . String )
101
+ from colon in Token . EqualTo ( ExpressionToken . Colon )
102
+ from value in Parse . Ref ( ( ) => Expr )
103
+ select KeyValuePair . Create ( key , value ) ;
104
+
98
105
static readonly TokenListParser < ExpressionToken , KeyValuePair < string , Expression > > ObjectMember =
99
- ( from key in Token . EqualTo ( ExpressionToken . Identifier )
100
- . Select ( t => t . ToStringValue ( ) )
101
- . Or ( Token . EqualTo ( ExpressionToken . String ) . Apply ( ExpressionTextParsers . String ) )
102
- from colon in Token . EqualTo ( ExpressionToken . Colon )
103
- from value in Parse . Ref ( ( ) => Expr )
104
- select KeyValuePair . Create ( key , value ) ) . Named ( "object member" ) ;
106
+ IdentifierMember . Or ( StringMember ) . Named ( "object member" ) ;
105
107
106
108
static readonly TokenListParser < ExpressionToken , Expression > ObjectLiteral =
107
109
( from lbrace in Token . EqualTo ( ExpressionToken . LBrace )
0 commit comments