From fc09bc675fbd9231c204a301c76038b6edb2893f Mon Sep 17 00:00:00 2001 From: Vadim Belman Date: Tue, 6 Aug 2019 20:49:09 -0400 Subject: [PATCH] Use compiler language version as default when CORE is being compiled Metamodel::Versioning would set `ver` from compiler's `language_version` method if value is not provided. This would be done only if a `CORE` is being compiled at the time. This would set all versionized objects version to the version of the core they're defined in. `t/02-rakudo/14-revisions.t` provides an example. rakudo/rakudo#3107 --- src/Perl6/Metamodel/ClassHOW.nqp | 2 +- src/Perl6/Metamodel/ConcreteRoleHOW.nqp | 2 +- src/Perl6/Metamodel/ModuleHOW.nqp | 2 +- src/Perl6/Metamodel/NativeHOW.nqp | 2 +- src/Perl6/Metamodel/NativeRefHOW.nqp | 2 +- src/Perl6/Metamodel/ParametricRoleHOW.nqp | 2 +- src/Perl6/Metamodel/Versioning.nqp | 7 ++++++- t/02-rakudo/14-revisions.t | 9 ++++++++- 8 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/Perl6/Metamodel/ClassHOW.nqp b/src/Perl6/Metamodel/ClassHOW.nqp index 3eeb2c5d93b..a57bdead0c8 100644 --- a/src/Perl6/Metamodel/ClassHOW.nqp +++ b/src/Perl6/Metamodel/ClassHOW.nqp @@ -52,7 +52,7 @@ class Perl6::Metamodel::ClassHOW my $obj := nqp::settypehll($new_type, 'perl6'); $metaclass.set_name($obj, $name // ""); self.add_stash($obj); - $metaclass.set_ver($obj, $ver) if $ver; + $metaclass.set_ver($obj, $ver); $metaclass.set_auth($obj, $auth) if $auth; $metaclass.set_api($obj, $api) if $api; $metaclass.setup_mixin_cache($obj); diff --git a/src/Perl6/Metamodel/ConcreteRoleHOW.nqp b/src/Perl6/Metamodel/ConcreteRoleHOW.nqp index d72f7542baa..cf06dc8fcd9 100644 --- a/src/Perl6/Metamodel/ConcreteRoleHOW.nqp +++ b/src/Perl6/Metamodel/ConcreteRoleHOW.nqp @@ -47,7 +47,7 @@ class Perl6::Metamodel::ConcreteRoleHOW my $metarole := self.new(:roles(@roles)); my $obj := nqp::settypehll(nqp::newtype($metarole, 'Uninstantiable'), 'perl6'); $metarole.set_name($obj, $name); - $metarole.set_ver($obj, $ver) if $ver; + $metarole.set_ver($obj, $ver); $metarole.set_auth($obj, $auth) if $auth; $metarole.set_api($obj, $api) if $api; $obj; diff --git a/src/Perl6/Metamodel/ModuleHOW.nqp b/src/Perl6/Metamodel/ModuleHOW.nqp index 3dcec9c4930..4e08f7b535f 100644 --- a/src/Perl6/Metamodel/ModuleHOW.nqp +++ b/src/Perl6/Metamodel/ModuleHOW.nqp @@ -22,7 +22,7 @@ class Perl6::Metamodel::ModuleHOW my $metaclass := self.new(); my $obj := nqp::settypehll(nqp::newtype($metaclass, 'Uninstantiable'), 'perl6'); $metaclass.set_name($obj, $name); - $metaclass.set_ver($obj, $ver) if $ver; + $metaclass.set_ver($obj, $ver); $metaclass.set_auth($obj, $auth) if $auth; $metaclass.set_api($obj, $api) if $api; self.add_stash($obj); diff --git a/src/Perl6/Metamodel/NativeHOW.nqp b/src/Perl6/Metamodel/NativeHOW.nqp index 5bc7e507367..86a33bad732 100644 --- a/src/Perl6/Metamodel/NativeHOW.nqp +++ b/src/Perl6/Metamodel/NativeHOW.nqp @@ -25,7 +25,7 @@ class Perl6::Metamodel::NativeHOW my $metaclass := self.new(); my $obj := nqp::settypehll(nqp::newtype($metaclass, $repr), 'perl6'); $metaclass.set_name($obj, $name); - $metaclass.set_ver($obj, $ver) if $ver; + $metaclass.set_ver($obj, $ver); $metaclass.set_auth($obj, $auth) if $auth; $metaclass.set_api($obj, $api) if $api; self.add_stash($obj); diff --git a/src/Perl6/Metamodel/NativeRefHOW.nqp b/src/Perl6/Metamodel/NativeRefHOW.nqp index 384022be573..8d83382c611 100644 --- a/src/Perl6/Metamodel/NativeRefHOW.nqp +++ b/src/Perl6/Metamodel/NativeRefHOW.nqp @@ -26,7 +26,7 @@ class Perl6::Metamodel::NativeRefHOW my $metaclass := self.new(); my $obj := nqp::settypehll(nqp::newtype($metaclass, 'NativeRef'), 'perl6'); $metaclass.set_name($obj, $name); - $metaclass.set_ver($obj, $ver) if $ver; + $metaclass.set_ver($obj, $ver); $metaclass.set_auth($obj, $auth) if $auth; $metaclass.set_api($obj, $api) if $api; self.add_stash($obj); diff --git a/src/Perl6/Metamodel/ParametricRoleHOW.nqp b/src/Perl6/Metamodel/ParametricRoleHOW.nqp index 6036fc53da2..dcb2e0f9fe3 100644 --- a/src/Perl6/Metamodel/ParametricRoleHOW.nqp +++ b/src/Perl6/Metamodel/ParametricRoleHOW.nqp @@ -37,7 +37,7 @@ class Perl6::Metamodel::ParametricRoleHOW my $metarole := self.new(:signatured($signatured), :specialize_lock(NQPLock.new)); my $type := nqp::settypehll(nqp::newtype($metarole, 'Uninstantiable'), 'perl6'); $metarole.set_name($type, $name // ""); - $metarole.set_ver($type, $ver) if $ver; + $metarole.set_ver($type, $ver); $metarole.set_auth($type, $auth) if $auth; $metarole.set_api($type, $api) if $api; $metarole.set_pun_repr($type, $repr) if $repr; diff --git a/src/Perl6/Metamodel/Versioning.nqp b/src/Perl6/Metamodel/Versioning.nqp index 501252e798b..d8c848b560e 100644 --- a/src/Perl6/Metamodel/Versioning.nqp +++ b/src/Perl6/Metamodel/Versioning.nqp @@ -7,7 +7,12 @@ role Perl6::Metamodel::Versioning { method auth($obj) { $!auth // '' } method api($obj) { $!api // '' } - method set_ver($obj, $ver) { $!ver := $ver } + method set_ver($obj, $ver) { + if $*COMPILING_CORE_SETTING && !$ver { + $ver := nqp::getcomp('perl6').language_version; + } + $!ver := $ver if $ver + } method set_auth($obj, $auth) { $!auth := $auth } method set_api($obj, $api) { $!api := $api } } diff --git a/t/02-rakudo/14-revisions.t b/t/02-rakudo/14-revisions.t index 83d11058df0..698ff6ca317 100644 --- a/t/02-rakudo/14-revisions.t +++ b/t/02-rakudo/14-revisions.t @@ -2,7 +2,7 @@ use lib ; use Test; use Test::Helpers; -plan 2; +plan 3; subtest "CORE.setting Revision", { plan 3; @@ -21,4 +21,11 @@ subtest "Modifiers", { is-run q[use v6.d.NOMOD; print CORE-SETTING-REV], "Deprecated modifier generates a warning", :exitcode(1), :err(rx:s/No compiler available for Perl v6'.'d'.'NOMOD/); } +subtest "Class Version", { + plan 3; + is-run qq[use v6.c; print PseudoStash.^ver], "6.c class version", :exitcode(0), :out<6.c>; + is-run qq[use v6.d; print PseudoStash.^ver], "6.c class version on 6.d compiler", :exitcode(0), :out<6.c>; + is-run qq[use v6.e.PREVIEW; print PseudoStash.^ver], "6.e class version", :exitcode(0), :out<6.e>; +} + done-testing;