diff src/main.nqp @ 0:c341f82e7ad7 default tip

Rakudo branch in cr.ie.u-ryukyu.ac.jp
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 26 Dec 2019 16:50:27 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main.nqp	Thu Dec 26 16:50:27 2019 +0900
@@ -0,0 +1,92 @@
+use Perl6::Grammar;
+use Perl6::Actions;
+use Perl6::Compiler;
+
+
+# Initialize Rakudo runtime support.
+nqp::p6init();
+
+# Create and configure compiler object.
+my $comp := Perl6::Compiler.new();
+
+$comp.language('perl6');
+$comp.parsegrammar(Perl6::Grammar);
+$comp.parseactions(Perl6::Actions);
+$comp.addstage('syntaxcheck', :before<ast>);
+$comp.addstage('optimize', :after<ast>);
+hll-config($comp.config);
+nqp::bindhllsym('perl6', '$COMPILER_CONFIG', $comp.config);
+
+
+# Determine Perl6 and NQP dirs.
+my $config := nqp::backendconfig();
+my $sep := $config<osname> eq 'MSWin32' ?? '\\' !! '/';
+#?if jvm
+my $execname := nqp::atkey(nqp::jvmgetproperties,'perl6.execname');
+#?endif
+#?if !jvm
+my $execname := nqp::execname();
+#?endif
+my $install-dir := $execname eq ''
+    ?? $comp.config<prefix>
+    !! nqp::substr($execname, 0, nqp::rindex($execname, $sep, nqp::rindex($execname, $sep) - 1));
+
+my $rakudo-home := $comp.config<static_rakudo_home>
+    // nqp::getenvhash()<PERL6_HOME>
+    // nqp::getenvhash()<RAKUDO_HOME>
+    // $install-dir ~ '/share/perl6';
+if nqp::substr($rakudo-home, nqp::chars($rakudo-home) - 1) eq $sep {
+    $rakudo-home := nqp::substr($rakudo-home, 0, nqp::chars($rakudo-home) - 1);
+}
+
+my $nqp-home := $comp.config<static_nqp_home>
+    // nqp::getenvhash()<NQP_HOME>
+    // $install-dir ~ '/share/nqp';
+if nqp::substr($nqp-home, nqp::chars($nqp-home) - 1) eq $sep {
+    $nqp-home := nqp::substr($nqp-home, 0, nqp::chars($nqp-home) - 1);
+}
+
+nqp::bindhllsym('perl6', '$RAKUDO_HOME', $rakudo-home);
+nqp::bindhllsym('perl6', '$NQP_HOME', $nqp-home);
+
+
+# Add extra command line options.
+my @clo := $comp.commandline_options();
+@clo.push('parsetrace');
+@clo.push('setting=s');
+@clo.push('n');
+@clo.push('p');
+@clo.push('doc=s?');
+@clo.push('optimize=s?');
+@clo.push('c');
+@clo.push('I=s');
+@clo.push('M=s');
+@clo.push('nqp-lib=s');
+
+#?if js
+@clo.push('beautify');
+#?endif
+
+# Set up END block list, which we'll run at exit.
+nqp::bindhllsym('perl6', '@END_PHASERS', []);
+
+# In an embedding environment, let @*ARGS be empty instead of crashing
+nqp::bindhllsym('perl6', '$!ARGITER', 0);
+
+#?if jvm
+sub MAIN(*@ARGS) {
+#?endif
+#?if moar
+sub MAIN(@ARGS) {
+#?endif
+#?if js
+sub MAIN(*@ARGS) {
+#?endif
+    # Enter the compiler.
+    $comp.command_line(@ARGS, :encoding('utf8'), :transcode('ascii iso-8859-1'));
+
+    # do all the necessary actions at the end, if any
+    if nqp::gethllsym('perl6', '&THE_END') -> $THE_END {
+        $THE_END()
+    }
+}