From 8e3059beb4380e2d3bc9a88bdd3deface08bb0e0 Mon Sep 17 00:00:00 2001 From: Jack Date: Wed, 24 Oct 2018 17:07:01 +0200 Subject: [PATCH] refactored code folder structure, fixed some namings or const correctness on methods --- Makefile.osx | 22 ++--- grammar.sh | 2 + .../Impossible.xcodeproj/project.pbxproj | 28 ++++--- src/code.cpp | 24 +++++- src/code.h | 17 ++-- src/collection.cpp | 26 ------ src/collection.h | 12 +-- src/instruction.cpp | 2 +- src/main.cpp | 82 ++----------------- src/traits.cpp | 4 +- src/{ => types}/lazy.cpp | 0 src/{ => types}/lazy.h | 0 src/{ => types}/range.h | 2 +- src/vm.cpp | 6 +- src/vm.h | 17 ++-- 15 files changed, 81 insertions(+), 163 deletions(-) create mode 100755 grammar.sh rename src/{ => types}/lazy.cpp (100%) rename src/{ => types}/lazy.h (100%) rename src/{ => types}/range.h (98%) diff --git a/Makefile.osx b/Makefile.osx index 46c7a01..0d5e337 100644 --- a/Makefile.osx +++ b/Makefile.osx @@ -3,10 +3,10 @@ TARGET = impossible CC := clang CXX := clang++ -INCLUDE = +INCLUDE = -Iparser -I. -I/usr/local/opt/flex/include -all: CFLAGS = $(INCLUDE) -std=c++14 -stdlib=libc++ -Wno-deprecated-register -Iparser -I. -I/usr/local/opt/flex/include -opt: CFLAGS = $(INCLUDE) -O3 -ffast-math -pipe -std=c++14 -stdlib=libc++ -Wno-deprecated-register -Iparser -I. -I/usr/local/opt/flex/include +all: CFLAGS = $(INCLUDE) -std=c++14 -stdlib=libc++ -Wno-deprecated-register +opt: CFLAGS = $(INCLUDE) -O3 -ffast-math -pipe -std=c++14 -stdlib=libc++ -Wno-deprecated-register CXXFLAGS = $(CFLAGS) @@ -14,11 +14,11 @@ LDFLAGS = # Find all source files BUILD_DIR = objects +SRC_DIR = src -SOURCE = . -SRC_CPP = $(foreach dir, $(SOURCE), $(wildcard $(dir)/*.cpp)) ./parser/parser.cpp ./parser/lexer.cpp ./parser/compiler.cpp +SRC_CPP = $(foreach dir, $(SRC_DIR), $(wildcard $(dir)/*.cpp)) $(SRC_DIR)/parser/parser.cpp $(SRC_DIR)/parser/lexer.cpp $(SRC_DIR)/parser/compiler.cpp OBJ_CPP = $(patsubst %.cpp, %.o, $(SRC_CPP)) -OBJS = $(addprefix $(BUILD_DIR)/, $(subst /,-,$(subst ./,,$(OBJ_CPP)))) +OBJS = $(addprefix $(BUILD_DIR)/, $(subst /,-,$(subst src/,,$(OBJ_CPP)))) $(info $$var is [$(subst /,_, parser/parser.cpp)]) @@ -35,10 +35,10 @@ $(BUILD_DIR) : mkdir -p $@ parser/lexer.cpp: parser/impossible.l parser/parser.cpp - /usr/local/opt/flex/bin/flex -c++ --outfile=parser/lexer.cpp $< + /usr/local/opt/flex/bin/flex -c++ --outfile=src/parser/lexer.cpp $< parser/parser.cpp: parser/impossible.ypp parser/parser.cpp - /usr/local/opt/bison/bin/bison -d -v --output-file=parser/parser.cpp $< + /usr/local/opt/bison/bin/bison -d -v --output-file=src/parser/parser.cpp $< $(TARGET) : $(OBJS) $(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS) @@ -49,8 +49,10 @@ $(BUILD_DIR)/parser-compiler.o: parser/compiler.cpp parser/parser.cpp $(BUILD_DIR)/parser-%.o: parser/%.cpp $(CXX) $(CXXFLAGS) -c $< -o $@ -$(BUILD_DIR)/%.o: $(subst -,/,%.cpp) $(BUILD_DIR) parser/parser.cpp +$(BUILD_DIR)/%.o: $(subst -,/,%.cpp) $(dir $@) parser/parser.cpp $(CXX) $(CXXFLAGS) -c $< -o $@ clean: - rm -f $(BUILD_DIR)/*.o $(TARGET) parser/location.hh parser/stack.hh parser/position.hh parser/parser.output parser/lexer.cpp parser/parser.cpp parser/parser.hpp \ No newline at end of file + rm -f $(BUILD_DIR)/*.o $(TARGET) + rm -f $(SRC_DIR)/parser/location.hh $(SRC_DIR)/parser/stack.hh $(SRC_DIR)/parser/position.hh + rm -f $(SRC_DIR)/parser/parser.output $(SRC_DIR)/parser/lexer.cpp $(SRC_DIR)/parser/parser.cpp parser/parser.hpp \ No newline at end of file diff --git a/grammar.sh b/grammar.sh new file mode 100755 index 0000000..46e54b4 --- /dev/null +++ b/grammar.sh @@ -0,0 +1,2 @@ +/usr/local/opt/bison/bin/bison -d -v --output-file=src/parser/parser.cpp src/parser/impossible.ypp +/usr/local/opt/flex/bin/flex -c++ --outfile=src/parser/lexer.cpp src/parser/impossible.l \ No newline at end of file diff --git a/projects/xcode/Impossible.xcodeproj/project.pbxproj b/projects/xcode/Impossible.xcodeproj/project.pbxproj index 6fc9414..73d3760 100644 --- a/projects/xcode/Impossible.xcodeproj/project.pbxproj +++ b/projects/xcode/Impossible.xcodeproj/project.pbxproj @@ -11,7 +11,6 @@ 046E4F19217EA22300DB959C /* code.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04F6E066217BE93D0037C307 /* code.cpp */; }; 046E4F1B217EA22300DB959C /* help.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04F6E06B217BE93D0037C307 /* help.cpp */; }; 046E4F1E217EA22300DB959C /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04F6E06F217BE93D0037C307 /* instruction.cpp */; }; - 046E4F20217EA22300DB959C /* lazy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04F6E071217BE93D0037C307 /* lazy.cpp */; }; 046E4F2D217EA22D00DB959C /* tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04806510217EA1880063ACD5 /* tests.cpp */; }; 04A637F6217F977700436B0F /* parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04A637F4217F977700436B0F /* parser.cpp */; }; 04A637F7217F977700436B0F /* parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04A637F4217F977700436B0F /* parser.cpp */; }; @@ -28,9 +27,10 @@ 04F6E084217BE93D0037C307 /* code.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04F6E066217BE93D0037C307 /* code.cpp */; }; 04F6E086217BE93D0037C307 /* help.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04F6E06B217BE93D0037C307 /* help.cpp */; }; 04F6E088217BE93D0037C307 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04F6E06F217BE93D0037C307 /* instruction.cpp */; }; - 04F6E089217BE93D0037C307 /* lazy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04F6E071217BE93D0037C307 /* lazy.cpp */; }; 04F6E08B217BE93D0037C307 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04F6E075217BE93D0037C307 /* main.cpp */; }; 04F6E090217BE93D0037C307 /* vm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04F6E080217BE93D0037C307 /* vm.cpp */; }; + 04FE2F372180C1EF00871297 /* lazy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04FE2F342180C1EF00871297 /* lazy.cpp */; }; + 04FE2F382180C1EF00871297 /* lazy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04FE2F342180C1EF00871297 /* lazy.cpp */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -80,12 +80,12 @@ 04F6E06C217BE93D0037C307 /* help.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = help.h; sourceTree = ""; }; 04F6E06F217BE93D0037C307 /* instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = instruction.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; 04F6E070217BE93D0037C307 /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = ""; }; - 04F6E071217BE93D0037C307 /* lazy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = lazy.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - 04F6E072217BE93D0037C307 /* lazy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lazy.h; sourceTree = ""; }; 04F6E075217BE93D0037C307 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; }; - 04F6E076217BE93D0037C307 /* range.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = range.h; sourceTree = ""; }; 04F6E080217BE93D0037C307 /* vm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vm.cpp; sourceTree = ""; }; 04F6E081217BE93D0037C307 /* vm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vm.h; sourceTree = ""; }; + 04FE2F342180C1EF00871297 /* lazy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lazy.cpp; sourceTree = ""; }; + 04FE2F352180C1EF00871297 /* lazy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lazy.h; sourceTree = ""; }; + 04FE2F362180C1EF00871297 /* range.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = range.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -152,6 +152,7 @@ children = ( 0480650E217EA1880063ACD5 /* tests */, 04A637E9217F92E600436B0F /* parser */, + 04FE2F332180C1EF00871297 /* types */, 04F6E066217BE93D0037C307 /* code.cpp */, 04F6E067217BE93D0037C307 /* code.h */, 04F6E06A217BE93D0037C307 /* defines.h */, @@ -159,8 +160,6 @@ 04F6E06C217BE93D0037C307 /* help.h */, 04F6E06F217BE93D0037C307 /* instruction.cpp */, 04F6E070217BE93D0037C307 /* instruction.h */, - 04F6E071217BE93D0037C307 /* lazy.cpp */, - 04F6E072217BE93D0037C307 /* lazy.h */, 04C080CD2180B4B80054BED3 /* collection.cpp */, 04C080CE2180B4B80054BED3 /* collection.h */, 04C080CF2180B4B80054BED3 /* traits.cpp */, @@ -168,7 +167,6 @@ 04C080D12180B4B80054BED3 /* value.cpp */, 04C080D22180B4B80054BED3 /* value.h */, 04F6E075217BE93D0037C307 /* main.cpp */, - 04F6E076217BE93D0037C307 /* range.h */, 04F6E080217BE93D0037C307 /* vm.cpp */, 04F6E081217BE93D0037C307 /* vm.h */, ); @@ -176,6 +174,16 @@ path = ../../src; sourceTree = ""; }; + 04FE2F332180C1EF00871297 /* types */ = { + isa = PBXGroup; + children = ( + 04FE2F342180C1EF00871297 /* lazy.cpp */, + 04FE2F352180C1EF00871297 /* lazy.h */, + 04FE2F362180C1EF00871297 /* range.h */, + ); + path = types; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -261,7 +269,7 @@ 04C080D82180B4B80054BED3 /* value.cpp in Sources */, 046E4F1E217EA22300DB959C /* instruction.cpp in Sources */, 04C080D62180B4B80054BED3 /* traits.cpp in Sources */, - 046E4F20217EA22300DB959C /* lazy.cpp in Sources */, + 04FE2F382180C1EF00871297 /* lazy.cpp in Sources */, 04F19E0A217FBCB7003AAAE2 /* compiler.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -278,8 +286,8 @@ 04C080D32180B4B80054BED3 /* collection.cpp in Sources */, 04F6E088217BE93D0037C307 /* instruction.cpp in Sources */, 04C080D72180B4B80054BED3 /* value.cpp in Sources */, - 04F6E089217BE93D0037C307 /* lazy.cpp in Sources */, 04C080D52180B4B80054BED3 /* traits.cpp in Sources */, + 04FE2F372180C1EF00871297 /* lazy.cpp in Sources */, 04F6E08B217BE93D0037C307 /* main.cpp in Sources */, 04F19E09217FBCB7003AAAE2 /* compiler.cpp in Sources */, ); diff --git a/src/code.cpp b/src/code.cpp index e146928..8a8dc30 100644 --- a/src/code.cpp +++ b/src/code.cpp @@ -14,12 +14,30 @@ #include #include +std::string Code::svalue() const +{ + std::stringstream ss(std::stringstream::out); + size_t size = this->size(); + + ss << "["; + + for (size_t i = 0; i < size; ++i) + { + const Instruction* in = at(i); + ss << in->svalue(); + } + + ss << "]"; + + return ss.str(); +} + std::string CodeStandard::svalue(size_t pc) { std::stringstream ss(std::stringstream::out); size_t l = 0; - for (int i = 0; i < len(); ++i) + for (int i = 0; i < size(); ++i) { ss << code[i]->svalue() << " "; if (i+1 == pc) @@ -39,9 +57,9 @@ std::string CodeStandard::svalue(size_t pc) CurriedCode::CurriedCode(Code *code, Value value) : code(code), value(new PushInstruction(value)) { }; CurriedCode::CurriedCode(Code *code, PushInstruction *value) : code(code), value(value) { }; -size_t CurriedCode::len() { return code->len() + 1; } +size_t CurriedCode::size() const { return code->size() + 1; } -Instruction *CurriedCode::at(size_t i) +Instruction *CurriedCode::at(size_t i) const { if (i == 0) return value; diff --git a/src/code.h b/src/code.h index 7b0ea89..90c0cd2 100644 --- a/src/code.h +++ b/src/code.h @@ -20,11 +20,12 @@ class Value; class Code { public: - virtual size_t len() = 0; + virtual size_t size() const = 0; virtual void set(size_t i, Instruction *it) = 0; - virtual Instruction* at(size_t i) = 0; + virtual Instruction* at(size_t i) const = 0; virtual Code *append(Instruction *ins) = 0; + std::string svalue() const; virtual std::string svalue(size_t pc) = 0; }; @@ -36,10 +37,6 @@ class CodeStandard : public Code public: CodeStandard(const std::vector& code) : code(code) { } - CodeStandard(Instruction **code, size_t length) { - std::copy(code, code + length, std::back_inserter(this->code)); - } - CodeStandard(size_t length) { code.resize(length); } CodeStandard(Instruction* i) { code.push_back(i); } @@ -53,8 +50,8 @@ class CodeStandard : public Code virtual std::string svalue(size_t pc); virtual void set(size_t i, Instruction *is) { code[i] = is; } - virtual Instruction* at(size_t i) { return code[i]; } - virtual size_t len() { return code.size(); } + virtual Instruction* at(size_t i) const { return code[i]; } + virtual size_t size() const { return code.size(); } friend class CurriedCode; }; @@ -72,8 +69,8 @@ class CurriedCode : public Code virtual Code *append(Instruction *ins); virtual void set(size_t i, Instruction *is); - virtual Instruction* at(size_t i); - virtual size_t len(); + virtual Instruction* at(size_t i) const; + virtual size_t size() const; virtual std::string svalue(size_t pc) { return ""; } diff --git a/src/collection.cpp b/src/collection.cpp index 35f4d26..0371b25 100644 --- a/src/collection.cpp +++ b/src/collection.cpp @@ -24,29 +24,3 @@ const Value& String::next() const return it.value; } } - -std::string LazyArray::svalue() const -{ - std::string s("(? "); - s += data.code()->svalue(); - s += " )"; - return s; -} - -std::string Lambda::svalue() const -{ - std::stringstream ss(std::stringstream::out); - - ss << "["; - - for (int i = 0; i < _code->len(); ++i) - { - ss << _code->at(i)->svalue(); - if (i < _code->len() - 1) - ss << " "; - } - - ss << "]"; - - return ss.str(); -} diff --git a/src/collection.h b/src/collection.h index e76c5a3..57719af 100644 --- a/src/collection.h +++ b/src/collection.h @@ -29,8 +29,8 @@ class String : public TCollection const std::string& data() const { return value; } - virtual void iterate() const { it.it = value.begin(); } - virtual bool hasNext() const { return it.it != value.end(); } + virtual void iterate() const override { it.it = value.begin(); } + virtual bool hasNext() const override { return it.it != value.end(); } virtual const Value& next() const override; @@ -39,8 +39,8 @@ class String : public TCollection this->value.append(value.svalue()); } - virtual integral_t size() const { return value.length(); } - virtual bool empty() const { return this->value.empty(); } + virtual integral_t size() const override { return value.length(); } + virtual bool empty() const override { return this->value.empty(); } }; class Range : public TCollection @@ -328,8 +328,6 @@ class LazyArray : public TCollection LazyArray(const LazyArrayHolder& data) : data(data) { } LazyArray(Lambda *lambda, bool useIndices) : data(lambda, useIndices) { } - virtual std::string svalue() const; - virtual void iterate() const override { it = data.data().begin(); } virtual bool hasNext() const override { return it != data.data().end(); } virtual const Value& next() const override @@ -441,6 +439,4 @@ class Lambda : public managed_object operator Code*() { return _code; } Code* code() { return _code; } - - std::string svalue() const; }; diff --git a/src/instruction.cpp b/src/instruction.cpp index 9e6be55..d4e6b3f 100644 --- a/src/instruction.cpp +++ b/src/instruction.cpp @@ -186,7 +186,7 @@ struct Signature u64 data; }; - Signature(Opcode opcode, Type t1 = TYPE_NONE, Type t2 = TYPE_NONE, Type t3 = TYPE_NONE) : opcode(opcode), args({t1, t2, t3}) { } + Signature(Opcode opcode, Type r, Type t1 = TYPE_NONE, Type t2 = TYPE_NONE, Type t3 = TYPE_NONE) : opcode(opcode), args(t1, t2, t3) { } bool operator==(const Signature& o) const { return opcode == o.opcode && args.matches(o.args); } struct hash diff --git a/src/main.cpp b/src/main.cpp index 5f93183..6409f2f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,70 +16,6 @@ #include #include -//#include -/* -class UnaryB { - const s16 itype; - public: - UnaryB(s16 itype) : itype(itype) { } -}; - -template -class Unary : public UnaryB -{ -public: - Unary() : UnaryB(X::stype()) { } - - Value* ptr(X* x) - { - cout << "Missing instruction!" << endl; - return NULL; - } -}; - -template -class Binary -{ - public: - Value* ptr(X* x, Y* y) - { - cout << "Missing instruction!" << endl; - } -}; - -template -class Ternary -{ -public: - Value* ptr(X* x, Y* y, Z* z) - { - cout << "Missing instruction!" << endl; - } -}; - - -template <> -class Unary : public UnaryB -{ - public: - Value *ptr(Float *x) { return new Float(-x->get()); }; -}; - -template<> -class Binary { - public: Value *ptr(Float *x, Float *y) { return new Float(x->get() + y->get()); }; -}; - -template<> -class Binary { - public: Value *ptr(Int *x, Int *y) { return new Int(x->get() + y->get()); }; -}; - -template<> -class Ternary { - public: Value *ptr(Value *v1, Value *v2, Value *v3) { return NULL; } -};*/ - #define VAR_DECL1(x, z) z* v1 = (z*)x #define VAR_DECL2(x, z) z* v2 = (z*)x @@ -88,17 +24,9 @@ using namespace std; int main (int argc, const char * argv[]) { - //Unary unary; - - //unary.ptr(new Float(10.0)); - - //test(); - //return 0; - - Help::init(); - VM *vm = new VM(); + VM vm; string input; bool finished = false; @@ -119,10 +47,10 @@ int main (int argc, const char * argv[]) else if (input.compare("stack") == 0) { cout << ">> "; - vm->printStack(); + vm.printStack(); } else if (input.compare("wipe") == 0) - vm->wipe(); + vm.wipe(); else if (input.substr(0,4).compare("help") == 0) { if (input.compare("help") == 0) @@ -162,8 +90,8 @@ int main (int argc, const char * argv[]) if (code) { - vm->execute(code); - vm->printTopStack(); + vm.execute(code); + vm.printTopStack(); } } diff --git a/src/traits.cpp b/src/traits.cpp index d29beef..7e3d201 100644 --- a/src/traits.cpp +++ b/src/traits.cpp @@ -160,7 +160,7 @@ const std::unordered_map TypeTraits::spec { TYPE_LAZY_ARRAY, false, true, "larray", [] (const Value& v) { std::string s("(? "); - s += v.lazyArray()->raw().code()->svalue(); + s += v.lazyArray()->raw().code()->code()->svalue(); s += " )"; return s; }, @@ -172,7 +172,7 @@ const std::unordered_map TypeTraits::spec { TYPE_LAMBDA, false, true, "lambda", [] (const Value& v) { std::stringstream ss(std::stringstream::out); - size_t size = v.lambda()->code()->len(); + size_t size = v.lambda()->code()->size(); ss << "["; diff --git a/src/lazy.cpp b/src/types/lazy.cpp similarity index 100% rename from src/lazy.cpp rename to src/types/lazy.cpp diff --git a/src/lazy.h b/src/types/lazy.h similarity index 100% rename from src/lazy.h rename to src/types/lazy.h diff --git a/src/range.h b/src/types/range.h similarity index 98% rename from src/range.h rename to src/types/range.h index ab6c69f..faa04f0 100644 --- a/src/range.h +++ b/src/types/range.h @@ -71,7 +71,7 @@ class RangeVector ); } - RangeVector merge(int v) const + RangeVector merge(integral_t v) const { const data_t& d = data; RangeVector res; diff --git a/src/vm.cpp b/src/vm.cpp index a8da684..14346b8 100644 --- a/src/vm.cpp +++ b/src/vm.cpp @@ -16,7 +16,7 @@ void VM::execute(Code *code) if (exec.code) callStack.push(exec); - exec.set(code); + exec = ActivationRecord(code); run(); @@ -29,12 +29,10 @@ void VM::execute(Code *code) void VM::run() { - while (exec.pc < exec.code->len() && running) + while (exec.pc < exec.code->size() && running) { Instruction *i = exec.code->at(exec.pc); - //cout << exec.code->svalue(exec.pc) << endl; - i->execute(this); exec.pc++; diff --git a/src/vm.h b/src/vm.h index 786f09b..30b0dd6 100644 --- a/src/vm.h +++ b/src/vm.h @@ -20,14 +20,14 @@ class Instruction; -struct ExecEnv +struct ActivationRecord { Code *code; size_t pc; - ExecEnv(Code *code) : code(code), pc(0) { } + ActivationRecord(Code *code) : code(code), pc(0) { } - void set(Code *code) { this->code = code; pc = 0; } + //void set(Code *code) { this->code = code; pc = 0; } }; class VM @@ -40,14 +40,14 @@ class VM std::list lowStacks; std::array memory; - std::stack callStack; - ExecEnv exec; + std::stack callStack; + ActivationRecord exec; bool running; bool stackPreserve; public: - VM() : valueStack(new stack_t()), exec(ExecEnv(nullptr)), running(false), stackPreserve(false), lazy(NULL), memory() + VM() : valueStack(new stack_t()), exec(ActivationRecord(nullptr)), running(false), stackPreserve(false), lazy(NULL), memory() { } @@ -56,11 +56,6 @@ class VM return exec.code; } - template void push(T* object) - { - push(Value(object)); - } - void push(const Value& value) { valueStack->push_back(value);