From ace85325e4071aaf86a561062be128fc30935d32 Mon Sep 17 00:00:00 2001 From: Jonathan Worthington Date: Mon, 5 Jun 2023 14:01:16 +0200 Subject: [PATCH] Start getting types resolving at parse time For now they also resolve via the legacy resolve-with. --- src/Raku/ast/code.rakumod | 8 ++++---- src/Raku/ast/type.rakumod | 8 ++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Raku/ast/code.rakumod b/src/Raku/ast/code.rakumod index dffdbc83a98..87e59a1a5db 100644 --- a/src/Raku/ast/code.rakumod +++ b/src/Raku/ast/code.rakumod @@ -1421,9 +1421,9 @@ class RakuAST::Routine # Make sure that our signature has resolutions performed. if $!signature { $!signature.set-default-type( - RakuAST::Type::Simple.new( + RakuAST::Type::Setting.new( RakuAST::Name.from-identifier('Any'), - ), + ).to-begin-time($resolver, $context) ); $!signature.IMPL-ENSURE-IMPLICITS; $!signature.IMPL-CHECK($resolver, $context, True); @@ -1776,9 +1776,9 @@ class RakuAST::Methodish my $signature := self.signature; if $signature { $signature.set-default-type( - RakuAST::Type::Simple.new( + RakuAST::Type::Setting.new( RakuAST::Name.from-identifier('Any'), - ), + ).to-begin-time($resolver, $context) ); $signature.set-is-on-method(True); $signature.set-is-on-named-method(True) if self.name; diff --git a/src/Raku/ast/type.rakumod b/src/Raku/ast/type.rakumod index 893e137d75f..9a317182218 100644 --- a/src/Raku/ast/type.rakumod +++ b/src/Raku/ast/type.rakumod @@ -40,6 +40,7 @@ class RakuAST::Type # A simple type name, e.g. Int, Foo::Bar, etc. class RakuAST::Type::Simple is RakuAST::Type + is RakuAST::ParseTime is RakuAST::Lookup { has RakuAST::Name $.name; @@ -58,6 +59,13 @@ class RakuAST::Type::Simple Nil } + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { + my $resolved := $resolver.resolve-name-constant-in-setting(self.name); + if $resolved { + self.set-resolution($resolved); + } + } + method PRODUCE-META-OBJECT() { self.resolution.compile-time-value }