Add Interpreter tests and improve Parser error logging

A set of tests for the InterpreterObject has been added to enhance its reliability and maintainability. The tests check the essential functionalities such as its creation, execution, saving, loading, and destruction. Furthermore, the error logging for the Parser has been improved, now providing more precise location of detected errors. The changes improve the robustness and debugability of the code.
This commit is contained in:
IlushaShurupov 2023-08-01 18:57:36 +03:00
parent 0cefb47b66
commit b06e1da529
3 changed files with 44 additions and 1 deletions

View file

@ -541,8 +541,9 @@ bool obj::BCgen::Compile(obj::MethodObject* method) {
auto res = sParger->parse(script); auto res = sParger->parse(script);
if (res.err) { if (res.err) {
auto loc = res.err->get_err_location(script.read());
// TODO : print parse error // TODO : print parse error
auto loc = res.err->get_err_location(script.read());
printf("Parser Error (%i,%i): \n", loc.head, loc.tail);
// tp::gLogeer->write(tp::sfmt("Parser Error (%i,%i): \n", loc.head, loc.tail), true, tp::Logger::LogEntry::ERR); // tp::gLogeer->write(tp::sfmt("Parser Error (%i,%i): \n", loc.head, loc.tail), true, tp::Logger::LogEntry::ERR);
// tp::GLog->write(res.err->mDescr, true, tp::Logger::LogEntry::ERR); // tp::GLog->write(res.err->mDescr, true, tp::Logger::LogEntry::ERR);
return false; return false;

View file

@ -10,6 +10,7 @@ using namespace obj;
void testCore(); void testCore();
void testPrimitives(); void testPrimitives();
void testInterpreter();
int main() { int main() {
@ -20,6 +21,7 @@ int main() {
testCore(); testCore();
testPrimitives(); testPrimitives();
testInterpreter();
module.deinitialize(); module.deinitialize();
} }

View file

@ -0,0 +1,40 @@
#include "NewPlacement.hpp"
#include "Testing.hpp"
#include "core/object.h"
#include "primitives/methodobject.h"
#include "primitives/interpreterobject.h"
#include "primitives/linkobject.h"
#include "compiler/function.h"
#include "interpreter/interpreter.h"
using namespace tp;
using namespace obj;
TEST_DEF_STATIC(Simple) {
auto method = NDO_CAST(MethodObject, NDO->create("method"));
auto interpreter = NDO_CAST(InterpreterObject, NDO->create("interpreter"));
interpreter->getMember<LinkObject>("target method")->setLink(method);
method->mScript->mReadable->val = "<< 3;";
method->compile();
interpreter->exec();
NDO->save(interpreter, "interp.o");
auto interpreterLoaded = NDO_CAST(InterpreterObject, NDO->load("interp.o"));
interpreterLoaded->exec();
NDO->destroy(interpreter);
NDO->destroy(interpreterLoaded);
}
TEST_DEF(Interpreter) {
testSimple();
}