From patchwork Wed Feb 1 14:30:21 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Lance Taylor X-Patchwork-Id: 138949 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id D34B7B6EF3 for ; Thu, 2 Feb 2012 01:30:44 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1328711446; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Received:Received:From:To:Subject:Date:Message-ID:User-Agent: MIME-Version:Content-Type:Mailing-List:Precedence:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:Sender: Delivered-To; bh=Y8GmzwakWSJnU8zneXubTEFXi1E=; b=ht1Cm9ABmt8on3Y n0dxvmxpryTO7hkeYT7eH1F7CRhlKxq5WARIViU249pCWs0kg3Ok59xd5u4CSTDD v1bqojYS07npzBuKb5xxKT6tVO2WFk5lEujf/rzNcWqQMzkNrQZwTlNE84VfEckS 6L6X/B2vRZH73etKLG445sh4plbE= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received:Received:Received:From:To:Subject:Date:Message-ID:User-Agent:MIME-Version:Content-Type:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=o0ZPBUtsLr6RcyvJL40jx2kKwT9Oaa6qmpq+RL19mPXsI+aWBVElOAqIrzAWqa aYvOZkKPPK3rDX8vHU6MTOisIBrWlQO20Y5wPE/r1aw4VG2XB9+xgYRh7KHfCJHC aMRtJui0kXTB5x9SkEq7xbB1ca3kU2JpOO4s3PIPDPnNY=; Received: (qmail 9122 invoked by alias); 1 Feb 2012 14:30:41 -0000 Received: (qmail 9113 invoked by uid 22791); 1 Feb 2012 14:30:40 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_LOW, TW_CC, T_RP_MATCHES_RCVD, T_TVD_MIME_NO_HEADERS X-Spam-Check-By: sourceware.org Received: from mail-pw0-f47.google.com (HELO mail-pw0-f47.google.com) (209.85.160.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 01 Feb 2012 14:30:27 +0000 Received: by pbbb4 with SMTP id b4so1102463pbb.20 for ; Wed, 01 Feb 2012 06:30:27 -0800 (PST) Received: by 10.68.234.7 with SMTP id ua7mr49897063pbc.89.1328106627427; Wed, 01 Feb 2012 06:30:27 -0800 (PST) Received: by 10.68.234.7 with SMTP id ua7mr49897049pbc.89.1328106627288; Wed, 01 Feb 2012 06:30:27 -0800 (PST) Received: from coign.google.com ([67.218.110.43]) by mx.google.com with ESMTPS id t10sm918553pbb.18.2012.02.01.06.30.25 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 01 Feb 2012 06:30:26 -0800 (PST) From: Ian Lance Taylor To: gcc-patches@gcc.gnu.org, gofrontend-dev@googlegroups.com Subject: Go patch committed: Accept general expression in case x := <-c Date: Wed, 01 Feb 2012 06:30:21 -0800 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) MIME-Version: 1.0 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org The Go language specification permits a general expression in select { case x := <-c: } which basically means that it can look like case x := (<-c): The gccgo parser was failing to handle that case. This patch fixes it. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline. Ian diff -r 36a50b3d3a7d go/parse.cc --- a/go/parse.cc Tue Jan 31 16:00:53 2012 -0800 +++ b/go/parse.cc Wed Feb 01 06:26:31 2012 -0800 @@ -4640,9 +4640,14 @@ if (token->is_op(OPERATOR_COLONEQ)) { // case rv := <-c: - if (!this->advance_token()->is_op(OPERATOR_CHANOP)) + this->advance_token(); + Expression* e = this->expression(PRECEDENCE_NORMAL, false, false, + NULL); + Receive_expression* re = e->receive_expression(); + if (re == NULL) { - error_at(this->location(), "expected %<<-%>"); + if (!e->is_error_expression()) + error_at(this->location(), "expected receive expression"); return false; } if (recv_var == "_") @@ -4653,8 +4658,7 @@ } *is_send = false; *varname = gogo->pack_hidden_name(recv_var, is_rv_exported); - this->advance_token(); - *channel = this->expression(PRECEDENCE_NORMAL, false, true, NULL); + *channel = re->channel(); return true; } else if (token->is_op(OPERATOR_COMMA)) @@ -4671,9 +4675,15 @@ if (token->is_op(OPERATOR_COLONEQ)) { // case rv, rc := <-c: - if (!this->advance_token()->is_op(OPERATOR_CHANOP)) + this->advance_token(); + Expression* e = this->expression(PRECEDENCE_NORMAL, false, + false, NULL); + Receive_expression* re = e->receive_expression(); + if (re == NULL) { - error_at(this->location(), "expected %<<-%>"); + if (!e->is_error_expression()) + error_at(this->location(), + "expected receive expression"); return false; } if (recv_var == "_" && recv_closed == "_") @@ -4689,9 +4699,7 @@ if (recv_closed != "_") *closedname = gogo->pack_hidden_name(recv_closed, is_rc_exported); - this->advance_token(); - *channel = this->expression(PRECEDENCE_NORMAL, false, true, - NULL); + *channel = re->channel(); return true; }