Skip to content

Commit

Permalink
Transparently support Inline::Perl5
Browse files Browse the repository at this point in the history
This allows most of the S01-perl-5-integration spec tests to pass
if Inline::Perl5 is installed.
  • Loading branch information
niner committed Apr 16, 2015
1 parent 67df04e commit 5eff25a
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/Perl6/ModuleLoader.nqp
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ class Perl6::ModuleLoader does Perl6::ModuleLoaderVMConfig {
'NQP', nqp::gethllsym('nqp', 'ModuleLoader'),
);

method register_language_module_loader($lang, $loader) {
method register_language_module_loader($lang, $loader, :$force) {
nqp::die("Language loader already registered for $lang")
if nqp::existskey(%language_module_loaders, $lang);
if ! $force && nqp::existskey(%language_module_loaders, $lang);
%language_module_loaders{$lang} := $loader;
}

Expand Down
16 changes: 16 additions & 0 deletions src/Perl6/World.nqp
Original file line number Diff line number Diff line change
Expand Up @@ -3159,4 +3159,20 @@ class Perl6::World is HLL::World {
}
}

my class Perl5ModuleLoaderStub {
method load_module($module_name, %opts, *@GLOBALish, :$line, :$file) {
{
nqp::gethllsym('perl6', 'ModuleLoader').load_module('Inline::Perl5', {}, @GLOBALish, :$line, :$file);
CATCH {
nqp::die("Please install Inline::Perl5 for Perl 5 support");
}
}

# Inline::Perl5 has overwritten this module loader at this point
return Perl6::ModuleLoader.load_module($module_name, %opts, @GLOBALish, :$line, :$file);
}
}

nqp::gethllsym('perl6', 'ModuleLoader').register_language_module_loader('Perl5', Perl5ModuleLoaderStub);

# vim: ft=perl6 expandtab sw=4
15 changes: 15 additions & 0 deletions src/core/control.pm
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,21 @@ multi sub warn(*@msg) is hidden-from-backtrace {
}

proto sub EVAL($, *%) {*}
multi sub EVAL(Cool $code, Str :$lang where { ($lang // '') eq 'perl5' }, PseudoStash :$context) {
my $eval_ctx := nqp::getattr(nqp::decont($context // CALLER::), PseudoStash, '$!ctx');
my $?FILES := 'EVAL_' ~ (state $no)++;
state $p5;
unless $p5 {
{
require Inline::Perl5;
CATCH {
X::Eval::NoSuchLang.new(:$lang).throw;
}
}
$p5 = ::("Inline::Perl5").default_perl5;
}
$p5.run($code);
}
multi sub EVAL(Cool $code, :$lang = 'perl6', PseudoStash :$context) {
my $eval_ctx := nqp::getattr(nqp::decont($context // CALLER::), PseudoStash, '$!ctx');
my $?FILES := 'EVAL_' ~ (state $no)++;
Expand Down

0 comments on commit 5eff25a

Please sign in to comment.