Skip to content

Commit 9fb34ae

Browse files
committed
Абстракция для совместимости с Android-проектом
1 parent 24ae7da commit 9fb34ae

File tree

10 files changed

+89
-20
lines changed

10 files changed

+89
-20
lines changed

src/com/annimon/ownlang/Console.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.annimon.ownlang;
2+
3+
import com.annimon.ownlang.lib.CallStack;
4+
5+
import java.io.ByteArrayOutputStream;
6+
import java.io.PrintStream;
7+
import java.io.UnsupportedEncodingException;
8+
9+
public class Console {
10+
11+
public static void print(String value) {
12+
System.out.print(value);
13+
}
14+
15+
public static void print(Object value) {
16+
print(value.toString());
17+
}
18+
19+
public static void println() {
20+
System.out.println();
21+
}
22+
23+
public static void println(String value) {
24+
System.out.println(value);
25+
}
26+
27+
public static void println(Object value) {
28+
println(value.toString());
29+
}
30+
31+
public static void error(Throwable throwable) {
32+
error(throwable.toString());
33+
}
34+
35+
public static void error(CharSequence value) {
36+
System.err.println(value);
37+
}
38+
39+
public static void handleException(Thread thread, Throwable throwable) {
40+
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
41+
try(final PrintStream ps = new PrintStream(baos)) {
42+
ps.printf("%s in %s\n", throwable.getMessage(), thread.getName());
43+
for (CallStack.CallInfo call : CallStack.getCalls()) {
44+
ps.printf("\tat %s\n", call);
45+
}
46+
ps.println();
47+
throwable.printStackTrace(ps);
48+
ps.flush();
49+
}
50+
try {
51+
error(baos.toString("UTF-8"));
52+
} catch (UnsupportedEncodingException ex) {
53+
error(baos.toString());
54+
}
55+
}
56+
}

src/com/annimon/ownlang/Main.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.annimon.ownlang;
22

3-
import com.annimon.ownlang.lib.CallStack;
43
import com.annimon.ownlang.parser.Lexer;
54
import com.annimon.ownlang.parser.Parser;
65
import com.annimon.ownlang.parser.SourceLoader;
@@ -90,7 +89,7 @@ private static void run(String input, boolean showTokens, boolean showAst, boole
9089
measurement.start("Execution time");
9190
program.execute();
9291
} catch (Exception ex) {
93-
handleException(Thread.currentThread(), ex);
92+
Console.handleException(Thread.currentThread(), ex);
9493
} finally {
9594
if (showMeasurements) {
9695
measurement.stop("Execution time");
@@ -99,12 +98,4 @@ private static void run(String input, boolean showTokens, boolean showAst, boole
9998
}
10099
}
101100
}
102-
103-
public static void handleException(Thread thread, Throwable throwable) {
104-
System.err.printf("%s in %s\n", throwable.getMessage(), thread.getName());
105-
for (CallStack.CallInfo call : CallStack.getCalls()) {
106-
System.err.printf("\tat %s\n", call);
107-
}
108-
throwable.printStackTrace();
109-
}
110101
}

src/com/annimon/ownlang/lib/CallStack.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ public final class CallStack {
77

88
private static final Deque<CallInfo> calls = new ConcurrentLinkedDeque<CallInfo>();;
99

10+
public static synchronized void clear() {
11+
calls.clear();
12+
}
13+
1014
public static synchronized void enter(String name, Function function) {
1115
calls.push(new CallInfo(name, function));
1216
}

src/com/annimon/ownlang/lib/Variables.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ public final class Variables {
1616
static {
1717
stack = new Stack<>();
1818
variables = new ConcurrentHashMap<>();
19+
Variables.clear();
20+
}
21+
22+
public static void clear() {
23+
stack.clear();
24+
variables.clear();
1925
variables.put("true", NumberValue.ONE);
2026
variables.put("false", NumberValue.ZERO);
2127
}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.annimon.ownlang.lib.modules.functions;
22

3+
import com.annimon.ownlang.Console;
34
import com.annimon.ownlang.lib.Function;
45
import com.annimon.ownlang.lib.NumberValue;
56
import com.annimon.ownlang.lib.Value;
@@ -9,10 +10,10 @@ public final class std_echo implements Function {
910
@Override
1011
public Value execute(Value... args) {
1112
for (Value arg : args) {
12-
System.out.print(arg.asString());
13-
System.out.print(" ");
13+
Console.print(arg.asString());
14+
Console.print(" ");
1415
}
15-
System.out.println();
16+
Console.println();
1617
return NumberValue.ZERO;
1718
}
1819
}

src/com/annimon/ownlang/lib/modules/functions/std_thread.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.annimon.ownlang.lib.modules.functions;
22

3-
import com.annimon.ownlang.Main;
3+
import com.annimon.ownlang.Console;
44
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
55
import com.annimon.ownlang.lib.*;
66

@@ -26,7 +26,7 @@ public Value execute(Value... args) {
2626
}
2727

2828
final Thread thread = new Thread(() -> body.execute(params));
29-
thread.setUncaughtExceptionHandler(Main::handleException);
29+
thread.setUncaughtExceptionHandler(Console::handleException);
3030
thread.start();
3131
return NumberValue.ZERO;
3232
}

src/com/annimon/ownlang/parser/Parser.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public static Statement parse(List<Token> tokens) {
4848
private final List<Token> tokens;
4949
private final int size;
5050
private final ParseErrors parseErrors;
51+
private Statement parsedStatement;
5152

5253
private int pos;
5354

@@ -57,6 +58,10 @@ public Parser(List<Token> tokens) {
5758
parseErrors = new ParseErrors();
5859
}
5960

61+
public Statement getParsedStatement() {
62+
return parsedStatement;
63+
}
64+
6065
public ParseErrors getParseErrors() {
6166
return parseErrors;
6267
}
@@ -72,6 +77,7 @@ public Statement parse() {
7277
recover();
7378
}
7479
}
80+
parsedStatement = result;
7581
return result;
7682
}
7783

src/com/annimon/ownlang/parser/ast/PrintStatement.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.annimon.ownlang.parser.ast;
22

3+
import com.annimon.ownlang.Console;
4+
35
/**
46
*
57
* @author aNNiMON
@@ -14,7 +16,7 @@ public PrintStatement(Expression expression) {
1416

1517
@Override
1618
public void execute() {
17-
System.out.print(expression.eval());
19+
Console.print(expression.eval());
1820
}
1921

2022
@Override

src/com/annimon/ownlang/parser/ast/PrintlnStatement.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.annimon.ownlang.parser.ast;
22

3+
import com.annimon.ownlang.Console;
4+
35
/**
46
*
57
* @author aNNiMON
@@ -14,7 +16,7 @@ public PrintlnStatement(Expression expression) {
1416

1517
@Override
1618
public void execute() {
17-
System.out.println(expression.eval());
19+
Console.println(expression.eval());
1820
}
1921

2022
@Override

src/com/annimon/ownlang/parser/visitors/VariablePrinter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.annimon.ownlang.parser.visitors;
22

3+
import com.annimon.ownlang.Console;
34
import com.annimon.ownlang.parser.ast.*;
45

56
/**
@@ -11,18 +12,18 @@ public final class VariablePrinter extends AbstractVisitor {
1112
@Override
1213
public void visit(AssignmentExpression s) {
1314
super.visit(s);
14-
System.out.println(s.target);
15+
Console.println(s.target);
1516
}
1617

1718
@Override
1819
public void visit(ContainerAccessExpression s) {
1920
super.visit(s);
20-
System.out.println(s.variable);
21+
Console.println(s.variable);
2122
}
2223

2324
@Override
2425
public void visit(VariableExpression s) {
2526
super.visit(s);
26-
System.out.println(s.name);
27+
Console.println(s.name);
2728
}
2829
}

0 commit comments

Comments
 (0)