From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7905) id D75FA3858420; Tue, 30 Jan 2024 12:00:01 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D75FA3858420 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1706616001; bh=L70xyA0w35whQuW10akK/qo2RI822AsVgHBCDpRRd1o=; h=From:To:Subject:Date:From; b=MVV17PmMaDlYADTaFNdIPD0ie5SRbp/kGXCFMx2Yl61xQDsx76wmmyGorZLNsUm3I wvAiJRVX6ed47CFHGTuLwKp4x0C8UDiqkyXJsODW7GTbbD7L/snI/lDMZKPitc2EJh Og3jfTWpcf3vekWIRRXuF9CTiKeN5kSWDWF56ktk= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Arthur Cohen To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-8562] gccrs: late: Start storing mappings properly in the resolver X-Act-Checkin: gcc X-Git-Author: Arthur Cohen X-Git-Refname: refs/heads/trunk X-Git-Oldrev: df6eadda5ef181525fc013e7ded9ca0761929c2e X-Git-Newrev: 0f0ec052b4ad1fb7250a5ad1ec00d276fdc29a09 Message-Id: <20240130120001.D75FA3858420@sourceware.org> Date: Tue, 30 Jan 2024 12:00:01 +0000 (GMT) List-Id: https://gcc.gnu.org/g:0f0ec052b4ad1fb7250a5ad1ec00d276fdc29a09 commit r14-8562-g0f0ec052b4ad1fb7250a5ad1ec00d276fdc29a09 Author: Arthur Cohen Date: Tue Aug 22 17:29:05 2023 +0200 gccrs: late: Start storing mappings properly in the resolver gcc/rust/ChangeLog: * resolve/rust-late-name-resolver-2.0.cc (Late::visit): Store mappings after having resolved them. * resolve/rust-late-name-resolver-2.0.h: Add `TypePath` visitor. Diff: --- gcc/rust/resolve/rust-late-name-resolver-2.0.cc | 33 +++++++++++++++++++++---- gcc/rust/resolve/rust-late-name-resolver-2.0.h | 1 + 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc index 3236886f37d4..5f70f5755824 100644 --- a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc @@ -20,6 +20,7 @@ #include "rust-ast-full.h" #include "rust-late-name-resolver-2.0.h" #include "rust-default-resolver.h" +#include "rust-path.h" #include "rust-tyty.h" #include "rust-hir-type-check.h" @@ -121,11 +122,24 @@ Late::visit (AST::IdentifierExpr &expr) { // TODO: same thing as visit(PathInExpression) here? + tl::optional resolved = tl::nullopt; auto label = ctx.labels.get (expr.get_ident ()); auto value = ctx.values.get (expr.get_ident ()); - rust_debug ("[ARTHUR] label: %d", label ? *label : -1); - rust_debug ("[ARTHUR] value: %d", value ? *value : -1); + if (label) + resolved = label; + else if (value) + resolved = value; + // TODO: else emit error? + + ctx.map_usage (expr.get_node_id (), *resolved); + + // in the old resolver, resolutions are kept in the resolver, not the mappings + // :/ how do we deal with that? + // ctx.mappings.insert_resolved_name(expr, resolved); + + // For empty types, do we perform a lookup in ctx.types or should the + // toplevel instead insert a name in ctx.values? (like it currently does) } void @@ -136,11 +150,20 @@ Late::visit (AST::PathInExpression &expr) // do we emit it in `get`? auto label = ctx.labels.resolve_path (expr.get_segments ()); - auto value = ctx.values.resolve_path (expr.get_segments ()); +} + +void +Late::visit (AST::TypePath &type) +{ + // should we add type path resolution in `ForeverStack` directly? Since it's + // quite more complicated. + // maybe we can overload `resolve_path` to only do + // typepath-like path resolution? that sounds good + + auto resolved = ctx.types.get (type.get_segments ().back ()->as_string ()); - rust_debug ("[ARTHUR] label: %d", label ? *label : -1); - rust_debug ("[ARTHUR] value: %d", value ? *value : -1); + ctx.map_usage (type.get_node_id (), *resolved); } } // namespace Resolver2_0 diff --git a/gcc/rust/resolve/rust-late-name-resolver-2.0.h b/gcc/rust/resolve/rust-late-name-resolver-2.0.h index f54bbf2eea4f..15940d053aed 100644 --- a/gcc/rust/resolve/rust-late-name-resolver-2.0.h +++ b/gcc/rust/resolve/rust-late-name-resolver-2.0.h @@ -45,6 +45,7 @@ public: // resolutions void visit (AST::IdentifierExpr &) override; void visit (AST::PathInExpression &) override; + void visit (AST::TypePath &) override; private: /* Setup Rust's builtin types (u8, i32, !...) in the resolver */