From patchwork Fri Feb 24 07:25:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Asahi Lina X-Patchwork-Id: 61141 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp755927wrd; Thu, 23 Feb 2023 23:28:31 -0800 (PST) X-Google-Smtp-Source: AK7set8NaP9Ihpv3e8bnCTzYIETSeB8GXq1gv33BoICFXc6galISZpHZZFdTvZ8z3Y9Y/UL5gcgj X-Received: by 2002:a05:6402:756:b0:4af:6c25:f028 with SMTP id p22-20020a056402075600b004af6c25f028mr4383361edy.5.1677223711775; Thu, 23 Feb 2023 23:28:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677223711; cv=none; d=google.com; s=arc-20160816; b=HBeu9WCpfNrG2j4dRXZ46Yl9e4xn1hxS1Mscqxxv9wVsozJxwa2a91/dCvU/N/temS ixu+HGmt+jstcq20epFyxOS6SWGzU/ZUIBf0QCH9PRtISact5fsdn13Xhn6IkwDs91Kv 6wGGaFiVIuy10GQa77M1Ux4eBvLfr7+ecb6v/v8fTLFOYUWVh+byMEAWBwscjsGg41r0 StpqWm1VIcs9DOo2+NidiZrZwoalYuk2ghj6AY3yGcq0YhGULWuhUT8fvYj5kkymgHHN zJHdk0hGW9J2m5Ug9/QdZ/fmow2cE8Rp/SL5KkJoXQd81i9SczetqN3HseJD9WBWoNT2 tHVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=etp2s21GqytsFuILfRXE+GeGiTX1uDJS5GaqzRiKWmA=; b=r/hKQHAxfY9br+WurRKPR+PSgMnhcqa2zwdBo2IZJtPMa8W5sVpeDrGCLgBIiXKFuE Svx8NLZwxZjrZlDnV2J7zoLz+aghLbTdpk5ldOxmOp4ca2lHRk8coJJBnuUGKnY8zsBb gKa/4qHKHcuYgD/x4PBOnZbmbIZJBXK/sJXUCst28BIuAbH1zZbHJEcFYYL2BH9NjWNh Cc1bAeHr79uIiBKGgHyDq2ivkmsDsrA8toHbjb8NIhjFmRq+H6VWL/gltkglJuSJv2UP 4448cOEHOZIa/tuv6A/FXkEA0lltaURqoVM4jmEaN57J2GKBVWRnIlQVGFCjLQPUkxIq MhoA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@asahilina.net header.s=default header.b=KJoHBpU9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=asahilina.net Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k11-20020a056402048b00b004acc454abe7si11519720edv.260.2023.02.23.23.28.09; Thu, 23 Feb 2023 23:28:31 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@asahilina.net header.s=default header.b=KJoHBpU9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=asahilina.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229731AbjBXH0i (ORCPT + 99 others); Fri, 24 Feb 2023 02:26:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38054 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229506AbjBXH0f (ORCPT ); Fri, 24 Feb 2023 02:26:35 -0500 Received: from mail.marcansoft.com (marcansoft.com [212.63.210.85]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 722301EBDF; Thu, 23 Feb 2023 23:26:34 -0800 (PST) Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: linasend@asahilina.net) by mail.marcansoft.com (Postfix) with ESMTPSA id 6B55D424B9; Fri, 24 Feb 2023 07:26:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=asahilina.net; s=default; t=1677223593; bh=znEXimllrWJvfY/ohmIs0JciCK61gw0J+CRFrn2gudU=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=KJoHBpU9113mO+mdOiaJNn+0HklOkWluH51fJFbKl8NYFDEBkIICjJyoRhOLobouU QzH3np0L6dmJO+aRIahBLIEY3Iby8a9Hzx1zmLHjELLA9UPfIIAYhX+HS+Sty9fe12 EjEwDHNE2btQIyFRnNHPbOb89uShMQmcL8qVqLsTSJMr0JV9CRux2yS2EBram+jfRw AiFlXtJs3LjNKhuzNRk2X1Qbx6ddH4ZJ/wM1cRlUV5eRq1H9GHSnXEwQaiTU/9hVCL KQozTR6J4ZTU7R9qa3fDLZVf7JR28dXlz7XpAAG9//vGTtCJwiaQX1W8sbrDKdlaVG 7OIvQV1aXpFQg== From: Asahi Lina Date: Fri, 24 Feb 2023 16:25:55 +0900 Subject: [PATCH 1/3] rust: macros: Make expect_punct() return the Punct directly MIME-Version: 1.0 Message-Id: <20230224-rust-macros-v1-1-b39fae46e102@asahilina.net> References: <20230224-rust-macros-v1-0-b39fae46e102@asahilina.net> In-Reply-To: <20230224-rust-macros-v1-0-b39fae46e102@asahilina.net> To: Miguel Ojeda , Alex Gaynor , Wedson Almeida Filho , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, asahi@lists.linux.dev, Asahi Lina X-Mailer: b4 0.12.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1677223586; l=2668; i=lina@asahilina.net; s=20230221; h=from:subject:message-id; bh=znEXimllrWJvfY/ohmIs0JciCK61gw0J+CRFrn2gudU=; b=H/oQs1/Pt+6iQus1S0oDMkRIMRYO/sCD2ik5qRDSJzQ3aWOjUiTjg2D+qmrDeb1VTO+yDB6ZI XGJ6yp2aYR9Aik6WMEy5SEeA1CISZ8nNhb01BFVy76fEoq2IxnOFK4l X-Developer-Key: i=lina@asahilina.net; a=ed25519; pk=Qn8jZuOtR1m5GaiDfTrAoQ4NE1XoYVZ/wmt5YtXWFC4= X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758696530915292846?= X-GMAIL-MSGID: =?utf-8?q?1758696530915292846?= This makes it mirror the way expect_ident() works, and means we can more easily push the result back into the token stream. Signed-off-by: Asahi Lina Reviewed-by: Gary Guo Reviewed-by: Finn Behrens Reviewed-by: Vincenzo Palazzo --- rust/macros/concat_idents.rs | 2 +- rust/macros/helpers.rs | 6 +++--- rust/macros/module.rs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/rust/macros/concat_idents.rs b/rust/macros/concat_idents.rs index 7e4b450f3a50..6d955d65016e 100644 --- a/rust/macros/concat_idents.rs +++ b/rust/macros/concat_idents.rs @@ -15,7 +15,7 @@ fn expect_ident(it: &mut token_stream::IntoIter) -> Ident { pub(crate) fn concat_idents(ts: TokenStream) -> TokenStream { let mut it = ts.into_iter(); let a = expect_ident(&mut it); - assert_eq!(expect_punct(&mut it), ','); + assert_eq!(expect_punct(&mut it).as_char(), ','); let b = expect_ident(&mut it); assert!(it.next().is_none(), "only two idents can be concatenated"); let res = Ident::new(&format!("{a}{b}"), b.span()); diff --git a/rust/macros/helpers.rs b/rust/macros/helpers.rs index cf7ad950dc1e..65706ecc007e 100644 --- a/rust/macros/helpers.rs +++ b/rust/macros/helpers.rs @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 -use proc_macro::{token_stream, TokenTree}; +use proc_macro::{token_stream, Punct, TokenTree}; pub(crate) fn try_ident(it: &mut token_stream::IntoIter) -> Option { if let Some(TokenTree::Ident(ident)) = it.next() { @@ -38,9 +38,9 @@ pub(crate) fn expect_ident(it: &mut token_stream::IntoIter) -> String { try_ident(it).expect("Expected Ident") } -pub(crate) fn expect_punct(it: &mut token_stream::IntoIter) -> char { +pub(crate) fn expect_punct(it: &mut token_stream::IntoIter) -> Punct { if let TokenTree::Punct(punct) = it.next().expect("Reached end of token stream for Punct") { - punct.as_char() + punct } else { panic!("Expected Punct"); } diff --git a/rust/macros/module.rs b/rust/macros/module.rs index a7e363c2b044..07503b242d2d 100644 --- a/rust/macros/module.rs +++ b/rust/macros/module.rs @@ -104,7 +104,7 @@ impl ModuleInfo { ); } - assert_eq!(expect_punct(it), ':'); + assert_eq!(expect_punct(it).as_char(), ':'); match key.as_str() { "type" => info.type_ = expect_ident(it), @@ -119,7 +119,7 @@ impl ModuleInfo { ), } - assert_eq!(expect_punct(it), ','); + assert_eq!(expect_punct(it).as_char(), ','); seen_keys.push(key); } From patchwork Fri Feb 24 07:25:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Asahi Lina X-Patchwork-Id: 61142 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp755948wrd; Thu, 23 Feb 2023 23:28:36 -0800 (PST) X-Google-Smtp-Source: AK7set/HtaaZEGvZpDBKGvWe9K6zev3XvKss8MCczFwNoAv5P+zkM78ZzSwYNVB2OXJAG4ahqa1r X-Received: by 2002:a17:906:2611:b0:87b:d62c:d87 with SMTP id h17-20020a170906261100b0087bd62c0d87mr22571154ejc.1.1677223716669; Thu, 23 Feb 2023 23:28:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677223716; cv=none; d=google.com; s=arc-20160816; b=Nyold5jSmmpSORxtYHajVMipPcLALIyf+N7J6++qrgljsYAnP2U3h2q7JQ7gvgdcgx mgjL0V9DsZWr/yHm3z36d46s59soxXa4PLjYrw/UeGf1lXG5IV00xsn2Zf3X2Lx2VIVx SEoYH1zEkppcV7U2GrNNxrWzA6bc0xqJc/v0Q6ZVZUyLR7CBRoUSd33MGE9ZRu5BmiHB PeSRn5I9TSV0AiNDNx1qwXY0BpMwlffHbgSTCIUwRCASxHpGEecZhq5nfEeK0qB2fNwq zPAd1wwMYa+ExlpdN46JjyKgOvJcATwHshAyHFfJPpxGVZhmsYePGB1LJ96pZVJ2VElG eRow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=1ajnrL/jgh2NJuhst/OY+bB5qBFC1zVnwiAVuoD/d7I=; b=XS3SUhBnOyIslZpBpBLs3uU6pra7NBa2CrlSfmXTUfZXDRKIvlXR5KzFyqczMXqLdW zZfEyat6TzmmCBZmnu4TYrtUHABMO5exU5hTFAPGsh57wICVaSi6T42MW4cEHkr/DHDa jPHlP7mUXCYOFynOfaNLOiGwaQEzn3hnuE6Zb6dZcaCVq4gzHgNwaoCL2EbJawepI+He cprO2Zjpbe/pSC8jbyQ8tvdmUQBJdSeVYRk1B3FQd/M1sL0ILNtz7P7A7jYzPm9zl3Dd DoevFJ3EpM+gMh5S0T8aPcQH4/p7rkinnHjtF8bAL9TsNX9nToCZvWN7Ams2XI0706qO Wgig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@asahilina.net header.s=default header.b=mHLIUVdM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=asahilina.net Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 20-20020a170906101400b008b175a0717fsi31157215ejm.396.2023.02.23.23.28.13; Thu, 23 Feb 2023 23:28:36 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@asahilina.net header.s=default header.b=mHLIUVdM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=asahilina.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229734AbjBXH0k (ORCPT + 99 others); Fri, 24 Feb 2023 02:26:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38148 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229739AbjBXH0i (ORCPT ); Fri, 24 Feb 2023 02:26:38 -0500 Received: from mail.marcansoft.com (marcansoft.com [212.63.210.85]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 84E725E878; Thu, 23 Feb 2023 23:26:37 -0800 (PST) Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: linasend@asahilina.net) by mail.marcansoft.com (Postfix) with ESMTPSA id 89D5942627; Fri, 24 Feb 2023 07:26:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=asahilina.net; s=default; t=1677223596; bh=i3HnPKPfmfqBLbRSmTJVD/vTe4oYMr0tLkjCkOowWxo=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=mHLIUVdMDHCfaQJTwTd4ksLkgryWXo4VLHMXJtg6uviwjS5EWxgNNWlrSg1ErQ326 DUT0sJbw9/KAETC9dAI+xVTcWc821z+l/0Itw4jPQ3EAsow+BvlpxX4MxmUVcSQ0hC Jbd7ERKwAlAsPZ4rat8nCUYk7vz9jsIcoBLbDaqux76T96/KICeEiRN09LcpJchb80 atp4F4FtXCN1yeQSEKB4n2bC5tzNweKbQ2BMq6uGQaqQgqHLKtJhqp1x0HPqSAS5ST mJvGrztDEwGUmPrtEXITf/7GoixVky08rA+te6CgFLgU3f3rvcWDAo1oSQkEzVDqoU yyF38IDwV0NxQ== From: Asahi Lina Date: Fri, 24 Feb 2023 16:25:56 +0900 Subject: [PATCH 2/3] rust: macros: concat_idents: Allow :: paths in the first argument MIME-Version: 1.0 Message-Id: <20230224-rust-macros-v1-2-b39fae46e102@asahilina.net> References: <20230224-rust-macros-v1-0-b39fae46e102@asahilina.net> In-Reply-To: <20230224-rust-macros-v1-0-b39fae46e102@asahilina.net> To: Miguel Ojeda , Alex Gaynor , Wedson Almeida Filho , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, asahi@lists.linux.dev, Asahi Lina X-Mailer: b4 0.12.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1677223586; l=1727; i=lina@asahilina.net; s=20230221; h=from:subject:message-id; bh=i3HnPKPfmfqBLbRSmTJVD/vTe4oYMr0tLkjCkOowWxo=; b=DPiJmYbiFviJCZNTLudvSrFUdKkvqk1hC9plJ20sOU8vPA9fwNu18df1XX8QF2ceaXXwpg+Y7 XS7veM7W473AkoL6twukc3WNjQq33aFILRpHVtIayz6H224BE84By1p X-Developer-Key: i=lina@asahilina.net; a=ed25519; pk=Qn8jZuOtR1m5GaiDfTrAoQ4NE1XoYVZ/wmt5YtXWFC4= X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758696535999401167?= X-GMAIL-MSGID: =?utf-8?q?1758696535999401167?= This makes things like concat_idents!(bindings::foo, bar) work. Otherwise, there is no way to concatenate two idents and then use the result as part of a type path. Signed-off-by: Asahi Lina Reviewed-by: Vincenzo Palazzo --- rust/macros/concat_idents.rs | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/rust/macros/concat_idents.rs b/rust/macros/concat_idents.rs index 6d955d65016e..d6614b900aa2 100644 --- a/rust/macros/concat_idents.rs +++ b/rust/macros/concat_idents.rs @@ -14,10 +14,28 @@ fn expect_ident(it: &mut token_stream::IntoIter) -> Ident { pub(crate) fn concat_idents(ts: TokenStream) -> TokenStream { let mut it = ts.into_iter(); - let a = expect_ident(&mut it); - assert_eq!(expect_punct(&mut it).as_char(), ','); + let mut out = TokenStream::new(); + let a = loop { + let ident = expect_ident(&mut it); + let punct = expect_punct(&mut it); + match punct.as_char() { + ',' => break ident, + ':' => { + let punct2 = expect_punct(&mut it); + assert_eq!(punct2.as_char(), ':'); + out.extend([ + TokenTree::Ident(ident), + TokenTree::Punct(punct), + TokenTree::Punct(punct2), + ]); + } + _ => panic!("Expected , or ::"), + } + }; + let b = expect_ident(&mut it); assert!(it.next().is_none(), "only two idents can be concatenated"); let res = Ident::new(&format!("{a}{b}"), b.span()); - TokenStream::from_iter([TokenTree::Ident(res)]) + out.extend([TokenTree::Ident(res)]); + out } From patchwork Fri Feb 24 07:25:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Asahi Lina X-Patchwork-Id: 61155 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp756379wrd; Thu, 23 Feb 2023 23:29:56 -0800 (PST) X-Google-Smtp-Source: AK7set/5N80cx+WFZxwlk5pCuAgPE7b0NW03lNEAjAzNDH23C4LbMrgCq3U61dqhl17UkVo0OoUT X-Received: by 2002:a17:907:3fa0:b0:8b1:2d7f:ed57 with SMTP id hr32-20020a1709073fa000b008b12d7fed57mr26826128ejc.42.1677223796296; Thu, 23 Feb 2023 23:29:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677223796; cv=none; d=google.com; s=arc-20160816; b=ARvM1FxwThYL2oUy9IY9qc2JikuwNlBL8b6R+VT8D9e//7pgMxaXJIDa/BxzmirwwP hSdJ/pojbay3NkgOQowId3h9d5BtpyhTgFOZz0XbvXPB3gPGCcnS1DjnqrvXR5XZA62X +5WpZtvYFewBUVeUgewlJIGAIEaumV5NkDF7j+6BRYHk1GzqJcKl3oY08ovpwIZ1UP4/ KGjrkqwvVaNUYf2hKhIVrPQZiFIv7GcHd3m91nJIfuospwN8UivY1dvvJRDVeB//TDdv XdIhBWuo01hofKSlZTzDSfIvNqV4eTxSc5bWRryRLCj9ffVvruryUGZZ0VanKz/zThhc M8/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=63p2gbjsOvxO45HePzifT4uBtNfXrYgoWVvMNk4r6oE=; b=NjIlJvX63P5AtlkMM/v4YfgoZEO+kt1XxluAp39WVpx0sw51ecCzFG9fDGDXu40E+G 3R+ajL7b+CXvayW9FvwYQdjFdl0x0i7KKyRVl38uZ1emUpgDwJ0hKkHZeTvJluSToZyO UQUwdV+xROnYdTeKwWh5Tr3h65r9YWm8U7GoLdlXday7LOYnaZiNdZr0EOmZKEcJHYme HzJcmy58ikflNzVLpItyssc8Gxx+kgRIy6gnGUvBFKndYj4qMtq34drp8BFF96I2bUXp etlOkmSa6Pmb1+n1WmG0ITuXhpEHIAt1cJ/3ONCoXWFZZd7QUiD5bqwRuuVoU+yv78mP gkrQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@asahilina.net header.s=default header.b=FlnTieWt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=asahilina.net Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id zz14-20020a170907350e00b008da033ef977si12162516ejb.731.2023.02.23.23.29.33; Thu, 23 Feb 2023 23:29:56 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@asahilina.net header.s=default header.b=FlnTieWt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=asahilina.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229772AbjBXH0r (ORCPT + 99 others); Fri, 24 Feb 2023 02:26:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38438 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229741AbjBXH0o (ORCPT ); Fri, 24 Feb 2023 02:26:44 -0500 Received: from mail.marcansoft.com (marcansoft.com [212.63.210.85]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2ED0660D7D; Thu, 23 Feb 2023 23:26:41 -0800 (PST) Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: linasend@asahilina.net) by mail.marcansoft.com (Postfix) with ESMTPSA id A781942646; Fri, 24 Feb 2023 07:26:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=asahilina.net; s=default; t=1677223599; bh=LygvIXyiu/pWUo+M29D8IFw41H4slbdizLqU4lX4T2Y=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=FlnTieWtFwDB2Egb6fecWNzL1KasB+mBiHi/xqG3N+bstoon07OXnAe/PKlSvsDCp mn1rEI3PFmvkhf/IBBrKl2ravZ5Mk5SOMaq4a6QCdeHrQ4bj9WnbiQvWFzSg0zkpha EOTB+B7Oq2/Ktv9b6NWctXZS/dYXyqCRM9L9o39a78eJq+uM5uTpjBuW+WDhcnQBwX lU1Xtr8oIDeb7kdyAbcfasMBbm+rQFBdsJxqe/3UengcVe7MTd8IWz4xOTnCu9kZRq xIHykA4PxZV+2p4Bct85fqB/ziKrXq0s984Jwozmnp1fNVXNhGTYH3HSOdXvJXz9m9 5Gh5nBesGyfbA== From: Asahi Lina Date: Fri, 24 Feb 2023 16:25:57 +0900 Subject: [PATCH 3/3] rust: macros: Allow specifying multiple module aliases MIME-Version: 1.0 Message-Id: <20230224-rust-macros-v1-3-b39fae46e102@asahilina.net> References: <20230224-rust-macros-v1-0-b39fae46e102@asahilina.net> In-Reply-To: <20230224-rust-macros-v1-0-b39fae46e102@asahilina.net> To: Miguel Ojeda , Alex Gaynor , Wedson Almeida Filho , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, asahi@lists.linux.dev, Asahi Lina , Finn Behrens , Sumera Priyadarsini X-Mailer: b4 0.12.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1677223586; l=4444; i=lina@asahilina.net; s=20230221; h=from:subject:message-id; bh=LygvIXyiu/pWUo+M29D8IFw41H4slbdizLqU4lX4T2Y=; b=Syyde+8G3IdOb1l5Hx23kaFhCkFCkne/rv2VEwIshnd/DIxBGVT1ObbDvME/Ed7EOoro55iXZ 2G92j/w/oASCzSebIE7DMXCXBRMBq46IiJPFgf1GYMxQSIh4hkT8fK7 X-Developer-Key: i=lina@asahilina.net; a=ed25519; pk=Qn8jZuOtR1m5GaiDfTrAoQ4NE1XoYVZ/wmt5YtXWFC4= X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758696619533527473?= X-GMAIL-MSGID: =?utf-8?q?1758696619533527473?= Modules can (and usually do) have multiple alias tags, in order to specify multiple possible device matches for autoloading. Allow this by changing the alias ModuleInfo field to an Option>. Note: For normal device IDs this is autogenerated by modpost (which is not properly integrated with Rust support yet), so it is useful to be able to manually add device match aliases for now, and should still be useful in the future for corner cases that modpost does not handle. This pulls in the expect_group() helper from the rfl/rust branch (with credit to authors). Co-developed-by: Miguel Ojeda Signed-off-by: Miguel Ojeda Co-developed-by: Finn Behrens Signed-off-by: Finn Behrens Co-developed-by: Sumera Priyadarsini Signed-off-by: Sumera Priyadarsini Signed-off-by: Asahi Lina Reviewed-by: Vincenzo Palazzo --- rust/macros/helpers.rs | 10 +++++++++- rust/macros/module.rs | 30 +++++++++++++++++++++++++----- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/rust/macros/helpers.rs b/rust/macros/helpers.rs index 65706ecc007e..15bf0c892421 100644 --- a/rust/macros/helpers.rs +++ b/rust/macros/helpers.rs @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 -use proc_macro::{token_stream, Punct, TokenTree}; +use proc_macro::{token_stream, Group, Punct, TokenTree}; pub(crate) fn try_ident(it: &mut token_stream::IntoIter) -> Option { if let Some(TokenTree::Ident(ident)) = it.next() { @@ -56,6 +56,14 @@ pub(crate) fn expect_string_ascii(it: &mut token_stream::IntoIter) -> String { string } +pub(crate) fn expect_group(it: &mut token_stream::IntoIter) -> Group { + if let TokenTree::Group(group) = it.next().expect("Reached end of token stream for Group") { + group + } else { + panic!("Expected Group"); + } +} + pub(crate) fn expect_end(it: &mut token_stream::IntoIter) { if it.next().is_some() { panic!("Expected end"); diff --git a/rust/macros/module.rs b/rust/macros/module.rs index 07503b242d2d..92cb35c235e1 100644 --- a/rust/macros/module.rs +++ b/rust/macros/module.rs @@ -1,9 +1,27 @@ // SPDX-License-Identifier: GPL-2.0 use crate::helpers::*; -use proc_macro::{token_stream, Literal, TokenStream, TokenTree}; +use proc_macro::{token_stream, Delimiter, Literal, TokenStream, TokenTree}; use std::fmt::Write; +fn expect_string_array(it: &mut token_stream::IntoIter) -> Vec { + let group = expect_group(it); + assert_eq!(group.delimiter(), Delimiter::Bracket); + let mut values = Vec::new(); + let mut it = group.stream().into_iter(); + + while let Some(val) = try_string(&mut it) { + assert!(val.is_ascii(), "Expected ASCII string"); + values.push(val); + match it.next() { + Some(TokenTree::Punct(punct)) => assert_eq!(punct.as_char(), ','), + None => break, + _ => panic!("Expected ',' or end of array"), + } + } + values +} + struct ModInfoBuilder<'a> { module: &'a str, counter: usize, @@ -78,7 +96,7 @@ struct ModuleInfo { name: String, author: Option, description: Option, - alias: Option, + alias: Option>, } impl ModuleInfo { @@ -112,7 +130,7 @@ impl ModuleInfo { "author" => info.author = Some(expect_string(it)), "description" => info.description = Some(expect_string(it)), "license" => info.license = expect_string_ascii(it), - "alias" => info.alias = Some(expect_string_ascii(it)), + "alias" => info.alias = Some(expect_string_array(it)), _ => panic!( "Unknown key \"{}\". Valid keys are: {:?}.", key, EXPECTED_KEYS @@ -163,8 +181,10 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream { modinfo.emit("description", &description); } modinfo.emit("license", &info.license); - if let Some(alias) = info.alias { - modinfo.emit("alias", &alias); + if let Some(aliases) = info.alias { + for alias in aliases { + modinfo.emit("alias", &alias); + } } // Built-in modules also export the `file` modinfo string.