Skip to content

Commit 5931d1e

Browse files
committed
Language/VirtualMachine: push-pop value
1 parent 418e770 commit 5931d1e

4 files changed

Lines changed: 32 additions & 5 deletions

File tree

modules/Language/TreeParser.mpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export namespace CppUtils::Language::TreeParser
3636
*
3737

3838
@{.parseNode#<@} / def parseNode
39-
/ [ ( {.getChar#>*} getChar();
39+
[0: [0" [0 ( {.getChar#>*} ]] / getChar();
4040
{.skipSpaces#>*} / skipSpaces();
4141
{.parseKeyword#>*} / parseKeyword();
4242
*

modules/Language/VirtualMachine.mpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ export namespace CppUtils::Language::VirtualMachine
225225
return std::unexpected{"No type defined"sv};
226226
else if (auto typeId = stack.template pop<std::size_t>(); not typeId) [[unlikely]]
227227
return std::unexpected{typeId.error()};
228-
else if (auto result = Type::Tuple::visitAt(types, typeId.value(), [](const auto& value) { return value; });
228+
else if (auto result = Type::Tuple::visitAt(types, typeId.value(), [&stack](const auto& value) { return stack.push(value); });
229229
not result) [[unlikely]]
230230
return std::unexpected{result.error()};
231231
break;

tests/Language/TreeParser.mpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export namespace CppUtils::UnitTest::Language::TreeParser
77
{
88
inline auto _ = TestSuite{
99
"Language/TreeParser",
10-
{"Logger"},
10+
{"Logger", "Language/VirtualMachine"},
1111
[](auto& suite) {
1212
using namespace std::literals;
1313
using namespace CppUtils::String::Literals;

tests/Language/VirtualMachine.mpp

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ import CppUtils;
55

66
export namespace CppUtils::UnitTest::Language::VirtualMachine
77
{
8-
inline auto _ = TestSuite{"Language/VirtualMachine", {"Logger", "Container/Stack"}, [](auto& suite) {
8+
inline auto _ = TestSuite{
9+
"Language/VirtualMachine",
10+
{"Logger", "Container/Stack"},
11+
[](auto& suite) {
912
using namespace std::literals;
1013
using Logger = CppUtils::Logger<"CppUtils">;
1114
namespace VM = CppUtils::Language::VirtualMachine;
@@ -26,8 +29,32 @@ export namespace CppUtils::UnitTest::Language::VirtualMachine
2629
suite.expect(result.has_value());
2730
});
2831

32+
suite.addTest("push-pop bool", [&] {
33+
constexpr auto source = u8",[0:,[0_,"sv;
34+
auto result = VM::execute<bool>(source);
35+
if (not result)
36+
Logger::print<"error">("{}", result.error());
37+
suite.expect(result.has_value());
38+
});
39+
40+
suite.addTest("push-pop char", [&] {
41+
constexpr auto source = u8",[0:,[0_,"sv;
42+
auto result = VM::execute<char>(source);
43+
if (not result)
44+
Logger::print<"error">("{}", result.error());
45+
suite.expect(result.has_value());
46+
});
47+
2948
suite.addTest("push-pop int", [&] {
30-
constexpr auto source = u8R"(,[0", [0~,)"sv;
49+
constexpr auto source = u8",[0:,[0_,"sv;
50+
auto result = VM::execute<int>(source);
51+
if (not result)
52+
Logger::print<"error">("{}", result.error());
53+
suite.expect(result.has_value());
54+
});
55+
56+
suite.addTest("import int", [&] {
57+
constexpr auto source = u8R"(,[0",)"sv;
3158
auto number = 42;
3259
auto result = VM::execute(source, VM::NoFunctions{}, VM::makeReferences(number));
3360
if (not result)

0 commit comments

Comments
 (0)