From patchwork Thu Aug 1 14:56:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 94961 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CBA333858C39 for ; Thu, 1 Aug 2024 15:06:28 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by sourceware.org (Postfix) with ESMTPS id 9EA08385DDE7 for ; Thu, 1 Aug 2024 14:58:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9EA08385DDE7 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 9EA08385DDE7 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::533 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1722524336; cv=none; b=iFnBL+m2lBmXQJbTJdXYCa88Po4e+nzb03ylBSqYI7KTaOCnuAHHb2UKLRNz5wVXx/4kBWQ6SwpC597SasZUufo4I2Nvl5BZo1L77ylCyu89UzKBqH1dspC8bNsW/Cs+Wml2y4+EYSWMSNZHh1pjWSpG8a1gNXf69yjQr0S7wnk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1722524336; c=relaxed/simple; bh=3ll1D0V88GUtrEd5IldK47ppJgNg6eB0MELH5MEptAk=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=kbkHd90q4esjsysBybO0xfLOYPHTuW0VyB4/VycF30Mr/WX2yt6fIDO01Cka95uYndeVK83uMIcHjNkpym6/sUl28B/SSXxT1GYOCsDify7mb7JHQrZD9X8MFE032e3xeXI643waJshH/IwroDrbeuqmrfVXaglykUEi7h1H6NE= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-ed1-x533.google.com with SMTP id 4fb4d7f45d1cf-595856e2336so3666590a12.1 for ; Thu, 01 Aug 2024 07:58:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1722524323; x=1723129123; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nU8h4gC0KqLJvz9FtrmIHP+2Plho1UQfj9mEOFXWpyY=; b=Ffc2E4l1ZxcIImaVhVx+/8cNNguR9Im4kflmkSYJXjOdikWuePCXrS7OtRX2fHKISS pN06lnTFqcOf3+Miq5CTTkBccBjm+u5Ibuihlc6zgF+SEZIT9JtlG5QcOpi895MHJXsK 7UY6L3OXqHKEb4SLPXHbaGIBCSAW0F68zE+jp+Kk6mpGHnkG1Th6xnN3LWybGdQPsZfC z/AuK2Lk11cd7KXr7Lil7tnXt/kflKB0uGxiKA7SyZnkuVUINFzzI1Yhq1BsgwqRvgIb fvvtUSLlXDH/4sHu5Vo5pCO4pg0qzOFp7S4ZYFY/ty2SCSt7BGI+wDo5CycmsahUcdVw IcQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722524323; x=1723129123; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nU8h4gC0KqLJvz9FtrmIHP+2Plho1UQfj9mEOFXWpyY=; b=heErfS/4PY7yFNa4s586WWeeeuNXFamkDDHLed3CVXioUaPerKQywikWDEDDSroA0T yT9ve7ZwBEd4dL+AtiV/XRTlFBoPGjfnOqAnIbu9XK7i9k4P1x9dJyfhcyC5gu45eaFV Ru81cIXDP2sCrxJr09BLhyHWZe07ENaETUI/XoQ8FnpBEGaQSswvIfEbsp2u8VFc3/Ar U/zBvWQWDgCrlPL5SGBmFChJOZ0FDIb7mPU26QWSakkZ9O8nF1523oS9GiX4EdyaQc5h 48N5JbZAYXSfBe84NZMihYdwyr8FUOGDAOr5jlgOB3OmblRvlP+1QK/UaUW6L7rgT53L Nufg== X-Gm-Message-State: AOJu0Yxzlya/P7dxW7BeNBnMlpjmjo6C3vjw2d/kPjuvWvvag6mIiatY EMafpm4IbbZdvtjCCokTrb9RqjCXNaH0zOiSnvSyPMpTm4pt9IVNwmqK2RqodUxt4zkMqOWgti0 pkTRw X-Google-Smtp-Source: AGHT+IEazznTRp6IwzlmBT8P+Eg9ow+dXO7LA7y+aSxZCBSGck15V+VqU2H4banHBzwLz0OA7LdwLg== X-Received: by 2002:a05:6402:13c9:b0:57d:6bb:d264 with SMTP id 4fb4d7f45d1cf-5b77bbb1374mr1601288a12.1.1722524323067; Thu, 01 Aug 2024 07:58:43 -0700 (PDT) Received: from platypus.lan ([2a04:cec2:9:dc84:3622:6733:ff49:ee91]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5ac63590592sm10252456a12.25.2024.08.01.07.58.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Aug 2024 07:58:42 -0700 (PDT) From: Arthur Cohen To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Arthur Cohen Subject: [PATCH 016/125] gccrs: format_args: Parse entire token invocation Date: Thu, 1 Aug 2024 16:56:12 +0200 Message-ID: <20240801145809.366388-18-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240801145809.366388-2-arthur.cohen@embecosm.com> References: <20240801145809.366388-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org gcc/rust/ChangeLog: * expand/rust-macro-builtins.cc (MacroBuiltin::format_args_handler): Transform entire invocation token stream into string for the parser. --- gcc/rust/expand/rust-macro-builtins.cc | 40 ++++++++++++++------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/gcc/rust/expand/rust-macro-builtins.cc b/gcc/rust/expand/rust-macro-builtins.cc index 19ea9109453..2af05a5e377 100644 --- a/gcc/rust/expand/rust-macro-builtins.cc +++ b/gcc/rust/expand/rust-macro-builtins.cc @@ -16,6 +16,8 @@ // along with GCC; see the file COPYING3. If not see // . +#include "libproc_macro_internal/tokenstream.h" +#include "rust-token-converter.h" #include "rust-system.h" #include "rust-macro-builtins.h" #include "rust-ast-fragment.h" @@ -947,24 +949,26 @@ tl::optional MacroBuiltin::format_args_handler (location_t invoc_locus, AST::MacroInvocData &invoc) { - auto fmt_expr - = parse_single_string_literal (BuiltinMacro::FormatArgs, - invoc.get_delim_tok_tree (), invoc_locus, - invoc.get_expander ()); - - if (!fmt_expr) - return AST::Fragment::create_error (); - - // if it is not a literal, it's an eager macro invocation - return it - if (!fmt_expr->is_literal ()) - { - auto token_tree = invoc.get_delim_tok_tree (); - return AST::Fragment ({AST::SingleASTNode (std::move (fmt_expr))}, - token_tree.to_token_stream ()); - } - - auto format_string = fmt_expr->as_string (); - auto pieces = Fmt::Pieces::collect (format_string); + auto tokens = invoc.get_delim_tok_tree ().to_token_stream (); + tokens.erase (tokens.begin ()); + tokens.pop_back (); + + std::stringstream stream; + for (const auto &tok : tokens) + stream << tok->as_string () << ' '; + + rust_debug ("[ARTHU]: `%s`", stream.str ().c_str ()); + + // FIXME: We need to handle this + // // if it is not a literal, it's an eager macro invocation - return it + // if (!fmt_expr->is_literal ()) + // { + // auto token_tree = invoc.get_delim_tok_tree (); + // return AST::Fragment ({AST::SingleASTNode (std::move (fmt_expr))}, + // token_tree.to_token_stream ()); + // } + + auto pieces = Fmt::Pieces::collect (stream.str ()); return AST::Fragment::create_empty (); }