Совместимость с Android проектом

This commit is contained in:
Victor 2016-09-11 13:05:31 +03:00
parent 25d335a512
commit 47b593241f
59 changed files with 238 additions and 140 deletions

View File

@ -8,6 +8,10 @@ import java.io.UnsupportedEncodingException;
public class Console { public class Console {
public static String newline() {
return System.lineSeparator();
}
public static void print(String value) { public static void print(String value) {
System.out.print(value); System.out.print(value);
} }

View File

@ -1,12 +0,0 @@
package com.annimon.ownlang.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.TYPE)
public @interface ConstantInitializer {
}

View File

@ -5,9 +5,9 @@ package com.annimon.ownlang.lib;
* @author aNNiMON * @author aNNiMON
*/ */
public final class NumberValue implements Value { public final class NumberValue implements Value {
public static final NumberValue MINUS_ONE, ZERO, ONE; public static final NumberValue MINUS_ONE, ZERO, ONE;
private static final int CACHE_MIN = -128, CACHE_MAX = 127; private static final int CACHE_MIN = -128, CACHE_MAX = 127;
private static final NumberValue[] NUMBER_CACHE; private static final NumberValue[] NUMBER_CACHE;
static { static {

View File

@ -1,6 +1,5 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
@ -20,7 +19,6 @@ import javax.swing.JPanel;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class canvas implements Module { public final class canvas implements Module {
private static JFrame frame; private static JFrame frame;

View File

@ -1,6 +1,5 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import static com.annimon.ownlang.lib.Converters.*; import static com.annimon.ownlang.lib.Converters.*;
@ -43,7 +42,6 @@ import javax.swing.JFrame;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class canvasfx implements Module { public final class canvasfx implements Module {
private static final int FX_EFFECT_TYPE = 5301; private static final int FX_EFFECT_TYPE = 5301;

View File

@ -1,6 +1,5 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import java.text.DateFormat; import java.text.DateFormat;
@ -14,7 +13,6 @@ import java.util.Locale;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class date implements Module { public final class date implements Module {
private static final int DATE_DATE_FORMAT = 9829; private static final int DATE_DATE_FORMAT = 9829;
@ -197,7 +195,7 @@ public final class date implements Module {
} }
try { try {
calendar.setTime(DateFormat.getDateTimeInstance().parse(arg1.asString())); calendar.setTime(DateFormat.getDateTimeInstance().parse(arg1.asString()));
} catch (ParseException ex) { } } catch (ParseException ignore) { }
} }
private static void date(Calendar calendar, Value arg1, Value arg2) { private static void date(Calendar calendar, Value arg1, Value arg2) {
@ -207,7 +205,7 @@ public final class date implements Module {
} }
try { try {
calendar.setTime(new SimpleDateFormat(arg1.asString()).parse(arg2.asString())); calendar.setTime(new SimpleDateFormat(arg1.asString()).parse(arg2.asString()));
} catch (ParseException ex) { } } catch (ParseException ignore) { }
} }
} }

View File

@ -1,6 +1,5 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.exceptions.ArgumentsMismatchException; import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import java.io.BufferedReader; import java.io.BufferedReader;
@ -21,7 +20,6 @@ import java.util.Map;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class files implements Module { public final class files implements Module {
private static Map<Integer, FileInfo> files; private static Map<Integer, FileInfo> files;
@ -34,7 +32,7 @@ public final class files implements Module {
public void init() { public void init() {
files = new HashMap<>(); files = new HashMap<>();
initConstants(); initConstants();
Functions.set("fopen", new fopen()); Functions.set("fopen", new fopen());
Functions.set("flush", new flush()); Functions.set("flush", new flush());
Functions.set("fclose", new fclose()); Functions.set("fclose", new fclose());
@ -169,7 +167,7 @@ public final class files implements Module {
protected abstract Value execute(FileInfo fileInfo, Value[] args) throws IOException; protected abstract Value execute(FileInfo fileInfo, Value[] args) throws IOException;
} }
private static class listFiles extends FileFunction { private static class listFiles extends FileFunction {
@Override @Override
protected Value execute(FileInfo fileInfo, Value[] args) throws IOException { protected Value execute(FileInfo fileInfo, Value[] args) throws IOException {
@ -559,7 +557,7 @@ public final class files implements Module {
return NumberValue.ONE; return NumberValue.ONE;
} }
} }
private static class writeText extends FileFunction { private static class writeText extends FileFunction {
@Override @Override
protected Value execute(FileInfo fileInfo, Value[] args) throws IOException { protected Value execute(FileInfo fileInfo, Value[] args) throws IOException {

View File

@ -1,6 +1,5 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import com.annimon.ownlang.lib.modules.functions.forms.Components; import com.annimon.ownlang.lib.modules.functions.forms.Components;
import com.annimon.ownlang.lib.modules.functions.forms.LayoutManagers; import com.annimon.ownlang.lib.modules.functions.forms.LayoutManagers;
@ -13,7 +12,6 @@ import javax.swing.SwingConstants;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class forms implements Module { public final class forms implements Module {
public static void initConstants() { public static void initConstants() {

View File

@ -1,14 +1,14 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer; import com.annimon.ownlang.lib.FunctionValue;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Functions;
import com.annimon.ownlang.lib.Variables;
import com.annimon.ownlang.lib.modules.functions.*; import com.annimon.ownlang.lib.modules.functions.*;
/** /**
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class functional implements Module { public final class functional implements Module {
public static void initConstants() { public static void initConstants() {

View File

@ -1,7 +1,11 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.FunctionValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
public final class functional_chain implements Function { public final class functional_chain implements Function {
@ -21,4 +25,4 @@ public final class functional_chain implements Function {
return result; return result;
} }
} }

View File

@ -1,7 +1,11 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.FunctionValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
public final class functional_combine implements Function { public final class functional_combine implements Function {
@ -24,4 +28,4 @@ public final class functional_combine implements Function {
return new FunctionValue(result); return new FunctionValue(result);
} }
} }

View File

@ -1,7 +1,12 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.ArrayValue;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.FunctionValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -35,4 +40,4 @@ public final class functional_flatmap implements Function {
} }
return new ArrayValue(values); return new ArrayValue(values);
} }
} }

View File

@ -2,7 +2,6 @@ package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import java.util.Map; import java.util.Map;
public final class functional_foreach implements Function { public final class functional_foreach implements Function {
@ -32,4 +31,4 @@ public final class functional_foreach implements Function {
} }
throw new TypeException("Invalid first argument. Array or map expected"); throw new TypeException("Invalid first argument. Array or map expected");
} }
} }

View File

@ -1,8 +1,13 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.ArrayValue;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.FunctionValue;
import com.annimon.ownlang.lib.MapValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
import java.util.Map; import java.util.Map;
public final class functional_map implements Function { public final class functional_map implements Function {
@ -53,4 +58,4 @@ public final class functional_map implements Function {
} }
return result; return result;
} }
} }

View File

@ -1,8 +1,13 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.ArrayValue;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.FunctionValue;
import com.annimon.ownlang.lib.MapValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
import java.util.Map; import java.util.Map;
public final class functional_reduce implements Function { public final class functional_reduce implements Function {
@ -35,4 +40,4 @@ public final class functional_reduce implements Function {
} }
throw new TypeException("Invalid first argument. Array or map expected"); throw new TypeException("Invalid first argument. Array or map expected");
} }
} }

View File

@ -1,7 +1,12 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.ArrayValue;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.FunctionValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
import java.util.Arrays; import java.util.Arrays;
public final class functional_sortby implements Function { public final class functional_sortby implements Function {
@ -22,4 +27,4 @@ public final class functional_sortby implements Function {
return new ArrayValue(elements); return new ArrayValue(elements);
} }
} }

View File

@ -7,7 +7,12 @@ import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import okhttp3.*; import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.internal.http.HttpMethod; import okhttp3.internal.http.HttpMethod;
public final class http_http implements Function { public final class http_http implements Function {
@ -168,4 +173,4 @@ public final class http_http implements Function {
return RequestBody.create(type, params.asString()); return RequestBody.create(type, params.asString());
} }
} }

View File

@ -7,7 +7,6 @@ import com.annimon.ownlang.lib.ValueUtils;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONTokener; import org.json.JSONTokener;
public final class json_decode implements Function { public final class json_decode implements Function {
@Override @Override
@ -21,4 +20,4 @@ public final class json_decode implements Function {
throw new RuntimeException("Error while parsing json", ex); throw new RuntimeException("Error while parsing json", ex);
} }
} }
} }

View File

@ -1,6 +1,11 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.ArrayValue;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
public final class robot_exec implements Function { public final class robot_exec implements Function {
@ -50,4 +55,4 @@ public final class robot_exec implements Function {
} }
return strings; return strings;
} }
} }

View File

@ -1,7 +1,12 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.ArrayValue;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.MapValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
public final class std_arrayCombine implements Function { public final class std_arrayCombine implements Function {
@ -26,4 +31,4 @@ public final class std_arrayCombine implements Function {
return result; return result;
} }
} }

View File

@ -1,7 +1,12 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.MapValue;
import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
public final class std_arrayKeyExists implements Function { public final class std_arrayKeyExists implements Function {
@ -15,4 +20,4 @@ public final class std_arrayKeyExists implements Function {
return NumberValue.fromBoolean(map.containsKey(args[0])); return NumberValue.fromBoolean(map.containsKey(args[0]));
} }
} }

View File

@ -1,7 +1,12 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.ArrayValue;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.MapValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -22,4 +27,4 @@ public final class std_arrayKeys implements Function {
return new ArrayValue(keys); return new ArrayValue(keys);
} }
} }

View File

@ -1,7 +1,12 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.ArrayValue;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.MapValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -22,4 +27,4 @@ public final class std_arrayValues implements Function {
return new ArrayValue(values); return new ArrayValue(values);
} }
} }

View File

@ -1,15 +1,19 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Value;
public final class std_charat implements Function { public final class std_charat implements Function {
@Override @Override
public Value execute(Value... args) { public Value execute(Value... args) {
Arguments.check(2, args.length); Arguments.check(2, args.length);
final String input = args[0].asString(); final String input = args[0].asString();
final int index = args[1].asInt(); final int index = args[1].asInt();
return NumberValue.of((short)input.charAt(index)); return NumberValue.of((short)input.charAt(index));
} }
} }

View File

@ -9,11 +9,12 @@ public final class std_echo implements Function {
@Override @Override
public Value execute(Value... args) { public Value execute(Value... args) {
final StringBuilder sb = new StringBuilder();
for (Value arg : args) { for (Value arg : args) {
Console.print(arg.asString()); sb.append(arg.asString());
Console.print(" "); sb.append(" ");
} }
Console.println(); Console.println(sb.toString());
return NumberValue.ZERO; return NumberValue.ZERO;
} }
} }

View File

@ -1,17 +1,20 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Value;
public final class std_indexof implements Function { public final class std_indexof implements Function {
@Override @Override
public Value execute(Value... args) { public Value execute(Value... args) {
Arguments.checkOrOr(2, 3, args.length); Arguments.checkOrOr(2, 3, args.length);
final String input = args[0].asString(); final String input = args[0].asString();
final String what = args[1].asString(); final String what = args[1].asString();
final int index = (args.length == 3) ? args[2].asInt() : 0; final int index = (args.length == 3) ? args[2].asInt() : 0;
return NumberValue.of(input.indexOf(what, index)); return NumberValue.of(input.indexOf(what, index));
} }
} }

View File

@ -2,7 +2,12 @@ package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.exceptions.ArgumentsMismatchException; import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.ArrayValue;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
public final class std_join implements Function { public final class std_join implements Function {
@ -38,4 +43,4 @@ public final class std_join implements Function {
sb.append(suffix); sb.append(suffix);
return new StringValue(sb.toString()); return new StringValue(sb.toString());
} }
} }

View File

@ -1,6 +1,9 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Value;
public final class std_lastindexof implements Function { public final class std_lastindexof implements Function {
@ -16,4 +19,4 @@ public final class std_lastindexof implements Function {
final int index = args[2].asInt(); final int index = args[2].asInt();
return NumberValue.of(input.lastIndexOf(what, index)); return NumberValue.of(input.lastIndexOf(what, index));
} }
} }

View File

@ -4,7 +4,6 @@ import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
import java.util.Random; import java.util.Random;
public final class std_rand implements Function { public final class std_rand implements Function {
@ -40,4 +39,4 @@ public final class std_rand implements Function {
} }
return NumberValue.of(RND.nextInt(to - from) + from); return NumberValue.of(RND.nextInt(to - from) + from);
} }
} }

View File

@ -1,6 +1,8 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value;
import java.util.Scanner; import java.util.Scanner;
public final class std_readln implements Function { public final class std_readln implements Function {
@ -11,4 +13,4 @@ public final class std_readln implements Function {
return new StringValue(sc.nextLine()); return new StringValue(sc.nextLine());
} }
} }
} }

View File

@ -1,6 +1,9 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value;
public final class std_replace implements Function { public final class std_replace implements Function {
@ -14,4 +17,4 @@ public final class std_replace implements Function {
return new StringValue(input.replace(target, replacement)); return new StringValue(input.replace(target, replacement));
} }
} }

View File

@ -1,6 +1,9 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value;
public final class std_replaceall implements Function { public final class std_replaceall implements Function {
@ -14,4 +17,4 @@ public final class std_replaceall implements Function {
return new StringValue(input.replaceAll(regex, replacement)); return new StringValue(input.replaceAll(regex, replacement));
} }
} }

View File

@ -1,17 +1,20 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value;
public final class std_replacefirst implements Function { public final class std_replacefirst implements Function {
@Override @Override
public Value execute(Value... args) { public Value execute(Value... args) {
Arguments.check(3, args.length); Arguments.check(3, args.length);
final String input = args[0].asString(); final String input = args[0].asString();
final String regex = args[1].asString(); final String regex = args[1].asString();
final String replacement = args[2].asString(); final String replacement = args[2].asString();
return new StringValue(input.replaceFirst(regex, replacement)); return new StringValue(input.replaceFirst(regex, replacement));
} }
} }

View File

@ -2,7 +2,12 @@ package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.exceptions.ArgumentsMismatchException; import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.ArrayValue;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.FunctionValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
import java.util.Arrays; import java.util.Arrays;
public final class std_sort implements Function { public final class std_sort implements Function {
@ -33,4 +38,4 @@ public final class std_sort implements Function {
return new ArrayValue(elements); return new ArrayValue(elements);
} }
} }

View File

@ -1,6 +1,10 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.ArrayValue;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value;
public final class std_split implements Function { public final class std_split implements Function {
@ -15,4 +19,4 @@ public final class std_split implements Function {
final String[] parts = input.split(regex, limit); final String[] parts = input.split(regex, limit);
return ArrayValue.of(parts); return ArrayValue.of(parts);
} }
} }

View File

@ -1,6 +1,10 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
public final class std_sprintf implements Function { public final class std_sprintf implements Function {
@ -17,4 +21,4 @@ public final class std_sprintf implements Function {
} }
return new StringValue(String.format(format, values)); return new StringValue(String.format(format, values));
} }
} }

View File

@ -1,6 +1,9 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value;
public final class std_substring implements Function { public final class std_substring implements Function {
@ -21,4 +24,4 @@ public final class std_substring implements Function {
return new StringValue(result); return new StringValue(result);
} }
} }

View File

@ -1,7 +1,13 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.Console; import com.annimon.ownlang.Console;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.FunctionValue;
import com.annimon.ownlang.lib.Functions;
import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
public final class std_thread implements Function { public final class std_thread implements Function {
@ -21,10 +27,10 @@ public final class std_thread implements Function {
if (params.length > 0) { if (params.length > 0) {
System.arraycopy(args, 1, params, 0, params.length); System.arraycopy(args, 1, params, 0, params.length);
} }
final Thread thread = new Thread(() -> body.execute(params)); final Thread thread = new Thread(() -> body.execute(params));
thread.setUncaughtExceptionHandler(Console::handleException); thread.setUncaughtExceptionHandler(Console::handleException);
thread.start(); thread.start();
return NumberValue.ZERO; return NumberValue.ZERO;
} }
} }

View File

@ -1,6 +1,9 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value;
public final class std_tochar implements Function { public final class std_tochar implements Function {
@ -9,4 +12,4 @@ public final class std_tochar implements Function {
Arguments.check(1, args.length); Arguments.check(1, args.length);
return new StringValue(String.valueOf((char) args[0].asInt())); return new StringValue(String.valueOf((char) args[0].asInt()));
} }
} }

View File

@ -1,6 +1,9 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value;
public final class std_tolowercase implements Function { public final class std_tolowercase implements Function {
@ -9,4 +12,4 @@ public final class std_tolowercase implements Function {
Arguments.check(1, args.length); Arguments.check(1, args.length);
return new StringValue(args[0].asString().toLowerCase()); return new StringValue(args[0].asString().toLowerCase());
} }
} }

View File

@ -1,6 +1,9 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value;
public final class std_touppercase implements Function { public final class std_touppercase implements Function {
@ -9,4 +12,4 @@ public final class std_touppercase implements Function {
Arguments.check(1, args.length); Arguments.check(1, args.length);
return new StringValue(args[0].asString().toUpperCase()); return new StringValue(args[0].asString().toUpperCase());
} }
} }

View File

@ -1,6 +1,9 @@
package com.annimon.ownlang.lib.modules.functions; package com.annimon.ownlang.lib.modules.functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value;
public final class std_trim implements Function { public final class std_trim implements Function {
@ -9,4 +12,4 @@ public final class std_trim implements Function {
Arguments.check(1, args.length); Arguments.check(1, args.length);
return new StringValue(args[0].asString().trim()); return new StringValue(args[0].asString().trim());
} }
} }

View File

@ -1,14 +1,14 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer; import com.annimon.ownlang.lib.Functions;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.modules.functions.http_download;
import com.annimon.ownlang.lib.modules.functions.*; import com.annimon.ownlang.lib.modules.functions.http_http;
import com.annimon.ownlang.lib.modules.functions.http_urlencode;
/** /**
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class http implements Module { public final class http implements Module {
public static void initConstants() { public static void initConstants() {

View File

@ -1,6 +1,5 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.lang.reflect.Field; import java.lang.reflect.Field;
@ -11,10 +10,9 @@ import java.util.List;
/** /**
* Java interoperability module. * Java interoperability module.
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class java implements Module { public final class java implements Module {
private static final Value NULL = new NullValue(); private static final Value NULL = new NullValue();

View File

@ -1,6 +1,5 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.exceptions.ArgumentsMismatchException; import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
import com.annimon.ownlang.lib.Arguments; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.ArrayValue; import com.annimon.ownlang.lib.ArrayValue;
@ -32,7 +31,6 @@ import java.util.function.Function;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class jdbc implements Module { public final class jdbc implements Module {
public static void initConstants() { public static void initConstants() {

View File

@ -1,7 +1,8 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.Functions;
import com.annimon.ownlang.lib.modules.functions.*; import com.annimon.ownlang.lib.modules.functions.json_decode;
import com.annimon.ownlang.lib.modules.functions.json_encode;
/** /**
* *

View File

@ -1,6 +1,5 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import java.util.function.DoubleBinaryOperator; import java.util.function.DoubleBinaryOperator;
import java.util.function.DoubleFunction; import java.util.function.DoubleFunction;
@ -11,7 +10,6 @@ import java.util.function.UnaryOperator;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class math implements Module { public final class math implements Module {
private static final DoubleFunction<NumberValue> doubleToNumber = NumberValue::of; private static final DoubleFunction<NumberValue> doubleToNumber = NumberValue::of;
@ -151,7 +149,7 @@ public final class math implements Module {
}; };
} }
private static Function functionConvert(DoubleUnaryOperator opDouble, UnaryOperator<Float> opFloat) { private static Function functionConvert(DoubleUnaryOperator opDouble, UnaryOperator<Float> opFloat) {
return args -> { return args -> {
Arguments.check(1, args.length); Arguments.check(1, args.length);
final Object raw = args[0].raw(); final Object raw = args[0].raw();

View File

@ -1,6 +1,13 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.Console;
import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.Functions;
import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -92,10 +99,10 @@ public final class ounit implements Module {
for (TestInfo test : tests) { for (TestInfo test : tests) {
if (!test.isPassed) failures++; if (!test.isPassed) failures++;
summaryTime += test.elapsedTimeInMicros; summaryTime += test.elapsedTimeInMicros;
result.append(System.lineSeparator()); result.append(Console.newline());
result.append(test.info()); result.append(test.info());
} }
result.append(System.lineSeparator()); result.append(Console.newline());
result.append(String.format("Tests run: %d, Failures: %d, Time elapsed: %s", result.append(String.format("Tests run: %d, Failures: %d, Time elapsed: %s",
tests.size(), failures, tests.size(), failures,
microsToSeconds(summaryTime))); microsToSeconds(summaryTime)));

View File

@ -1,6 +1,5 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import com.annimon.ownlang.lib.modules.functions.robot_exec; import com.annimon.ownlang.lib.modules.functions.robot_exec;
import com.annimon.ownlang.lib.modules.functions.robot_fromclipboard; import com.annimon.ownlang.lib.modules.functions.robot_fromclipboard;
@ -16,7 +15,6 @@ import java.util.Map;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class robot implements Module { public final class robot implements Module {
private static final int CLICK_DELAY = 200; private static final int CLICK_DELAY = 200;

View File

@ -1,6 +1,5 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import io.socket.client.IO; import io.socket.client.IO;
@ -12,7 +11,6 @@ import java.net.URISyntaxException;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class socket implements Module { public final class socket implements Module {
public static void initConstants() { public static void initConstants() {

View File

@ -1,7 +1,6 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.Main; import com.annimon.ownlang.Main;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import com.annimon.ownlang.lib.modules.functions.*; import com.annimon.ownlang.lib.modules.functions.*;
@ -9,7 +8,6 @@ import com.annimon.ownlang.lib.modules.functions.*;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class std implements Module { public final class std implements Module {
public static void initConstants() { public static void initConstants() {
@ -28,7 +26,7 @@ public final class std implements Module {
Functions.set("thread", new std_thread()); Functions.set("thread", new std_thread());
Functions.set("sync", new std_sync()); Functions.set("sync", new std_sync());
Functions.set("try", new std_try()); Functions.set("try", new std_try());
// String // String
Functions.set("sprintf", new std_sprintf()); Functions.set("sprintf", new std_sprintf());
Functions.set("split", new std_split()); Functions.set("split", new std_split());

View File

@ -1,13 +1,11 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
/** /**
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class types implements Module { public final class types implements Module {
public static void initConstants() { public static void initConstants() {

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.parser; package com.annimon.ownlang.parser;
import com.annimon.ownlang.Console;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -233,7 +234,7 @@ public final class Beautifier {
} }
private void newLineStrict() { private void newLineStrict() {
beautifiedCode.append(System.lineSeparator()); beautifiedCode.append(Console.newline());
indent(); indent();
do { do {
next(); next();

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.parser; package com.annimon.ownlang.parser;
import com.annimon.ownlang.Console;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@ -33,7 +34,7 @@ public final class ParseErrors implements Iterable<ParseError> {
public String toString() { public String toString() {
final StringBuilder result = new StringBuilder(); final StringBuilder result = new StringBuilder();
for (ParseError error : errors) { for (ParseError error : errors) {
result.append(error).append(System.lineSeparator()); result.append(error).append(Console.newline());
} }
return result.toString(); return result.toString();
} }

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.parser.ast; package com.annimon.ownlang.parser.ast;
import com.annimon.ownlang.Console;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -41,7 +42,7 @@ public final class BlockStatement extends InterruptableNode implements Statement
public String toString() { public String toString() {
final StringBuilder result = new StringBuilder(); final StringBuilder result = new StringBuilder();
for (Statement statement : statements) { for (Statement statement : statements) {
result.append(statement.toString()).append(System.lineSeparator()); result.append(statement.toString()).append(Console.newline());
} }
return result.toString(); return result.toString();
} }

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.parser.optimization; package com.annimon.ownlang.parser.optimization;
import com.annimon.ownlang.Console;
import com.annimon.ownlang.parser.ast.BlockStatement; import com.annimon.ownlang.parser.ast.BlockStatement;
import com.annimon.ownlang.parser.ast.Expression; import com.annimon.ownlang.parser.ast.Expression;
import com.annimon.ownlang.parser.ast.Node; import com.annimon.ownlang.parser.ast.Node;
@ -98,9 +99,9 @@ public class InstructionCombining extends OptimizationVisitor<Void> implements O
: ((PrintlnStatement) n2).expression; : ((PrintlnStatement) n2).expression;
if (isConstantValue(e1) && isConstantValue(e2)) { if (isConstantValue(e1) && isConstantValue(e2)) {
String s1 = e1.eval().asString(); String s1 = e1.eval().asString();
if (n1Type == 2) s1 += System.lineSeparator(); if (n1Type == 2) s1 += Console.newline();
String s2 = e2.eval().asString(); String s2 = e2.eval().asString();
if (n2Type == 2) s2 += System.lineSeparator(); if (n2Type == 2) s2 += Console.newline();
printCombinedCount++; printCombinedCount++;
return new PrintStatement(new ValueExpression(s1 + s2)); return new PrintStatement(new ValueExpression(s1 + s2));
} }

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.parser.visitors; package com.annimon.ownlang.parser.visitors;
import com.annimon.ownlang.Console;
import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.FunctionValue; import com.annimon.ownlang.lib.FunctionValue;
import com.annimon.ownlang.lib.Types; import com.annimon.ownlang.lib.Types;
@ -422,7 +423,7 @@ public class PrintVisitor implements ResultVisitor<StringBuilder, StringBuilder>
} }
private void newLine(StringBuilder t) { private void newLine(StringBuilder t) {
t.append(System.lineSeparator()); t.append(Console.newline());
} }
private void printIndent(StringBuilder sb) { private void printIndent(StringBuilder sb) {

View File

@ -62,7 +62,7 @@ public final class Repl {
continue; continue;
} }
buffer.append(line).append(System.lineSeparator()); buffer.append(line).append(Console.newline());
Statement program = null; Statement program = null;
try { try {
final List<Token> tokens = Lexer.tokenize(buffer.toString()); final List<Token> tokens = Lexer.tokenize(buffer.toString());

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.utils; package com.annimon.ownlang.utils;
import com.annimon.ownlang.Console;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -62,12 +63,12 @@ public final class TimeMeasurement {
result.append(entry.getKey()).append(": ") result.append(entry.getKey()).append(": ")
.append(convertedTime).append(' ').append(unitName) .append(convertedTime).append(' ').append(unitName)
.append(System.lineSeparator()); .append(Console.newline());
} }
if (showSummary) { if (showSummary) {
result.append("Summary: ") result.append("Summary: ")
.append(summaryTime).append(' ').append(unitName) .append(summaryTime).append(' ').append(unitName)
.append(System.lineSeparator()); .append(Console.newline());
} }
return result.toString(); return result.toString();
} }