From patchwork Sun May 10 13:43:06 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iain Buclaw X-Patchwork-Id: 470453 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 0503E1401DA for ; Sun, 10 May 2015 23:43:17 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=mAOqMcZw; 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=eqhghY8UzLC4pNpXbREn02LRrjwervPuOLqdZJBx45n1NQ orFyJdQ7wJ03YP8qx9UGhoQ1EbQK5JH6cLrIiZPLyGR6kpkB1FrBxy9RVuj/n2vL g+c3tWkTE0M4iGZSuFCBu5DC+vfQekMSt2q7Eykl2c/3pUTmBvI7fk2X2Zxhg= 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=MTd8H0FatQIvvmCJTdc/q730OL8=; b=mAOqMcZwNJuVSOVkOpgZ U6ATEUQz/sLnFktvHZuQRdWw25SDKAQxdK12sSd1oRg/c5rAlgNVspBKk8TLvaqE XCRa6uyix1XCEQDi2bxVfo8OYqLKFeVUjfCjxutU5XrjowfZsaJ5/60BVv9MwJJq 3yaXpwpxY2C+Dte1ua/QXIk= Received: (qmail 90666 invoked by alias); 10 May 2015 13:43:11 -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 90650 invoked by uid 89); 10 May 2015 13:43:10 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 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-f177.google.com Received: from mail-qc0-f177.google.com (HELO mail-qc0-f177.google.com) (209.85.216.177) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Sun, 10 May 2015 13:43:08 +0000 Received: by qcyk17 with SMTP id k17so57844200qcy.1 for ; Sun, 10 May 2015 06:43:06 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.229.54.196 with SMTP id r4mr8435111qcg.15.1431265386804; Sun, 10 May 2015 06:43:06 -0700 (PDT) Received: by 10.229.215.4 with HTTP; Sun, 10 May 2015 06:43:06 -0700 (PDT) Date: Sun, 10 May 2015 15:43:06 +0200 Message-ID: Subject: [PATCH] D demangle: Add support for Nj and Nk symbols in mangled string From: Iain Buclaw To: gcc-patches 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-10 Iain Buclaw * d-demangle.c (dlang_attributes): Handle Nj and ignore Nk symbol in mangled string. Return NULL if have encountered an unknown attribute. (dlang_function_args): Handle Nk symbol in mangled string. * testsuite/d-demangle-expected: Add coverage tests for functions with return parameters and return attributes. --- diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c index bb481c0..048218b 100644 --- a/libiberty/d-demangle.c +++ b/libiberty/d-demangle.c @@ -254,8 +254,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--; @@ -264,6 +266,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; } @@ -353,6 +362,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 2aeacb8..5c4cd75 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$ #