diff --git a/src/vm/includes/Command.h b/src/vm/includes/Command.h deleted file mode 100644 index 21d4822..0000000 --- a/src/vm/includes/Command.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef PSIL_COMMAND_H -#define PSIL_COMMAND_H - -#include - -namespace Command { - enum class CommandNum { - NIL = 1, - LDC = 2, - LD = 3, - SEL = 4, - JOIN = 5, - LDF = 6, - AP = 7, - RET = 8, - DUM = 9, - RAP = 10, - STOP = 11, - - ADD = 100, - SUB = 101, - - READCHAR = 201, - PUTCHAR = 202, - PUTNUM = 203, - - CONS = 301, - END = 1000 - }; - - static inline CommandNum int_to_cmd(int64_t _val) { - assert((_val > 0 && static_cast(_val) <= CommandNum::END)); - return static_cast(_val); - } - - static inline int64_t cmd_to_int(CommandNum _val) { - return static_cast(_val); - } -};// namespace Command - -#endif \ No newline at end of file diff --git a/src/vm/includes/ConsUtils.h b/src/vm/includes/ConsUtils.h index c7d5cc7..89208e9 100644 --- a/src/vm/includes/ConsUtils.h +++ b/src/vm/includes/ConsUtils.h @@ -12,12 +12,15 @@ namespace ConsUtils { static inline MCHandle car(const MCHandle &cell) { return dynamic_cast(*cell)._car; } static inline MCHandle cdr(const MCHandle &cell) { return dynamic_cast(*cell)._cdr; } static inline CellValType val(const MCHandle &cell) { return dynamic_cast(*cell)._val; } + static inline std::string_view strval(const MCHandle &cell) { return dynamic_cast(*cell)._val; } MCHandle cons(const MCHandle &car, const MCHandle &cdr); MCHandle pop(MCHandle &from); MCHandle push(MCHandle &to, const MCHandle &what); void append(MCHandle to, const MCHandle &what); - MCHandle makeIntCell(int64_t val); + MCHandle makeNumCell(int64_t val); + MCHandle makeStrCell(std::string val); void setcar(const MCHandle &to, const MCHandle &car); + void setcdr(const MCHandle &to, const MCHandle &cdr); };// namespace ConsUtils diff --git a/src/vm/includes/MemoryContext.h b/src/vm/includes/MemoryContext.h index c1c0809..f75c752 100644 --- a/src/vm/includes/MemoryContext.h +++ b/src/vm/includes/MemoryContext.h @@ -54,6 +54,10 @@ public: Cell &operator*() const { return *_target; } Cell *get() const noexcept { return _target; } + bool operator==(const Handle &rhs) const { + return _target == rhs._target; + } + private: Cell *_target = nullptr; }; diff --git a/src/vm/includes/Parser.h b/src/vm/includes/Parser.h index aa3732d..04e26f9 100644 --- a/src/vm/includes/Parser.h +++ b/src/vm/includes/Parser.h @@ -18,15 +18,10 @@ struct Cell; class Parser { public: - explicit Parser(VM &vm); - - void loadSecd(std::string_view input); + void loadStr(std::string_view input); + MCHandle parseExpr(); private: - void compileBody(const std::function &sink); - - VM &_vm; - class Tokenizer { public: void load(std::string_view input); diff --git a/src/vm/includes/VM.h b/src/vm/includes/VM.h index d862ba0..d4a90d8 100644 --- a/src/vm/includes/VM.h +++ b/src/vm/includes/VM.h @@ -34,6 +34,27 @@ private: std::istream &_instream; std::ostream &_outstream; + MCHandle NIL = ConsUtils::makeStrCell("NIL"); + MCHandle LDC = ConsUtils::makeStrCell("LDC"); + MCHandle LD = ConsUtils::makeStrCell("LD"); + MCHandle SEL = ConsUtils::makeStrCell("SEL"); + MCHandle JOIN = ConsUtils::makeStrCell("JOIN"); + MCHandle LDF = ConsUtils::makeStrCell("LDF"); + MCHandle AP = ConsUtils::makeStrCell("AP"); + MCHandle RET = ConsUtils::makeStrCell("RET"); + MCHandle DUM = ConsUtils::makeStrCell("DUM"); + MCHandle RAP = ConsUtils::makeStrCell("RAP"); + MCHandle STOP = ConsUtils::makeStrCell("STOP"); + + MCHandle ADD = ConsUtils::makeStrCell("ADD"); + MCHandle SUB = ConsUtils::makeStrCell("SUB"); + + MCHandle READCHAR = ConsUtils::makeStrCell("READCHAR"); + MCHandle PUTCHAR = ConsUtils::makeStrCell("PUTCHAR"); + MCHandle PUTNUM = ConsUtils::makeStrCell("PUTNUM"); + + MCHandle CONS = ConsUtils::makeStrCell("CONS"); + // void gc(); }; diff --git a/src/vm/src/ConsUtils.cpp b/src/vm/src/ConsUtils.cpp index fa482c8..ca03511 100644 --- a/src/vm/src/ConsUtils.cpp +++ b/src/vm/src/ConsUtils.cpp @@ -32,10 +32,18 @@ void ConsUtils::append(MCHandle to, const MCHandle &what) { dynamic_cast(*to)._cdr = cons(what, nullptr).get(); } -MCHandle ConsUtils::makeIntCell(int64_t val) { +MCHandle ConsUtils::makeNumCell(int64_t val) { return CURRENT_MC.load()->create_cell(val); } +MCHandle ConsUtils::makeStrCell(std::string val) { + return CURRENT_MC.load()->create_cell(std::move(val)); +} + void ConsUtils::setcar(const MCHandle &to, const MCHandle &car) { dynamic_cast(*to)._car = car.get(); } + +void ConsUtils::setcdr(const MCHandle &to, const MCHandle &cdr) { + dynamic_cast(*to)._cdr = cdr.get(); +} diff --git a/src/vm/src/Parser.cpp b/src/vm/src/Parser.cpp index 068e68c..16edb4d 100644 --- a/src/vm/src/Parser.cpp +++ b/src/vm/src/Parser.cpp @@ -7,93 +7,50 @@ #include #include -#include "Command.h" #include "ConsUtils.h" #include "MemoryContext.h" #include "VM.h" -Parser::Parser(VM &vm) : _vm(vm) {} -void Parser::loadSecd(std::string_view input) { +void Parser::loadStr(std::string_view input) { _tokenizer.load(input); - - MCHandle out(ConsUtils::cons(nullptr, nullptr)); - - compileBody([&out](MCHandle cmd) { ConsUtils::append(out, cmd); }); - _vm.loadControl(out); } -void Parser::compileBody(const std::function &sink) { - auto token = _tokenizer.getNext(); - if (token != "(") throw std::invalid_argument("Expected ("); +MCHandle Parser::parseExpr() { + while (!_tokenizer.empty()) { + std::string token = std::string(_tokenizer.peek()); + if (token == "(") { + _tokenizer.getNext(); + MCHandle out(ConsUtils::cons(nullptr, nullptr)); + while (token != ")") { + if (token == ".") { + _tokenizer.getNext(); - while (token != ")") { - token = _tokenizer.getNext(); + ConsUtils::setcdr(out, parseExpr()); - if (token == "NIL") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::NIL))); - } else if (token == "LDC") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); - sink(ConsUtils::makeIntCell(std::stoi(_tokenizer.getNext()))); - } else if (token == "LD") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LD))); - if (_tokenizer.getNext() != "(") throw std::invalid_argument("Expected ("); - int64_t frame = std::stoi(_tokenizer.getNext()); - if (_tokenizer.getNext() != ".") throw std::invalid_argument("Expected ."); - int64_t loc = std::stoi(_tokenizer.getNext()); - if (_tokenizer.getNext() != ")") throw std::invalid_argument("Expected )"); - sink(ConsUtils::cons(ConsUtils::makeIntCell(frame), ConsUtils::makeIntCell(loc))); - } else if (token == "SEL") { - MCHandle outt(ConsUtils::cons(nullptr, nullptr)); - compileBody([&outt](MCHandle cmd) { ConsUtils::append(outt, cmd); }); - MCHandle outf(ConsUtils::cons(nullptr, nullptr)); - compileBody([&outf](MCHandle cmd) { ConsUtils::append(outf, cmd);; }); + if (_tokenizer.getNext() != ")") + throw std::invalid_argument("Missing ) after pair"); - if (ConsUtils::car(outt).get() == nullptr) throw std::invalid_argument("Function body empty"); - if (ConsUtils::cdr(outt).get() == nullptr) throw std::invalid_argument("Function body empty"); - - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::SEL))); - sink(outt); - sink(outf); - } else if (token == "JOIN") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::JOIN))); - } else if (token == "LDF") { - MCHandle outt(ConsUtils::cons(nullptr, nullptr)); - compileBody([&outt](MCHandle cmd) { ConsUtils::append(outt, cmd); }); - - if (ConsUtils::car(outt).get() == nullptr) throw std::invalid_argument("Function body empty"); - - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDF))); - sink(outt); - } else if (token == "AP") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::AP))); - } else if (token == "RET") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::RET))); - } else if (token == "DUM") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::DUM))); - } else if (token == "RAP") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::RAP))); - } else if (token == "STOP") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::STOP))); - } else if (token == "ADD") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::ADD))); - } else if (token == "SUB") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::SUB))); - } else if (token == "READCHAR") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::READCHAR))); - } else if (token == "PUTCHAR") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); - } else if (token == "PUTNUM") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::PUTNUM))); - } else if (token == "CONS") { - sink(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::CONS))); + return out; + } + ConsUtils::append(out, parseExpr()); + token = _tokenizer.peek(); + } + _tokenizer.getNext(); + return out; } else { - if (token != ")") - throw std::invalid_argument("Unknown token " + token); + token = _tokenizer.getNext(); + try { + CellValType val = std::stoi(token); + return ConsUtils::makeNumCell(val); + } catch (...) { + return ConsUtils::makeStrCell(token); + } } } -} + assert(false); +} std::string Parser::Tokenizer::getNext() { std::string ret = std::move(_tokens.front()); _tokens.pop(); @@ -101,7 +58,7 @@ std::string Parser::Tokenizer::getNext() { } std::string_view Parser::Tokenizer::peek() const { - return _tokens.back(); + return _tokens.front(); } void Parser::Tokenizer::load(std::string_view input) { diff --git a/src/vm/src/VM.cpp b/src/vm/src/VM.cpp index fa01b86..f4d9b1c 100644 --- a/src/vm/src/VM.cpp +++ b/src/vm/src/VM.cpp @@ -6,7 +6,6 @@ #include #include -#include "Command.h" #include "ConsUtils.h" #include "VM.h" @@ -20,158 +19,120 @@ void VM::run() { void VM::step() { MCHandle poppedH = pop(_c); + if (poppedH == NIL) { + push(_s, nullptr); + } else if (poppedH == LDC) { + push(_s, pop(_c)); + } else if (poppedH == LD) { + MCHandle poppedH2 = pop(_c); - switch (Command::int_to_cmd(val(poppedH))) { - case Command::CommandNum::NIL: { - push(_s, nullptr); - break; + int64_t frame = val(car(poppedH2)); + int64_t arg = val(cdr(poppedH2)); + + assert(frame > 0); + assert(arg > 0); + + MCHandle curFrame = _e; + + for (int i = 1; i < frame; i++) { + curFrame = cdr(curFrame); } - case Command::CommandNum::LDC: { - push(_s, pop(_c)); - break; + + MCHandle curArg = car(curFrame); + + for (int i = 1; i < arg; i++) { + curArg = cdr(curArg); } - case Command::CommandNum::LD: { - MCHandle poppedH2 = pop(_c); - int64_t frame = val(car(poppedH2)); - int64_t arg = val(cdr(poppedH2)); + push(_s, car(curArg)); + } else if (poppedH == SEL) { - assert(frame > 0); - assert(arg > 0); + MCHandle popped2H = pop(_s); - MCHandle curFrame = _e; + MCHandle ct = pop(_c); + MCHandle cf = pop(_c); - for (int i = 1; i < frame; i++) { - curFrame = cdr(curFrame); - } - - MCHandle curArg = car(curFrame); - - for (int i = 1; i < arg; i++) { - curArg = cdr(curArg); - } - - push(_s, car(curArg)); - break; + push(_d, _c); + if (val(popped2H) > 0) { + _c = ct; + } else { + _c = cf; } - case Command::CommandNum::SEL: { - MCHandle popped2H = pop(_s); + } else if (poppedH == JOIN) { + _c = pop(_d); + } else if (poppedH == LDF) { + push(_s, cons(pop(_c), _e)); + } else if (poppedH == AP) { + MCHandle closureH = pop(_s); + MCHandle argsH = pop(_s); - MCHandle ct = pop(_c); - MCHandle cf = pop(_c); + push(_d, _s); + push(_d, _e); + push(_d, _c); - push(_d, _c); - if (val(popped2H) > 0) { - _c = ct; - } else { - _c = cf; - } + _s = cons(nullptr, nullptr); + _c = car(closureH); + _e = cdr(closureH); + push(_e, argsH); + } else if (poppedH == RET) { + MCHandle c = pop(_d); + MCHandle e = pop(_d); + MCHandle s = pop(_d); - break; - } - case Command::CommandNum::JOIN: { - _c = pop(_d); - break; - } - case Command::CommandNum::LDF: { - push(_s, cons(pop(_c), _e)); - break; - } - case Command::CommandNum::AP: { - MCHandle closureH = pop(_s); - MCHandle argsH = pop(_s); + MCHandle ret = pop(_s); - push(_d, _s); - push(_d, _e); - push(_d, _c); + _c = c; + _e = e; + _s = s; - _s = cons(nullptr, nullptr); - _c = car(closureH); - _e = cdr(closureH); - push(_e, argsH); - break; - } - case Command::CommandNum::RET: { - MCHandle c = pop(_d); - MCHandle e = pop(_d); - MCHandle s = pop(_d); - - MCHandle ret = pop(_s); - - _c = c; - _e = e; - _s = s; - - push(_s, ret); - // gc(); - break; - } - case Command::CommandNum::DUM: { - push(_e, nullptr); - break; - } - case Command::CommandNum::RAP: { - MCHandle closureH = pop(_s); - MCHandle argsH = pop(_s); + push(_s, ret); + // gc(); + } else if (poppedH == DUM) { + push(_e, nullptr); + } else if (poppedH == RAP) { + MCHandle closureH = pop(_s); + MCHandle argsH = pop(_s); - MCHandle origE = cdr(_e); + MCHandle origE = cdr(_e); - push(_d, _s); - push(_d, origE); - push(_d, _c); + push(_d, _s); + push(_d, origE); + push(_d, _c); - _s = cons(nullptr, nullptr); - _c = car(closureH); - _e = cdr(closureH); + _s = cons(nullptr, nullptr); + _c = car(closureH); + _e = cdr(closureH); - MCHandle fnEnv = cdr(closureH); - assert(_e.get() == fnEnv.get()); + MCHandle fnEnv = cdr(closureH); + assert(_e.get() == fnEnv.get()); - push(_e, argsH); - setcar(fnEnv, argsH); - break; - } - case Command::CommandNum::STOP: { - _stop = true; - // gc(); - break; - } - case Command::CommandNum::ADD: { - int64_t ret = val(pop(_s)) + val(pop(_s)); - push(_s, makeIntCell(ret)); - break; - } - case Command::CommandNum::SUB: { - break; - } - case Command::CommandNum::CONS: { - MCHandle h1 = pop(_s); - MCHandle h2 = pop(_s); + push(_e, argsH); + setcar(fnEnv, argsH); + } else if (poppedH == STOP) { + _stop = true; + } else if (poppedH == ADD) { + int64_t ret = val(pop(_s)) + val(pop(_s)); + push(_s, makeNumCell(ret)); + } else if (poppedH == SUB) { + assert(false); + int64_t ret = val(pop(_s)) + val(pop(_s)); + push(_s, makeNumCell(ret)); + } else if (poppedH == CONS) { + MCHandle h1 = pop(_s); + MCHandle h2 = pop(_s); - push(_s, cons(h1, h2)); - break; - } - case Command::CommandNum::READCHAR: { - char c; - _instream >> c; - push(_s, makeIntCell(c)); - break; - } - case Command::CommandNum::PUTCHAR: { - _outstream << (char) val(pop(_s)); - break; - } - case Command::CommandNum::PUTNUM: { - _outstream << val(pop(_s)); - break; - } - case Command::CommandNum::END: { - assert(false); - break; - } - default: - assert(false); + push(_s, cons(h1, h2)); + } else if (poppedH == READCHAR) { + char c; + _instream >> c; + push(_s, makeNumCell(c)); + } else if (poppedH == PUTCHAR) { + _outstream << (char) val(pop(_s)); + } else if (poppedH == PUTNUM) { + _outstream << val(pop(_s)); + } else { + assert(false); } } diff --git a/test/vm/VMTest.cpp b/test/vm/VMTest.cpp index 8c657d9..b4fb91f 100644 --- a/test/vm/VMTest.cpp +++ b/test/vm/VMTest.cpp @@ -1,6 +1,5 @@ #include -#include "Command.h" #include "ConsUtils.h" #include "VM.h" @@ -11,11 +10,11 @@ TEST(VMTest, BasicHello) { MemoryContext mc; VM vm(ssin, ssout); MCHandle newc(ConsUtils::cons(nullptr, nullptr)); - ConsUtils::append(newc, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::NIL))); - ConsUtils::append(newc, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); - ConsUtils::append(newc, ConsUtils::makeIntCell('h')); - ConsUtils::append(newc, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); - ConsUtils::append(newc, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::STOP))); + ConsUtils::append(newc, ConsUtils::makeStrCell("NIL")); + ConsUtils::append(newc, ConsUtils::makeStrCell("LDC")); + ConsUtils::append(newc, ConsUtils::makeNumCell('h')); + ConsUtils::append(newc, ConsUtils::makeStrCell("PUTCHAR")); + ConsUtils::append(newc, ConsUtils::makeStrCell("STOP")); vm.loadControl(newc); vm.run(); } @@ -28,42 +27,42 @@ TEST(VMTest, BasicHello) { // std::stringstream ssout; // { // VM vm(ssin, ssout); -// vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::STOP))); +// vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::STOP))); // // // True branch true test -// ConsCell *tbtt = vm.makeCell(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::JOIN))); -// vm.push(tbtt, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); +// ConsCell *tbtt = vm.makeCell(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::JOIN))); +// vm.push(tbtt, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); // vm.push(tbtt, vm.makeCell('1')); -// vm.push(tbtt, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); +// vm.push(tbtt, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); // // // False branch true test -// ConsCell *fbtt = vm.makeCell(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::JOIN))); -// vm.push(fbtt, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); +// ConsCell *fbtt = vm.makeCell(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::JOIN))); +// vm.push(fbtt, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); // vm.push(fbtt, vm.makeCell('2')); -// vm.push(fbtt, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); +// vm.push(fbtt, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); // // // True branch false test -// ConsCell *tbft = vm.makeCell(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::JOIN))); -// vm.push(tbft, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); +// ConsCell *tbft = vm.makeCell(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::JOIN))); +// vm.push(tbft, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); // vm.push(tbft, vm.makeCell('3')); -// vm.push(tbft, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); +// vm.push(tbft, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); // // // False branch false test -// ConsCell *fbft = vm.makeCell(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::JOIN))); -// vm.push(fbft, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); +// ConsCell *fbft = vm.makeCell(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::JOIN))); +// vm.push(fbft, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); // vm.push(fbft, vm.makeCell('4')); -// vm.push(fbft, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); +// vm.push(fbft, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); // // vm.appendCommand(fbft); // vm.appendCommand(tbft); -// vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::SEL))); +// vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::SEL))); // vm.appendCommand(vm.makeCell(0)); -// vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); +// vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); // vm.appendCommand(fbtt); // vm.appendCommand(tbtt); -// vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::SEL))); +// vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::SEL))); // vm.appendCommand(vm.makeCell(1)); -// vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); +// vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); // vm.run(); // } // ssout.flush(); @@ -75,23 +74,23 @@ TEST(VMTest, BasicHello) { // std::stringstream ssout; // { // VM vm(ssin, ssout); -// vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::STOP))); -// vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); +// vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::STOP))); +// vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); // -// vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::AP))); +// vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::AP))); // // // Add function -// ConsCell *addfn = vm.makeCell(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::RET))); -// vm.push(addfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::ADD))); +// ConsCell *addfn = vm.makeCell(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::RET))); +// vm.push(addfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::ADD))); // vm.push(addfn, vm.makeCell(vm.makeCell(1), vm.makeCell(2))); -// vm.push(addfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LD))); +// vm.push(addfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LD))); // vm.push(addfn, vm.makeCell(vm.makeCell(1), vm.makeCell(1))); -// vm.push(addfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LD))); +// vm.push(addfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LD))); // vm.appendCommand(addfn); -// vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDF))); +// vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDF))); // vm.appendCommand( // vm.makeCell(vm.makeCell(1), vm.makeCell(vm.makeCell('2')))); -// vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); +// vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); // vm.run(); // } // ssout.flush(); @@ -103,140 +102,140 @@ TEST(VMTest, BasicHello) { // std::stringstream ssout; // { // VM vm(ssin, ssout); -// vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::STOP))); +// vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::STOP))); // -// vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::RAP))); +// vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::RAP))); // // // Fib function -// ConsCell *fibfn = vm.makeCell(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::RET))); +// ConsCell *fibfn = vm.makeCell(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::RET))); // // // 0 case -// ConsCell *zcase = vm.makeCell(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::JOIN))); +// ConsCell *zcase = vm.makeCell(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::JOIN))); // vm.push(zcase, vm.makeCell(0)); -// vm.push(zcase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); +// vm.push(zcase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); // // // 1 case -// ConsCell *ocase = vm.makeCell(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::JOIN))); +// ConsCell *ocase = vm.makeCell(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::JOIN))); // vm.push(ocase, vm.makeCell(1)); -// vm.push(ocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); +// vm.push(ocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); // // // >1 case -// ConsCell *gocase = vm.makeCell(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::JOIN))); -// vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::ADD))); +// ConsCell *gocase = vm.makeCell(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::JOIN))); +// vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::ADD))); // -// vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::AP))); +// vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::AP))); // vm.push(gocase, vm.makeCell(vm.makeCell(2), vm.makeCell(1))); -// vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LD))); +// vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LD))); // -// vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::CONS))); -// vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::ADD))); +// vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::CONS))); +// vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::ADD))); // vm.push(gocase, vm.makeCell(-2)); -// vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); +// vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); // vm.push(gocase, vm.makeCell(vm.makeCell(1), vm.makeCell(1))); -// vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LD))); -// vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::NIL))); +// vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LD))); +// vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::NIL))); // -// vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::AP))); +// vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::AP))); // vm.push(gocase, vm.makeCell(vm.makeCell(2), vm.makeCell(1))); -// vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LD))); +// vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LD))); // -// vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::CONS))); -// vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::ADD))); +// vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::CONS))); +// vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::ADD))); // vm.push(gocase, vm.makeCell(-1)); -// vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); +// vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); // vm.push(gocase, vm.makeCell(vm.makeCell(1), vm.makeCell(1))); -//vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LD))); -//vm.push(gocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::NIL))); +//vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LD))); +//vm.push(gocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::NIL))); // //// >=1 case -//ConsCell *geocase = vm.makeCell(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::JOIN))); +//ConsCell *geocase = vm.makeCell(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::JOIN))); //vm.push(geocase, ocase); //vm.push(geocase, gocase); -//vm.push(geocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::SEL))); -//vm.push(geocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::ADD))); +//vm.push(geocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::SEL))); +//vm.push(geocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::ADD))); //vm.push(geocase, vm.makeCell(-1)); -//vm.push(geocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); +//vm.push(geocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); //vm.push(geocase, vm.makeCell(vm.makeCell(1), vm.makeCell(1))); -//vm.push(geocase, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LD))); +//vm.push(geocase, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LD))); // //vm.push(fibfn, zcase); //vm.push(fibfn, geocase); -//vm.push(fibfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::SEL))); +//vm.push(fibfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::SEL))); //vm.push(fibfn, vm.makeCell(vm.makeCell(1), vm.makeCell(1))); -//vm.push(fibfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LD))); +//vm.push(fibfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LD))); // //// Fib caller function -//ConsCell *fibcallfn = vm.makeCell(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::RET))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::PUTNUM))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); +//ConsCell *fibcallfn = vm.makeCell(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::RET))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::PUTNUM))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); //vm.push(fibcallfn, vm.makeCell(' ')); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::AP))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::AP))); //vm.push(fibcallfn, vm.makeCell(vm.makeCell(1), vm.makeCell(1))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LD))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::CONS))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LD))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::CONS))); //vm.push(fibcallfn, vm.makeCell(10)); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::NIL))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::NIL))); // -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::ADD))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::ADD))); //vm.push(fibcallfn, vm.makeCell('0')); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::AP))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::AP))); //vm.push(fibcallfn, vm.makeCell(vm.makeCell(1), vm.makeCell(1))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LD))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::CONS))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LD))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::CONS))); //vm.push(fibcallfn, vm.makeCell(6)); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::NIL))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::NIL))); // -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::ADD))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::ADD))); //vm.push(fibcallfn, vm.makeCell('0')); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::AP))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::AP))); //vm.push(fibcallfn, vm.makeCell(vm.makeCell(1), vm.makeCell(1))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LD))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::CONS))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LD))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::CONS))); //vm.push(fibcallfn, vm.makeCell(5)); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::NIL))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::NIL))); // -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::ADD))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::ADD))); //vm.push(fibcallfn, vm.makeCell('0')); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::AP))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::AP))); //vm.push(fibcallfn, vm.makeCell(vm.makeCell(1), vm.makeCell(1))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LD))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::CONS))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LD))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::CONS))); //vm.push(fibcallfn, vm.makeCell(4)); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::NIL))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::NIL))); // -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::ADD))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::PUTCHAR))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::ADD))); //vm.push(fibcallfn, vm.makeCell('0')); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::AP))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::AP))); //vm.push(fibcallfn, vm.makeCell(vm.makeCell(1), vm.makeCell(1))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LD))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::CONS))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LD))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::CONS))); //vm.push(fibcallfn, vm.makeCell(3)); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDC))); -//vm.push(fibcallfn, ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::NIL))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDC))); +//vm.push(fibcallfn, ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::NIL))); // // //vm.appendCommand(fibcallfn); -//vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDF))); +//vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDF))); // -//vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::CONS))); +//vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::CONS))); //vm.appendCommand(fibfn); -//vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::LDF))); -//vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::NIL))); +//vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::LDF))); +//vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::NIL))); // -//vm.appendCommand(ConsUtils::makeIntCell(Command::cmd_to_int(Command::CommandNum::DUM))); +//vm.appendCommand(ConsUtils::makeNumCell(Command::cmd_to_int(Command::CommandNum::DUM))); //vm.run(); //} //ssout.flush(); diff --git a/test/vm/VMWithParserTest.cpp b/test/vm/VMWithParserTest.cpp index 97fd8a9..bdc3837 100644 --- a/test/vm/VMWithParserTest.cpp +++ b/test/vm/VMWithParserTest.cpp @@ -9,8 +9,9 @@ TEST(VMWithParserTest, BasicHello) { { MemoryContext mc; VM vm(ssin, ssout); - Parser parser(vm); - parser.loadSecd("( LDC 104 PUTCHAR STOP )"); + Parser parser; + parser.loadStr("( LDC 104 PUTCHAR STOP )"); + vm.loadControl(parser.parseExpr()); vm.run(); } ssout.flush(); @@ -23,9 +24,10 @@ TEST(VMWithParserTest, BasicBranch) { { MemoryContext mc; VM vm(ssin, ssout); - Parser parser(vm); - parser.loadSecd( + Parser parser; + parser.loadStr( "( LDC 1 SEL ( LDC 10 PUTNUM JOIN ) ( LDC 20 PUTNUM JOIN ) LDC 0 SEL ( LDC 30 PUTNUM JOIN ) ( LDC 40 PUTNUM JOIN ) STOP )"); + vm.loadControl(parser.parseExpr()); vm.run(); } ssout.flush(); @@ -38,8 +40,9 @@ TEST(VMWithParserTest, BasicFunction) { { MemoryContext mc; VM vm(ssin, ssout); - Parser parser(vm); - parser.loadSecd("( NIL LDC 1 CONS LDC 2 CONS LDF ( LD ( 1 . 1 ) LD ( 1 . 2 ) ADD RET ) AP PUTNUM STOP )"); + Parser parser; + parser.loadStr("( NIL LDC 1 CONS LDC 2 CONS LDF ( LD ( 1 . 1 ) LD ( 1 . 2 ) ADD RET ) AP PUTNUM STOP )"); + vm.loadControl(parser.parseExpr()); vm.run(); } ssout.flush(); @@ -52,9 +55,10 @@ TEST(VMWithParserTest, RecFunction) { { MemoryContext mc; VM vm(ssin, ssout); - Parser parser(vm); - parser.loadSecd( + Parser parser; + parser.loadStr( "( DUM NIL LDF ( LD ( 1 . 1 ) SEL ( LD ( 1 . 1 ) LDC -1 ADD SEL ( NIL LD ( 1 . 1 ) LDC -1 ADD CONS LD ( 2 . 1 ) AP NIL LD ( 1 . 1 ) LDC -2 ADD CONS LD ( 2 . 1 ) AP ADD JOIN ) ( LDC 1 JOIN ) JOIN ) ( LDC 0 JOIN ) RET ) CONS LDF ( NIL LDC 10 CONS LD ( 1 . 1 ) AP RET ) RAP PUTNUM STOP )"); + vm.loadControl(parser.parseExpr()); vm.run(); } ssout.flush();