Исправлена выдача ошибки в include при ошибке парсинга

This commit is contained in:
Victor 2019-10-12 23:15:38 +03:00
parent e217e3bb84
commit 51b2ef93be
4 changed files with 49 additions and 1 deletions

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.parser.ast;
import com.annimon.ownlang.exceptions.ParseException;
import com.annimon.ownlang.parser.Lexer;
import com.annimon.ownlang.parser.Parser;
import com.annimon.ownlang.parser.SourceLoader;
@ -40,7 +41,7 @@ public final class IncludeStatement extends InterruptableNode implements Stateme
final Parser parser = new Parser(tokens);
final Statement program = parser.parse();
if (parser.getParseErrors().hasErrors()) {
return null;
throw new ParseException(parser.getParseErrors().toString());
}
return program;
}

View File

@ -0,0 +1,35 @@
use "std"
def testIncludeClass() {
include "src/test/resources/expressions/includeClass.own.txt"
obj = new IncludeClass()
assertEquals("1", obj.field1)
assertEquals(2, obj.field2)
assertEquals(42, obj.test())
}
def testIncludeNotExistsSource() {
assertFail(def() {
include "src/test.own"
})
}
def testCatchingIncludeNotExistsSource() {
res = try(def() {
include "src/test.own"
}, def(classname, message) = "ok")
assertEquals("ok", res)
}
def testIncludeParseErrorSource() {
assertFail(def() {
include "src/test/resources/expressions/includeParseErrorSource.own.txt"
})
}
def testCatchingIncludeParseErrorSource() {
res = try(def() {
include "src/test/resources/expressions/includeParseErrorSource.own.txt"
}, def(classname, message) = "ok")
assertEquals("ok", res)
}

View File

@ -0,0 +1,8 @@
class IncludeClass {
field1 = "1"
field2 = 2
def test() {
return 42
}
}

View File

@ -0,0 +1,4 @@
def test() = return println match x {
case case 1
}
value = "passed"