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); }
public void AddFieldExpr(ASTNodeExprLiteralStructField field) { this.fields.Add(field); this.AddSpan(field.GetSpan()); }
public void AddFieldExpr(ASTNodeExprLiteralStructField field) { this.fields.Add(field); this.AddSpan(field.GetSpan()); }