Skip to content

Commit

Permalink
Clean out terms.pm
Browse files Browse the repository at this point in the history
Basically, move code for %*ENV, @*INC, $*ARGFILES into separate file (as I
feel these may become require a class of their own in the future).  Move
other PROCESS::<*> variables into a separate file.  Adjust Makefiles
accordingly.  This should make it easier to adapt things in the future.
  • Loading branch information
lizmat committed May 26, 2014
1 parent 501a702 commit 8518112
Show file tree
Hide file tree
Showing 11 changed files with 287 additions and 189 deletions.
7 changes: 7 additions & 0 deletions src/core/Argfiles.pm
@@ -0,0 +1,7 @@
{
my @ARGS;
my Mu $argiter := nqp::getcurhllsym('$!ARGITER');
@ARGS.push(nqp::p6box_s(nqp::shift($argiter))) while $argiter;
nqp::bindkey(nqp::who(PROCESS), '@ARGS', @ARGS);
PROCESS::<$ARGFILES> = IO::ArgFiles.new(:args(@ARGS));
}
35 changes: 30 additions & 5 deletions src/core/Distro.pm
Expand Up @@ -28,8 +28,33 @@ class Distro does Systemic{
}
}

PROCESS::<$DISTRO> = Distro.new( :name($*OS), :version($*OSVER) );
$*OS = Deprecation.obsolete(
:name('$*OS'), :value($*OS), :instead('$*DISTRO.name') );
$*OSVER = Deprecation.obsolete(
:name('$*OSVER'), :value($*OSVER), :instead('$*DISTRO.version') );
{
my $name =
#?if jvm
$*VM.properties<os.name>;
#?endif
#?if !jvm
$*VM.config<osname>;
#?endif

my $version =
#?if jvm
$*VM.properties<os.version>;
#?endif
#?if !jvm
$*VM.config<osvers>;
#?endif

# set up $*DISTRO and deprecated $*OS and $*OSVER
nqp::bindkey(nqp::who(PROCESS), '$DISTRO', Distro.new( :$name, :$version ));
nqp::bindkey(nqp::who(PROCESS), '$OS', Deprecation.obsolete(
:name('$*OS'),
:value($name),
:instead('$*DISTRO.name'),
) );
nqp::bindkey(nqp::who(PROCESS), '$OSVER', Deprecation.obsolete(
:name('$*OSVER'),
:value($version),
:instead('$*DISTRO.version'),
) );
}
13 changes: 13 additions & 0 deletions src/core/Env.pm
@@ -0,0 +1,13 @@
{
my %ENV;
my Mu $env := nqp::getenvhash();
my Mu $enviter := nqp::iterator($env);
my $envelem;
my $key;
while $enviter {
$envelem := nqp::shift($enviter);
$key = nqp::p6box_s(nqp::iterkey_s($envelem));
%ENV{$key} = nqp::p6box_s(nqp::iterval($envelem));
}
PROCESS::<%ENV> := %ENV;
}
58 changes: 58 additions & 0 deletions src/core/Inc.pm
@@ -0,0 +1,58 @@
{
my @INC;
#?if jvm
my $pathsep := $*VM.properties<path.separator>;
#?endif
#?if !jvm
my $pathsep := $*VM.config<osname> eq 'MSWin32' ?? ';' !! ':';
#?endif
@INC.push(%*ENV<RAKUDOLIB>.split($pathsep)) if %*ENV<RAKUDOLIB>;
@INC.push(%*ENV<PERL6LIB>.split($pathsep)) if %*ENV<PERL6LIB>;

#?if jvm
for nqp::jvmclasspaths() -> $path {
@INC.push($path) if nqp::stat($path, nqp::const::STAT_ISDIR);
}
#?endif

my $prefix :=
#?if jvm
$*VM.properties<perl6.prefix>
#?endif
#?if parrot
$*VM.config<libdir> ~ $*VM.config<versiondir>
#?endif
#?if moar
$*VM.config<prefix>
#?endif
~ '/languages/perl6';

# XXX Various issues with this stuff on JVM
my Mu $compiler := nqp::getcurhllsym('$COMPILER_CONFIG'); # TEMPORARY
my %CUSTOM_LIB;
try {
my $home := %*ENV<HOME> // %*ENV<HOMEDRIVE> ~ %*ENV<HOMEPATH>;
my $ver := nqp::p6box_s(nqp::atkey($compiler, 'version'));
%CUSTOM_LIB<home> = "$home/.perl6/$ver";
@INC.push(%CUSTOM_LIB<home> ~ '/lib');
}
%CUSTOM_LIB<perl> = $prefix;
%CUSTOM_LIB<vendor> = $prefix ~ '/vendor';
%CUSTOM_LIB<site> = $prefix ~ '/site';
@INC.push(%CUSTOM_LIB<site> ~ '/lib');
@INC.push(%CUSTOM_LIB<vendor> ~ '/lib');
@INC.push(%CUSTOM_LIB<perl> ~ '/lib');
PROCESS::<%CUSTOM_LIB> := %CUSTOM_LIB;

my $I := nqp::atkey(nqp::atkey(%*COMPILING, '%?OPTIONS'), 'I');
if nqp::defined($I) {
if nqp::islist($I) {
my Mu $iter := nqp::iterator($I);
@INC.unshift: nqp::p6box_s(nqp::shift($iter)) while $iter;
}
else {
@INC.unshift: nqp::p6box_s($I);
}
}
PROCESS::<@INC> := @INC;
}
2 changes: 1 addition & 1 deletion src/core/Kernel.pm
Expand Up @@ -85,4 +85,4 @@ class Kernel does Systemic {
#?endif
}

PROCESS::<$KERNEL> = Kernel.new;
nqp::bindkey(nqp::who(PROCESS), '$KERNEL', Kernel.new);
39 changes: 39 additions & 0 deletions src/core/Process.pm
@@ -0,0 +1,39 @@
{
## duplicate src/core/IO.pm::cwd
my $CWD = IO::Path.new(nqp::p6box_s(
#?if parrot
pir::trans_encoding__Ssi(
nqp::cwd(),
pir::find_encoding__Is('utf8'))
#?endif
#?if !parrot
nqp::cwd(),
#?endif
));
PROCESS::<$CWD> = $CWD;

my $PID = nqp::p6box_i(nqp::getpid());
PROCESS::<$PID> = $PID;

my $EXECUTABLE =
#?if parrot
nqp::p6box_s(pir::interpinfo__Si(pir::const::INTERPINFO_EXECUTABLE_FULLNAME));
#?endif
#?if jvm
$*VM.properties<perl6.execname>
or $*VM.properties<perl6.prefix> ~ '/bin/perl6-j';
#?endif
#?if moar
nqp::execname()
or ($*VM.config<prefix> ~ '/bin/' ~ ($*VM.config<osname> eq 'MSWin32' ?? 'perl6-m.bat' !! 'perl6-m'));
#?endif
$EXECUTABLE := $EXECUTABLE.path.absolute;
PROCESS::<$EXECUTABLE> = $EXECUTABLE;
PROCESS::<$EXECUTABLE_NAME> = $EXECUTABLE.basename;

my Mu $comp := nqp::getcomp('perl6');
my $PROGRAM_NAME = $comp.user-progname();
PROCESS::<$PROGRAM_NAME> = $PROGRAM_NAME;

PROCESS::<$TMPDIR> = IO::Spec.tmpdir().path;
}
119 changes: 117 additions & 2 deletions src/core/VM.pm
@@ -1,9 +1,18 @@
class VM does Systemic {
has $.config;
#?if jvm
has $.properties;
#?endif
has $.precomp-ext;
has $.precomp-target;

submethod BUILD (:$!name, :$!config) {
submethod BUILD (
:$!name,
:$!config,
#?if jvm
:$!properties,
#?endif
) {
$!auth = "unknown";
$!version = Version.new($!config<version> // "unknown");
$!precomp-ext =
Expand Down Expand Up @@ -41,4 +50,110 @@ multi postcircumfix:<{ }> (VM $d, "config" ) {
DEPRECATED('$*VM.config', :what('$*VM<config>') );
$d.config
}
PROCESS::<$VM> = VM.new( :name($*VM<name>), :config($*VM<config>) );
#?if jvm
multi postcircumfix:<{ }> (VM $d, "properties" ) {
DEPRECATED('$*VM.properties', :what('$*VM<properties>') );
$d.properties
}
#?endif

{
my $name = # XXX: should be made dynamical
#?if parrot
'parrot';
#?endif
#?if jvm
'jvm';
#?endif
#?if moar
'moar';
#?endif

my $config :=
#?if parrot
nqp::hllize(nqp::atpos(pir::getinterp__P,pir::const::IGLOBALS_CONFIG_HASH));
#?endif
#?if jvm
do {
my %CONFIG;
my $jenv := nqp::backendconfig();
my Mu $enviter := nqp::iterator($jenv);
my $envelem;
my $key;
while $enviter {
$envelem := nqp::shift($enviter);
$key = nqp::p6box_s(nqp::iterkey_s($envelem));
%CONFIG{$key} = nqp::p6box_s(nqp::iterval($envelem));
}
%CONFIG;
};
#?endif
#?if moar
nqp::backendconfig;
#?endif

#?if jvm
my $properties = do {
my %PROPS;
my $jenv := nqp::jvmgetproperties();
my Mu $enviter := nqp::iterator($jenv);
my $envelem;
my $key;
while $enviter {
$envelem := nqp::shift($enviter);
$key = nqp::p6box_s(nqp::iterkey_s($envelem));
%PROPS{$key} = nqp::p6box_s(nqp::iterval($envelem));
}
%PROPS;
};
#?endif

PROCESS::<$VM> = VM.new(
:$name,
:$config,
#?if jvm
:$properties,
#?endif
);
}

{
## duplicate src/core/IO.pm::cwd
my $CWD = IO::Path.new(nqp::p6box_s(
#?if parrot
pir::trans_encoding__Ssi(
nqp::cwd(),
pir::find_encoding__Is('utf8'))
#?endif
#?if !parrot
nqp::cwd(),
#?endif
));
nqp::bindkey(nqp::who(PROCESS), '$CWD', $CWD);

my $PID = nqp::p6box_i(nqp::getpid());
nqp::bindkey(nqp::who(PROCESS), '$PID', $PID);

my $EXECUTABLE =
#?if parrot
nqp::p6box_s(pir::interpinfo__Si(pir::const::INTERPINFO_EXECUTABLE_FULLNAME));
#?endif
#?if jvm
$*VM.properties<perl6.execname>
or $*VM.properties<perl6.prefix> ~ '/bin/perl6-j';
#?endif
#?if moar
nqp::execname()
or ($*VM.config<prefix> ~ '/bin/' ~ ($*VM.config<osname> eq 'MSWin32' ?? 'perl6-m.bat' !! 'perl6-m'));
#?endif
$EXECUTABLE := $EXECUTABLE.path.absolute;
PROCESS.WHO<$EXECUTABLE> = $EXECUTABLE;
PROCESS.WHO<$EXECUTABLE_NAME> = $EXECUTABLE.basename;

my Mu $comp := nqp::getcomp('perl6');

my $PROGRAM_NAME = $comp.user-progname();
nqp::bindkey(nqp::who(PROCESS), '$PROGRAM_NAME', $PROGRAM_NAME);

PROCESS::<$TMPDIR> = IO::Spec.tmpdir().path;
}

0 comments on commit 8518112

Please sign in to comment.