From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D910FC43381 for ; Wed, 27 Mar 2019 07:28:55 +0000 (UTC) Received: from isis.lip6.fr (isis.lip6.fr [132.227.60.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7229D2075D for ; Wed, 27 Mar 2019 07:28:55 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7229D2075D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lip6.fr Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=cocci-bounces@systeme.lip6.fr Received: from systeme.lip6.fr (systeme.lip6.fr [132.227.104.7]) by isis.lip6.fr (8.15.2/lip6) with ESMTP id x2R7Si8m018587 ; Wed, 27 Mar 2019 08:28:44 +0100 (CET) Received: from systeme.lip6.fr (systeme.lip6.fr [127.0.0.1]) by systeme.lip6.fr (Postfix) with ESMTP id E37A37663; Wed, 27 Mar 2019 08:28:43 +0100 (CET) Received: from isis.lip6.fr (isis.lip6.fr [132.227.60.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by systeme.lip6.fr (Postfix) with ESMTPS id 5DC303B64 for ; Wed, 27 Mar 2019 08:28:42 +0100 (CET) Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by isis.lip6.fr (8.15.2/lip6) with ESMTP id x2R7Sf4A016998 for ; Wed, 27 Mar 2019 08:28:41 +0100 (CET) X-pt: isis.lip6.fr X-Addr-Warning: ATTENTION - Votre correspondant a fourni une adresse d'enveloppe @lip6.fr, mais ce message ne provient pas de lip6.fr ! postmaster@lip6.fr. X-IronPort-AV: E=Sophos;i="5.60,276,1549926000"; d="scan'208";a="375922845" Received: from abo-58-107-68.mrs.modulonet.fr (HELO hadrien) ([85.68.107.58]) by mail2-relais-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Mar 2019 08:28:41 +0100 Date: Wed, 27 Mar 2019 08:28:41 +0100 (CET) From: Julia Lawall X-X-Sender: jll@hadrien To: Michael Stefaniuc In-Reply-To: <51927c57-784e-6154-7032-0a4a266ac6f0@mykolab.com> Message-ID: References: <51927c57-784e-6154-7032-0a4a266ac6f0@mykolab.com> User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 X-Greylist: Sender IP whitelisted, Sender e-mail whitelisted, not delayed by milter-greylist-4.4.3 (isis.lip6.fr [132.227.60.2]); Wed, 27 Mar 2019 08:28:44 +0100 (CET) X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.4.3 (isis.lip6.fr [132.227.60.2]); Wed, 27 Mar 2019 08:28:41 +0100 (CET) X-Scanned-By: MIMEDefang 2.78 on 132.227.60.2 X-Scanned-By: MIMEDefang 2.78 on 132.227.60.2 Cc: Coccinelle Subject: Re: [Cocci] Capturing all array initializers? X-BeenThere: cocci@systeme.lip6.fr X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: cocci-bounces@systeme.lip6.fr Errors-To: cocci-bounces@systeme.lip6.fr On Wed, 27 Mar 2019, Michael Stefaniuc wrote: > Hello, > > I'm trying to do this transformation, > from: > const WCHAR wstr[] = {'u','t','f','1','6',' > ','s','t','r','i','n','g','\0'}; > to: > const WCHAR wstr[] = u"utf16 string"; > > I had hoped to be able to use an expression list for the array > initializer, but that produces a parse error. I know that technically an > array initializer is not an expression list, but it looks like one. > Is there another metavariable that I can use instead? > > > A way to workaround that would be to use something like: > @r@ > typedef WCHAR; > identifier wstr; > constant ch; > position p; > @@ > const WCHAR wstr[] = { ..., ch@p, ..., '\0' }; > > > That would make the subsequent script:python rule run once for each > char. With some surprises though: > - The initializers ch get sorted before script:python runs. Thus the > position is needed to undo the sorting. > - More surprisingly, without @p the initializers get even deduplicated. These are both the expected behavior. Script code runs once for each set of arguments, not for each set of matches. If you want the set of matches, you need to put position variables. There is no guarantee offered on the order in which the script will run, although as you found out metavariable bindings do get sorted somewhere along the line. julia > This workaround is doable but tedious. Before I go down that rabbit hole > I prefer to check if there's a better alternative. > > thanks > bye > michael > _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci