Skip to content

Commit 0d795ec

Browse files
committed
Add generic tests and improve brackets.
1 parent 9a3fb02 commit 0d795ec

File tree

17 files changed

+163
-147
lines changed

17 files changed

+163
-147
lines changed

src/main/java/org/byteskript/skript/compiler/Pattern.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ protected void handle(final String string) {
6161
current = builder;
6262
} else {
6363
input = true;
64-
builder.append("(.+)");
64+
builder.append("(\\(.+\\)|.+?)");
6565
current = new StringBuilder();
6666
}
6767
}

src/main/java/org/byteskript/skript/lang/syntax/generic/BinaryOtherwiseExpression.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@
1010
import mx.kenzie.foundation.Type;
1111
import org.byteskript.skript.api.note.Documentation;
1212
import org.byteskript.skript.api.syntax.SimpleExpression;
13-
import org.byteskript.skript.compiler.CommonTypes;
14-
import org.byteskript.skript.compiler.Context;
15-
import org.byteskript.skript.compiler.Pattern;
16-
import org.byteskript.skript.compiler.SkriptLangSpec;
13+
import org.byteskript.skript.compiler.*;
1714
import org.byteskript.skript.lang.element.StandardElements;
1815
import org.objectweb.asm.Label;
1916

@@ -39,20 +36,27 @@ public Type getReturnType() {
3936
return CommonTypes.OBJECT;
4037
}
4138

39+
@Override
40+
public void preCompile(Context context, Pattern.Match match) throws Throwable {
41+
super.preCompile(context, match);
42+
context.getCompileCurrent().nested()[1].compile = false;
43+
}
44+
4245
@Override
4346
public void compile(Context context, Pattern.Match match) throws Throwable {
4447
final MethodBuilder method = context.getMethod();
45-
final Label first = new Label(), second = new Label();
48+
final ElementTree tree = context.getCompileCurrent().nested()[1];
49+
final Label end = new Label();
4650
method.writeCode((writer, visitor) -> {
47-
visitor.visitInsn(95); // swap
4851
visitor.visitInsn(89); // dup
49-
visitor.visitJumpInsn(199, first); // notnull
50-
visitor.visitInsn(87); // pop
51-
visitor.visitJumpInsn(167, second); // goto
52-
visitor.visitLabel(first);
53-
visitor.visitInsn(95); // swap
54-
visitor.visitInsn(87); // pop
55-
visitor.visitLabel(second); // x or y
52+
visitor.visitJumpInsn(199, end); // notnull
53+
visitor.visitInsn(87); // pop other null
54+
});
55+
tree.compile = true;
56+
tree.preCompile(context);
57+
tree.compile(context);
58+
method.writeCode((writer, visitor) -> {
59+
visitor.visitLabel(end); // x or y
5660
});
5761
}
5862

src/main/java/org/byteskript/skript/lang/syntax/generic/BracketExpression.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
)
3232
public class BracketExpression extends InnerModifyExpression {
3333

34-
private static final java.util.regex.Pattern PATTERN = java.util.regex.Pattern.compile("\\((.+)\\)");
34+
private static final java.util.regex.Pattern PATTERN = java.util.regex.Pattern.compile("^\\((.+)\\)$");
3535

3636
public BracketExpression() {
3737
super(SkriptLangSpec.LIBRARY, StandardElements.EXPRESSION, "(brackets)");

src/main/java/org/byteskript/skript/lang/syntax/generic/TernaryOtherwiseExpression.java

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@
1010
import mx.kenzie.foundation.Type;
1111
import org.byteskript.skript.api.note.Documentation;
1212
import org.byteskript.skript.api.syntax.SimpleExpression;
13-
import org.byteskript.skript.compiler.CommonTypes;
14-
import org.byteskript.skript.compiler.Context;
15-
import org.byteskript.skript.compiler.Pattern;
16-
import org.byteskript.skript.compiler.SkriptLangSpec;
13+
import org.byteskript.skript.compiler.*;
1714
import org.byteskript.skript.lang.element.StandardElements;
1815
import org.objectweb.asm.Label;
1916

@@ -42,25 +39,37 @@ public Type getReturnType() {
4239
return CommonTypes.OBJECT;
4340
}
4441

42+
@Override
43+
public void preCompile(Context context, Pattern.Match match) throws Throwable {
44+
super.preCompile(context, match);
45+
final ElementTree[] nested = context.getCompileCurrent().nested();
46+
nested[1].compile = false;
47+
nested[2].compile = false;
48+
}
49+
4550
// switched to raw bytecode form
46-
// had to use the avatar state for this manipulation :o
4751
@Override
4852
public void compile(Context context, Pattern.Match match) throws Throwable {
4953
final MethodBuilder method = context.getMethod();
50-
final Label first = new Label(), second = new Label();
54+
final Label alternative = new Label(), end = new Label();
55+
final ElementTree[] nested = context.getCompileCurrent().nested();
5156
method.writeCode((writer, visitor) -> {
52-
visitor.visitInsn(93); // dup2x1
53-
visitor.visitInsn(87); // pop
54-
visitor.visitInsn(87); // pop
5557
visitor.visitTypeInsn(192, "java/lang/Boolean"); // checkcast
5658
visitor.visitMethodInsn(182, "java/lang/Boolean", "booleanValue", "()Z", false); // virtual
57-
visitor.visitJumpInsn(153, first); // if 0
58-
visitor.visitInsn(87); // pop
59-
visitor.visitJumpInsn(167, second); // goto
60-
visitor.visitLabel(first);
61-
visitor.visitInsn(95); // swap
62-
visitor.visitInsn(87); // pop
63-
visitor.visitLabel(second); // x or y
59+
visitor.visitJumpInsn(153, alternative); // if 0
60+
});
61+
nested[1].compile = true;
62+
nested[1].preCompile(context);
63+
nested[1].compile(context);
64+
method.writeCode((writer, visitor) -> {
65+
visitor.visitJumpInsn(167, end); // goto
66+
visitor.visitLabel(alternative);
67+
});
68+
nested[2].compile = true;
69+
nested[2].preCompile(context);
70+
nested[2].compile(context);
71+
method.writeCode((writer, visitor) -> {
72+
visitor.visitLabel(end); // x or y
6473
});
6574
}
6675

src/test/java/org/byteskript/skript/test/ConversionTest.java

Lines changed: 0 additions & 35 deletions
This file was deleted.

src/test/java/org/byteskript/skript/test/PatternsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public void strange() {
8585
public void strangeNested() {
8686
final Pattern pattern = new Pattern(new String[]{"%Integer% (ms|millis|milli[ ]second[s])"}, null);
8787
final java.util.regex.Pattern result = pattern.getCompiledPatterns()[0];
88-
assert result.pattern().equals("^(.+) (?:ms|millis|milli(?: )?second(?:s)?)$");
88+
assert result.pattern().equals("^(\\(.+\\)|.+?) (?:ms|millis|milli(?: )?second(?:s)?)$");
8989
assert result.matcher("4 millis").matches();
9090
assert result.matcher("4 ms").matches();
9191
assert !result.matcher("5 mseconds").matches();

src/test/java/org/byteskript/skript/test/PropertiesTest.java

Lines changed: 0 additions & 47 deletions
This file was deleted.

src/test/java/org/byteskript/skript/test/SyntaxCreationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public void test_effect() throws Throwable {
6363
assert strings[0].equals("my [cool] %String% and %Number%");
6464
final Pattern pattern = new Pattern(strings, null);
6565
final java.util.regex.Pattern result = pattern.getCompiledPatterns()[0];
66-
assert result.pattern().equals("^my (?:cool )?(.+) and (.+)$");
66+
assert result.pattern().equals("^my (?:cool )?(\\(.+\\)|.+?) and (\\(.+\\)|.+?)$");
6767
assert result.matcher("my cool hello and 5").matches();
6868
assert result.matcher("my blob and blob").matches();
6969
}
@@ -81,7 +81,7 @@ public void test_expression() throws Throwable {
8181
assert strings[0].equals("a [cool] %String%");
8282
final Pattern pattern = new Pattern(strings, null);
8383
final java.util.regex.Pattern result = pattern.getCompiledPatterns()[0];
84-
assert result.pattern().equals("^a (?:cool )?(.+)$");
84+
assert result.pattern().equals("^a (?:cool )?(\\(.+\\)|.+?)$");
8585
assert result.matcher("a cool hello").matches();
8686
assert result.matcher("a bean?").matches();
8787
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
2+
function box:
3+
trigger:
4+
assert false
5+
return 5
6+
7+
function test:
8+
trigger:
9+
set {var} to 10 ? 5
10+
assert {var} is 10
11+
set {var} to null ? 5
12+
assert {var} is 5
13+
assert (10 ? 5) is 10
14+
assert (null ? 5) is 5
15+
set {var} to 10 ? box()
16+
assert {var} is 10
17+
set {var} to {blob} otherwise "hello"
18+
assert {var} is "hello": "Binary otherwise (long form) failed."
19+
set {var} to "goodbye" otherwise "hello"
20+
assert {var} is "goodbye": "Binary otherwise (long form) failed."
21+
set {var} to "bean" ? "hello"
22+
assert {var} is "bean": "Binary otherwise (short form) failed."
23+
set {var} to null ? "hello"
24+
assert {var} is "hello": "Binary otherwise (short form) failed."
25+
assert ("hi" ? "bye") is "hi": "Binary otherwise (short form) failed."
26+
assert (null ? "bye") is "bye": "Binary otherwise (short form) failed."
27+
assert (null ? null) is null: "Binary otherwise (short form) failed."
28+
return true

src/test/resources/tests/bracket.bsk

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
2+
function test:
3+
trigger:
4+
set {var} to 1 - 2 - 3
5+
assert {var} is 2: ("Var was " + {var})
6+
set {var} to (1 - (2 - 3))
7+
assert {var} is 2: ("Var was " + {var})
8+
set {var} to ((1 - 2) - 3)
9+
assert {var} is -4: ("Var was " + {var})
10+
return true

0 commit comments

Comments
 (0)