mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 00:34:20 +03:00
Исправлена выдача ошибки в include при ошибке парсинга
This commit is contained in:
parent
e217e3bb84
commit
51b2ef93be
@ -1,5 +1,6 @@
|
|||||||
package com.annimon.ownlang.parser.ast;
|
package com.annimon.ownlang.parser.ast;
|
||||||
|
|
||||||
|
import com.annimon.ownlang.exceptions.ParseException;
|
||||||
import com.annimon.ownlang.parser.Lexer;
|
import com.annimon.ownlang.parser.Lexer;
|
||||||
import com.annimon.ownlang.parser.Parser;
|
import com.annimon.ownlang.parser.Parser;
|
||||||
import com.annimon.ownlang.parser.SourceLoader;
|
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 Parser parser = new Parser(tokens);
|
||||||
final Statement program = parser.parse();
|
final Statement program = parser.parse();
|
||||||
if (parser.getParseErrors().hasErrors()) {
|
if (parser.getParseErrors().hasErrors()) {
|
||||||
return null;
|
throw new ParseException(parser.getParseErrors().toString());
|
||||||
}
|
}
|
||||||
return program;
|
return program;
|
||||||
}
|
}
|
||||||
|
35
src/test/resources/expressions/include.own
Normal file
35
src/test/resources/expressions/include.own
Normal 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)
|
||||||
|
}
|
8
src/test/resources/expressions/includeClass.own.txt
Normal file
8
src/test/resources/expressions/includeClass.own.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
class IncludeClass {
|
||||||
|
field1 = "1"
|
||||||
|
field2 = 2
|
||||||
|
|
||||||
|
def test() {
|
||||||
|
return 42
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
def test() = return println match x {
|
||||||
|
case case 1
|
||||||
|
}
|
||||||
|
value = "passed"
|
Loading…
Reference in New Issue
Block a user