From patchwork Wed May 13 08:51:29 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iain Buclaw X-Patchwork-Id: 471760 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id A0659140758 for ; Wed, 13 May 2015 18:52:29 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=f+V/DRsp; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:date:message-id:subject:from:to:content-type; q= dns; s=default; b=jZ7kDlJSakRghXQ0Ur13EQAKkVzITxTkQ9kMFHhrTlN4ZX TuHTKVbjGIV+hprlHL8ZMMcASUljE6HL7mfKlObOkTjG+fVhbaV7ii2zYLKN/vsY G9dI8gnh2rZYpPrOa2cM/nAmm6dJ5hElwkQRtSICJm4dOD9mnwCPzEO6uR250= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:date:message-id:subject:from:to:content-type; s= default; bh=wwlI/rcT0cFyUuor3BlRzGuGlHQ=; b=f+V/DRsp8/ZZTi6M7EC7 ElutdmAHkZijCFnJ8j2TS2bwVtQE6/+tPMBKCZ06ymIG5XRTRYe1qTGmiL87Jcfc Xp5jvDvYs3VMngyj16tgoeKDvyh1QteMV+IgJMYDau+UTESGKjSQUH47oO/V5lgv SbNT9Ie3AWIttz5cpS70LHM= Received: (qmail 125939 invoked by alias); 13 May 2015 08:51:34 -0000 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 Received: (qmail 124896 invoked by uid 89); 13 May 2015 08:51:33 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-qc0-f173.google.com Received: from mail-qc0-f173.google.com (HELO mail-qc0-f173.google.com) (209.85.216.173) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Wed, 13 May 2015 08:51:31 +0000 Received: by qcbgy10 with SMTP id gy10so18678372qcb.3 for ; Wed, 13 May 2015 01:51:29 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.55.21.221 with SMTP id 90mr40425396qkv.44.1431507089615; Wed, 13 May 2015 01:51:29 -0700 (PDT) Received: by 10.229.215.4 with HTTP; Wed, 13 May 2015 01:51:29 -0700 (PDT) Date: Wed, 13 May 2015 10:51:29 +0200 Message-ID: Subject: [PATCH 5/7] [D] libiberty: Add support for return parameter and attributes From: Iain Buclaw To: gcc-patches , Ian Lance Taylor X-IsSubscribed: yes The next version of D introduces two new mangle conventions. - Nj to represent methods whose 'this' parameter is also the function return value - Nk to represent a 'ref' parameter that is also the function return value This patch introduces support for these two symbols. --- libiberty/ChangeLog: 2015-05-13 Iain Buclaw * d-demangle.c (dlang_attributes): Handle return attributes, ignoring return parameters in the mangled string. Return NULL if have encountered an unknown attribute. (dlang_function_args): Handle return parameters in the mangled string. * testsuite/d-demangle-expected: Add coverage tests for functions with return parameters and return attributes. From 8d4f404a7181390983aef485e1bcb7d568d9751d Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Mon, 11 May 2015 09:22:21 +0200 Subject: [PATCH 5/7] D demangle: Add support for return parameter and attribute symbols --- libiberty/d-demangle.c | 15 +++++++++++++ libiberty/testsuite/d-demangle-expected | 40 +++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c index 4315071..0af926c 100644 --- a/libiberty/d-demangle.c +++ b/libiberty/d-demangle.c @@ -292,8 +292,10 @@ dlang_attributes (string *decl, const char *mangled) continue; case 'g': case 'h': + case 'k': /* inout parameter is represented as 'Ng'. vector parameter is represented as 'Nh'. + return paramenter is represented as 'Nk'. If we see this, then we know we're really in the parameter list. Rewind and break. */ mangled--; @@ -302,6 +304,13 @@ dlang_attributes (string *decl, const char *mangled) mangled++; string_append (decl, "@nogc "); continue; + case 'j': /* return */ + mangled++; + string_append (decl, "return "); + continue; + + default: /* unknown attribute */ + return NULL; } break; } @@ -391,6 +400,12 @@ dlang_function_args (string *decl, const char *mangled) string_append (decl, "scope "); } + if (mangled[0] == 'N' && mangled[1] == 'k') /* return(T) */ + { + mangled += 2; + string_append (decl, "return "); + } + switch (*mangled) { case 'J': /* out(T) */ diff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected index 43de5af..ae0e8d3 100644 --- a/libiberty/testsuite/d-demangle-expected +++ b/libiberty/testsuite/d-demangle-expected @@ -314,6 +314,14 @@ _D8demangle4testFMaZv demangle.test(scope char) # --format=dlang +_D8demangle4testFNjaZv +demangle.test(char) +# +--format=dlang +_D8demangle4testFNkaZv +demangle.test(return char) +# +--format=dlang _D8demangle4testFaXv demangle.test(char...) # @@ -434,6 +442,22 @@ _D8demangle4testFDFNdNfNaZaZv demangle.test(char() @property @safe pure delegate) # --format=dlang +_D8demangle4testFNjDFZaZv +demangle.test(char() delegate) +# +--format=dlang +_D8demangle4testFNkDFZaZv +demangle.test(return char() delegate) +# +--format=dlang +_D8demangle4testFDFNjZaZv +demangle.test(char() return delegate) +# +--format=dlang +_D8demangle4testFNjNkDFNjZaZv +demangle.test(return char() return delegate) +# +--format=dlang _D8demangle4testFFNaZaZv demangle.test(char() pure function) # @@ -474,6 +498,22 @@ _D8demangle4testFFNdNfNaZaZv demangle.test(char() @property @safe pure function) # --format=dlang +_D8demangle4testFNjFZaZv +demangle.test(char() function) +# +--format=dlang +_D8demangle4testFNkFZaZv +demangle.test(return char() function) +# +--format=dlang +_D8demangle4testFFNjZaZv +demangle.test(char() return function) +# +--format=dlang +_D8demangle4testFNjNkFNjZaZv +demangle.test(return char() return function) +# +--format=dlang _D8demangle4test6__initZ demangle.test.init$ # -- 2.1.0