Получение аргументов командной строки в std::ARGS

This commit is contained in:
Victor 2016-06-04 13:49:45 +03:00
parent 00e4e9cb39
commit 2d5ba12770
2 changed files with 21 additions and 1 deletions

View File

@ -22,6 +22,12 @@ public final class Main {
private static final String VERSION = "1.1.0"; private static final String VERSION = "1.1.0";
private static String[] ownlangArgs = new String[0];
public static String[] getOwnlangArgs() {
return ownlangArgs;
}
public static void main(String[] args) throws IOException { public static void main(String[] args) throws IOException {
if (args.length == 0) { if (args.length == 0) {
try { try {
@ -73,12 +79,17 @@ public final class Main {
case "--file": case "--file":
if (i + 1 < args.length) { if (i + 1 < args.length) {
input = SourceLoader.readSource(args[i + 1]); input = SourceLoader.readSource(args[i + 1]);
createOwnLangArgs(args, i + 2);
i++; i++;
} }
break; break;
default: default:
input = args[i]; if (input == null) {
input = args[i];
createOwnLangArgs(args, i + 1);
}
break;
} }
} }
if (input == null) { if (input == null) {
@ -90,6 +101,12 @@ public final class Main {
} }
run(input, showTokens, showAst, showMeasurements); run(input, showTokens, showAst, showMeasurements);
} }
private static void createOwnLangArgs(String[] javaArgs, int index) {
if (index >= javaArgs.length) return;
ownlangArgs = new String[javaArgs.length - index];
System.arraycopy(javaArgs, index, ownlangArgs, 0, ownlangArgs.length);
}
private static void run(String input, boolean showTokens, boolean showAst, boolean showMeasurements) { private static void run(String input, boolean showTokens, boolean showAst, boolean showMeasurements) {
final TimeMeasurement measurement = new TimeMeasurement(); final TimeMeasurement measurement = new TimeMeasurement();

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.Main;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import com.annimon.ownlang.lib.modules.functions.*; import com.annimon.ownlang.lib.modules.functions.*;
@ -11,6 +12,8 @@ public final class std implements Module {
@Override @Override
public void init() { public void init() {
Variables.set("ARGS", ArrayValue.of(Main.getOwnlangArgs()));
Functions.set("echo", new std_echo()); Functions.set("echo", new std_echo());
Functions.set("readln", new std_readln()); Functions.set("readln", new std_readln());
Functions.set("length", new std_length()); Functions.set("length", new std_length());