Exemplo n.º 1
0
        public ASTNodeExpr ParseStructLiteral()
        {
            var structNameOrExprNode = this.ParseExprLeaf();

            if (this.CurrentIsNot(TokenKind.BraceOpen) || this.insideCondition.Peek())
            {
                return(structNameOrExprNode);
            }

            var structNameNode = structNameOrExprNode as ASTNodeExprName;

            if (structNameNode == null)
            {
                return(structNameOrExprNode);
            }

            var structNode = new ASTNodeExprLiteralStruct();

            structNode.SetNameNode(structNameNode);

            this.Match(TokenKind.BraceOpen, "expected '{'");

            while (this.CurrentIsNot(TokenKind.BraceClose))
            {
                var fieldNode = new ASTNodeExprLiteralStructField();
                fieldNode.SetNameNode(this.ParseName(false, false));
                this.Match(TokenKind.Colon, "expected ':'");
                fieldNode.SetExprNode(this.ParseExpr());

                structNode.AddFieldExpr(fieldNode);
                this.MatchListSeparator(TokenKind.Comma, TokenKind.BraceClose,
                                        MessageCode.Expected, "expected ',' or '}'");
            }

            structNode.AddSpan(this.Current().span);
            this.Match(TokenKind.BraceClose, "expected '}'");

            return(structNode);
        }
Exemplo n.º 2
0
 public void AddFieldExpr(ASTNodeExprLiteralStructField field)
 {
     this.fields.Add(field);
     this.AddSpan(field.GetSpan());
 }
Exemplo n.º 3
0
 public void AddFieldExpr(ASTNodeExprLiteralStructField field)
 {
     this.fields.Add(field);
     this.AddSpan(field.GetSpan());
 }