Skip to content

Commit acd1449

Browse files
committed
Совместимость кода с Android-версией
1 parent 1cb2f70 commit acd1449

26 files changed

+108
-35
lines changed

src/com/annimon/ownlang/Main.java

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

33
import com.annimon.ownlang.exceptions.LexerException;
4+
import com.annimon.ownlang.exceptions.StoppedException;
45
import com.annimon.ownlang.parser.Beautifier;
56
import com.annimon.ownlang.parser.Lexer;
67
import com.annimon.ownlang.parser.Linter;
@@ -167,7 +168,7 @@ private static void run(String input, Options options) {
167168
final Statement program;
168169
if (options.optimizationLevel > 0) {
169170
measurement.start("Optimization time");
170-
program = Optimizer.optimize(parsedProgram, options.optimizationLevel);
171+
program = Optimizer.optimize(parsedProgram, options.optimizationLevel, options.showAst);
171172
measurement.stop("Optimization time");
172173
if (options.showAst) {
173174
System.out.println(program.toString());
@@ -179,6 +180,8 @@ private static void run(String input, Options options) {
179180
try {
180181
measurement.start("Execution time");
181182
program.execute();
183+
} catch (StoppedException ex) {
184+
// skip
182185
} catch (Exception ex) {
183186
Console.handleException(Thread.currentThread(), ex);
184187
} finally {
@@ -220,6 +223,8 @@ private static void repl() {
220223
program.execute();
221224
} catch (LexerException lex) {
222225
continue;
226+
} catch (StoppedException ex) {
227+
// skip
223228
} catch (Exception ex) {
224229
Console.handleException(Thread.currentThread(), ex);
225230
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.annimon.ownlang.exceptions;
2+
3+
public class StoppedException extends RuntimeException {
4+
5+
6+
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ public final class Functions {
1414
static {
1515
functions = new HashMap<>();
1616
}
17-
17+
18+
public static void clear() {
19+
functions.clear();
20+
}
21+
1822
public static Map<String, Function> getFunctions() {
1923
return functions;
2024
}

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,19 @@ private static class ScopeFindData {
3232

3333
private static volatile Scope scope;
3434
static {
35-
scope = new Scope();
3635
Variables.clear();
3736
}
38-
37+
38+
public static Map<String, Value> variables() {
39+
return scope.variables;
40+
}
41+
3942
public static void clear() {
43+
scope = new Scope();
4044
scope.variables.clear();
4145
scope.variables.put("true", NumberValue.ONE);
4246
scope.variables.put("false", NumberValue.ZERO);
4347
}
44-
45-
public static Map<String, Value> variables() {
46-
return scope.variables;
47-
}
4848

4949
public static void push() {
5050
synchronized (lock) {

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
public final class Optimizer {
1515

16-
public static Statement optimize(Statement statement, int level) {
16+
public static Statement optimize(Statement statement, int level, boolean showSummary) {
1717
if (level == 0) return statement;
1818

1919
final Optimizable optimization = new SummaryOptimization(new Optimizable[] {
@@ -32,13 +32,16 @@ public static Statement optimize(Statement statement, int level) {
3232
result = optimization.optimize(result);
3333
iteration++;
3434
} while (lastModifications != optimization.optimizationsCount());
35-
Console.print("Performs " + iteration + " optimization iterations");
35+
if (showSummary)
36+
Console.print("Performs " + iteration + " optimization iterations");
3637
} else {
3738
for (int i = 0; i < level; i++) {
3839
result = optimization.optimize(result);
3940
}
4041
}
41-
Console.println(optimization.summaryInfo());
42+
if (showSummary) {
43+
Console.println(optimization.summaryInfo());
44+
}
4245
return (Statement) result;
4346
}
4447
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
* @author aNNiMON
88
*/
9-
public final class AssignmentExpression implements Expression, Statement {
9+
public final class AssignmentExpression extends InterruptableNode implements Expression, Statement {
1010

1111
public final Accessible target;
1212
public final BinaryExpression.Operator operation;
@@ -25,6 +25,7 @@ public void execute() {
2525

2626
@Override
2727
public Value eval() {
28+
super.interruptionCheck();
2829
if (operation == null) {
2930
// Simple assignment
3031
return target.set(expression.eval());

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
* @author aNNiMON
99
*/
10-
public final class BlockStatement implements Statement {
10+
public final class BlockStatement extends InterruptableNode implements Statement {
1111

1212
public final List<Statement> statements;
1313

@@ -21,6 +21,7 @@ public void add(Statement statement) {
2121

2222
@Override
2323
public void execute() {
24+
super.interruptionCheck();
2425
for (Statement statement : statements) {
2526
statement.execute();
2627
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*
1414
* @author aNNiMON
1515
*/
16-
public final class DestructuringAssignmentStatement implements Statement {
16+
public final class DestructuringAssignmentStatement extends InterruptableNode implements Statement {
1717

1818
public final List<String> variables;
1919
public final Expression containerExpression;
@@ -25,6 +25,7 @@ public DestructuringAssignmentStatement(List<String> arguments, Expression conta
2525

2626
@Override
2727
public void execute() {
28+
super.interruptionCheck();
2829
final Value container = containerExpression.eval();
2930
switch (container.type()) {
3031
case Types.ARRAY:

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*
55
* @author aNNiMON
66
*/
7-
public final class DoWhileStatement implements Statement {
7+
public final class DoWhileStatement extends InterruptableNode implements Statement {
88

99
public final Expression condition;
1010
public final Statement statement;
@@ -16,6 +16,7 @@ public DoWhileStatement(Expression condition, Statement statement) {
1616

1717
@Override
1818
public void execute() {
19+
super.interruptionCheck();
1920
do {
2021
try {
2122
statement.execute();

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
* @author aNNiMON
99
*/
10-
public final class ExprStatement implements Expression, Statement {
10+
public final class ExprStatement extends InterruptableNode implements Expression, Statement {
1111

1212
public final Expression expr;
1313

@@ -17,14 +17,15 @@ public ExprStatement(Expression function) {
1717

1818
@Override
1919
public void execute() {
20+
super.interruptionCheck();
2021
expr.eval();
2122
}
22-
23+
2324
@Override
2425
public Value eval() {
2526
return expr.eval();
2627
}
27-
28+
2829
@Override
2930
public void accept(Visitor visitor) {
3031
visitor.visit(this);

0 commit comments

Comments
 (0)