Skip to content

Commit 51b2ef9

Browse files
committed
Исправлена выдача ошибки в include при ошибке парсинга
1 parent e217e3b commit 51b2ef9

File tree

4 files changed

+49
-1
lines changed

4 files changed

+49
-1
lines changed

src/main/java/com/annimon/ownlang/parser/ast/IncludeStatement.java

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

3+
import com.annimon.ownlang.exceptions.ParseException;
34
import com.annimon.ownlang.parser.Lexer;
45
import com.annimon.ownlang.parser.Parser;
56
import com.annimon.ownlang.parser.SourceLoader;
@@ -40,7 +41,7 @@ public Statement loadProgram(String path) throws IOException {
4041
final Parser parser = new Parser(tokens);
4142
final Statement program = parser.parse();
4243
if (parser.getParseErrors().hasErrors()) {
43-
return null;
44+
throw new ParseException(parser.getParseErrors().toString());
4445
}
4546
return program;
4647
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
use "std"
2+
3+
def testIncludeClass() {
4+
include "src/test/resources/expressions/includeClass.own.txt"
5+
obj = new IncludeClass()
6+
assertEquals("1", obj.field1)
7+
assertEquals(2, obj.field2)
8+
assertEquals(42, obj.test())
9+
}
10+
11+
def testIncludeNotExistsSource() {
12+
assertFail(def() {
13+
include "src/test.own"
14+
})
15+
}
16+
17+
def testCatchingIncludeNotExistsSource() {
18+
res = try(def() {
19+
include "src/test.own"
20+
}, def(classname, message) = "ok")
21+
assertEquals("ok", res)
22+
}
23+
24+
def testIncludeParseErrorSource() {
25+
assertFail(def() {
26+
include "src/test/resources/expressions/includeParseErrorSource.own.txt"
27+
})
28+
}
29+
30+
def testCatchingIncludeParseErrorSource() {
31+
res = try(def() {
32+
include "src/test/resources/expressions/includeParseErrorSource.own.txt"
33+
}, def(classname, message) = "ok")
34+
assertEquals("ok", res)
35+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class IncludeClass {
2+
field1 = "1"
3+
field2 = 2
4+
5+
def test() {
6+
return 42
7+
}
8+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
def test() = return println match x {
2+
case case 1
3+
}
4+
value = "passed"

0 commit comments

Comments
 (0)