From 8ad61af59d0eff1b625f0a0ac439f374291b4a3c Mon Sep 17 00:00:00 2001 From: Ryan Ward Date: Tue, 5 Jan 2021 19:57:59 -0500 Subject: [PATCH] Custom datatypes mostly implemented --- DMS/DMS.vcxproj.filters | 12 +- DMS/LineParserMatchProcess.cpp | 8 +- DMS/LineParserParse.cpp | 2 +- DMS/core.cpp | 3 + DMS/core.h | 2 - DMS/dms_state.cpp | 4 +- DMS/dms_state_interpret.cpp | 40 ++-- DMS/dump.bin | Bin 1822 -> 2111 bytes DMS/dump.txt | 366 ++++++++++++++++++--------------- DMS/sound.cpp | 2 +- DMS/test.dms | 29 ++- DMS/value.cpp | 24 ++- DMS/value.h | 1 + README.md | 2 +- 14 files changed, 269 insertions(+), 226 deletions(-) diff --git a/DMS/DMS.vcxproj.filters b/DMS/DMS.vcxproj.filters index ac3e0c8..16ade1f 100644 --- a/DMS/DMS.vcxproj.filters +++ b/DMS/DMS.vcxproj.filters @@ -111,12 +111,12 @@ Source Files\DMS\objects - - Source Files\DMS\standardMethods - Source Files\DMS + + Source Files\DMS\platformdep + @@ -182,11 +182,11 @@ Header Files\DMS\C-API - - Header Files\DMS\standardMethods - Header Files\DMS + + Header Files\DMS\platformdep + \ No newline at end of file diff --git a/DMS/LineParserMatchProcess.cpp b/DMS/LineParserMatchProcess.cpp index 01fd70b..21d4df2 100644 --- a/DMS/LineParserMatchProcess.cpp +++ b/DMS/LineParserMatchProcess.cpp @@ -43,7 +43,7 @@ namespace dms { c->opcode = codes::KNOT; c->args.push(assn); current_chunk->addCmd(c); - v.set(assn.s); + v.set(assn.getString()); v.type = variable; return true; } @@ -64,7 +64,7 @@ namespace dms { tokenstream tempstream(&toks); value var(datatypes::variable); if (match_process_standard(&tempstream, var)) { - v.set(var.s); + v.set(var.getString()); v.type = datatypes::variable; return true; } @@ -178,7 +178,7 @@ namespace dms { value var = value(datatypes::variable); // We have some work to do here if (match_process_standard(stream, right)) { - v.set(var.s); + v.set(var.getString()); v.type = datatypes::variable; cmd* c = new cmd; c->opcode = code; @@ -242,7 +242,7 @@ namespace dms { value var = value(datatypes::variable); // COMP cmp out v1 v2 if (match_process_standard(stream,right)) { - v.set(var.s); + v.set(var.getString()); v.type = datatypes::variable; cmd* c = new cmd; c->opcode = codes::COMP; diff --git a/DMS/LineParserParse.cpp b/DMS/LineParserParse.cpp index d97a25c..c40d664 100644 --- a/DMS/LineParserParse.cpp +++ b/DMS/LineParserParse.cpp @@ -459,7 +459,7 @@ namespace dms { // We got a name which is refering to a variable so lets build one value v; v.type = datatypes::variable; // Special type, it writes data to the string portion, but is interperted as a lookup - v.s = tokens[i].name; + v.getString() = tokens[i].name; args.push(v); } else if (tokens[i].type == tokens::seperator) { diff --git a/DMS/core.cpp b/DMS/core.cpp index 0f3a8cc..3204080 100644 --- a/DMS/core.cpp +++ b/DMS/core.cpp @@ -21,6 +21,9 @@ namespace dms { return datatype[args->args[0].type]; } return "nil"; + } + value concat(void* self, dms_state* state, dms_args* args) { + } void init(dms_state* state) { state->invoker.registerFunction("print", print); diff --git a/DMS/core.h b/DMS/core.h index c0a3f80..35f553e 100644 --- a/DMS/core.h +++ b/DMS/core.h @@ -3,7 +3,5 @@ namespace dms { namespace core { void init(dms_state* state); - value print(void* self, dms_state* state, dms_args* args); - value type(void* self, dms_state* state, dms_args* args); } } \ No newline at end of file diff --git a/DMS/dms_state.cpp b/DMS/dms_state.cpp index 7bce8aa..52ebff1 100644 --- a/DMS/dms_state.cpp +++ b/DMS/dms_state.cpp @@ -19,7 +19,7 @@ namespace dms { if (!state->run(func, Fmem)) { std::vector err = Fmem->examine(datatypes::error); if (err.size() > 0) - state->push_error(errors::error{ errors::unknown ,err[0].s }); + state->push_error(errors::error{ errors::unknown ,err[0].getString() }); else state->push_error(errors::error{ errors::unknown ,"Function Returned an error!" }); state->popMem();// We need to restore the stack @@ -182,7 +182,7 @@ namespace dms { bool dms_state::assign(value var, value val) { if (val.type == datatypes::error) { (*getMem())[var.getPrintable()] = val; - push_error(errors::error{ errors::unknown ,val.s }); + push_error(errors::error{ errors::unknown ,val.getString() }); return false; } val.state = this; diff --git a/DMS/dms_state_interpret.cpp b/DMS/dms_state_interpret.cpp index 02689cf..1130da4 100644 --- a/DMS/dms_state_interpret.cpp +++ b/DMS/dms_state_interpret.cpp @@ -259,7 +259,7 @@ namespace dms { { if (c->args.args[0].resolve(this).type == datatypes::custom) { auto cust = c->args.args[0].resolve(this); - auto fname = c->args.args[1].s; + auto fname = c->args.args[1].getString(); auto assn = c->args.args[2]; dms_args args; @@ -340,15 +340,15 @@ namespace dms { value env = c->args.args[1]; value indx = c->args.args[2].resolve(this); value assn = c->args.args[3].resolve(this); - if (env.type == datatypes::block && blockExists(env.s)) { // If this is a block let's handle this + if (env.type == datatypes::block && blockExists(env.getString())) { // If this is a block let's handle this enviroment* e = nullptr; - if (environments.count(env.s)) { - e = environments[env.s]; + if (environments.count(env.getString())) { + e = environments[env.getString()]; } - else if (characters.count(env.s)) { - e = characters[env.s]; + else if (characters.count(env.getString())) { + e = characters[env.getString()]; } - e->values[indx.s] = assn; + e->values[indx.getString()] = assn; } else if (env.type == datatypes::env) { if (indx.type == datatypes::number) { @@ -437,13 +437,13 @@ namespace dms { value assn = c->args.args[0]; value env = c->args.args[1]; value indx = c->args.args[2].resolve(this); - if (env.type == datatypes::block && blockExists(env.s)) { // If this is a block let's handle this + if (env.type == datatypes::block && blockExists(env.getString())) { // If this is a block let's handle this enviroment* e = nullptr; - if (environments.count(env.s)) { - e = environments[env.s]; + if (environments.count(env.getString())) { + e = environments[env.getString()]; } - else if (characters.count(env.s)) { - e = characters[env.s]; + else if (characters.count(env.getString())) { + e = characters[env.getString()]; } if(!assign( assn, e->values[indx.getPrintable()])) { return false; @@ -556,13 +556,13 @@ namespace dms { break; case SSPK: //Because we are using void* we must cast our pointers - if (characterExists(c->args.args[0].s)){ - speaker = getCharacter(c->args.args[0].s); + if (characterExists(c->args.args[0].getString())){ + speaker = getCharacter(c->args.args[0].getString()); if (!handler->handleSpeaker(this, speaker)) return false; } else { - push_error(errors::error{ errors::disp_unknown,concat("Unknown character '",c->args.args[0].s,"'!")}); + push_error(errors::error{ errors::disp_unknown,concat("Unknown character '",c->args.args[0].getString(),"'!")}); return false; } break; @@ -572,7 +572,7 @@ namespace dms { break; case CHAR: { - std::string cha = c->args.args[0].s; + std::string cha = c->args.args[0].getString(); getCharacter(cha); break; } @@ -596,10 +596,10 @@ namespace dms { //Because we are using void* we must cast our pointers { std::vector args; - std::string prompt = c->args.args[0].s; - std::string fn = c->args.args[1].s; + std::string prompt = c->args.args[0].getString(); + std::string fn = c->args.args[1].getString(); for (size_t i = 2; i < c->args.args.size(); i++) - args.push_back(c->args.args[i].resolve(this).s); + args.push_back(c->args.args[i].resolve(this).getString()); size_t npos = handler->handleChoice(this, prompt, args); size_t nnpos = seek(concat("CHOI_", fn, "_", npos),cmds,LABL,pos); if (!nnpos) { @@ -614,7 +614,7 @@ namespace dms { case JUMP: // Value assert resolves the data so a variable must eventually equal a string if (utils::valueassert(c->args, this, datatypes::string)) { - std::string block = c->args.args[0].resolve(this).s; + std::string block = c->args.args[0].resolve(this).getString(); if (chunks[block] == NULL) { push_error(errors::error{ errors::non_existing_block ,utils::concat("Attempted to Jump to a non existing block [",block,"]") }); return false; diff --git a/DMS/dump.bin b/DMS/dump.bin index 0a8f1b9cb38aa933db60cc04e8b1014502a3448c..d5bd542f7689738bcff93e34204c76fcfc55c853 100644 GIT binary patch delta 469 zcmbQow_jkw6-M)kR|^@mkUKrdTL2yyRvEk%%Ok&o?hM39c z#^BR$2GZ|oYzEd3bcwS9M@eNtD$r;XBdDv4z;cc*E+9b*1-1~NycJLktb~`#G1wjG zeiai#5Ha~IlXyLl339ZLqmz#UTewGXd{$^dGG1?(8UfWi`}+ncFdGAnF*N}ZMha}j zCHVyfsVN}6o^Eb#5GkOMuJHv$hLs@Ua7WJ&1tvov%iTZ3A8efw+&-8K5XvDwEGWv% zD}jU!n@fIPD#PYyOd^bvZCE5Ge_?i-9Ks?tc^X^C}Cc85h0LdL-Qj^IB$nIm8m|Vxi9qSnE?x( name extendedDefine Line <12> newline Line <12> newline Line <13> newline -Line <14> name music -Line <14> equal = -Line <14> name loadMusic -Line <14> parao ( -Line <14> string test2.ogg -Line <14> parac ) Line <14> newline Line <14> newline -Line <15> name music2 +Line <15> name music Line <15> equal = Line <15> name loadMusic Line <15> parao ( -Line <15> string test.ogg +Line <15> string test2.ogg Line <15> parac ) Line <15> newline Line <15> newline -Line <16> bracketo [ -Line <16> name main -Line <16> bracketc ] +Line <16> name music2 +Line <16> equal = +Line <16> name loadMusic +Line <16> parao ( +Line <16> string test.ogg +Line <16> parac ) Line <16> newline Line <16> newline -Line <17> name a -Line <17> equal = -Line <17> number 10 Line <17> newline Line <17> newline -Line <18> name tester -Line <18> parao ( -Line <18> parac ) +Line <18> bracketo [ +Line <18> name main +Line <18> bracketc ] Line <18> newline Line <18> newline -Line <19> name print -Line <19> parao ( -Line <19> string a = -Line <19> plus + -Line <19> name a -Line <19> parac ) -Line <19> newline Line <19> newline Line <20> newline +Line <20> newline Line <21> newline +Line <21> newline +Line <22> name music +Line <22> dot dot +Line <22> name setPitch +Line <22> parao ( +Line <22> number 0.7 +Line <22> parac ) Line <22> newline +Line <22> newline +Line <23> name print +Line <23> parao ( +Line <23> name music +Line <23> dot . +Line <23> name getStatus +Line <23> parao ( +Line <23> parac ) +Line <23> parac ) Line <23> newline +Line <23> newline +Line <24> name music +Line <24> dot . +Line <24> name play +Line <24> parao ( +Line <24> parac ) Line <24> newline +Line <24> newline +Line <25> name print +Line <25> parao ( +Line <25> name music +Line <25> dot . +Line <25> name getStatus +Line <25> parao ( +Line <25> parac ) +Line <25> parac ) Line <25> newline +Line <25> newline +Line <26> name print +Line <26> parao ( +Line <26> string Type: +Line <26> plus + +Line <26> name type +Line <26> parao ( +Line <26> name music2 +Line <26> parac ) +Line <26> parac ) Line <26> newline +Line <26> newline +Line <27> name while +Line <27> parao ( +Line <27> name music +Line <27> dot dot +Line <27> name getStatus +Line <27> parao ( +Line <27> parac ) +Line <27> not ! +Line <27> equal = +Line <27> string stopped +Line <27> parac ) +Line <27> cbracketo { Line <27> newline +Line <27> newline +Line <28> name wait +Line <28> number 1 Line <28> newline +Line <28> newline +Line <29> cbracketc } Line <29> newline +Line <29> newline +Line <30> name print +Line <30> parao ( +Line <30> string Done +Line <30> parac ) +Line <30> newline Line <30> newline Line <31> newline Line <32> newline @@ -96,270 +149,255 @@ Line <40> newline Line <41> newline Line <42> newline Line <43> newline -Line <43> newline -Line <44> bracketo [ -Line <44> name tester -Line <44> colon : -Line <44> name function -Line <44> parao ( -Line <44> parac ) -Line <44> bracketc ] Line <44> newline -Line <44> newline -Line <45> name print -Line <45> parao ( -Line <45> name a -Line <45> parac ) Line <45> newline Line <45> newline +Line <46> bracketo [ +Line <46> name SelectSong +Line <46> colon : +Line <46> name function +Line <46> parao ( +Line <46> parac ) +Line <46> bracketc ] Line <46> newline Line <46> newline -Line <47> bracketo [ -Line <47> name SelectSong -Line <47> colon : -Line <47> name function -Line <47> parao ( -Line <47> parac ) -Line <47> bracketc ] +Line <47> control +Line <47> string Pick song: +Line <47> cbracketo { Line <47> newline Line <47> newline -Line <48> control -Line <48> string Pick song: +Line <48> string Music 1 Line <48> cbracketo { Line <48> newline Line <48> newline -Line <49> string Music 1 -Line <49> cbracketo { +Line <49> ret +Line <49> name music Line <49> newline Line <49> newline -Line <50> ret -Line <50> name music +Line <50> cbracketc } Line <50> newline Line <50> newline -Line <51> cbracketc } +Line <51> string Music 2 +Line <51> cbracketo { Line <51> newline Line <51> newline -Line <52> string Music 2 -Line <52> cbracketo { +Line <52> ret +Line <52> name music2 Line <52> newline Line <52> newline -Line <53> ret -Line <53> name music2 +Line <53> cbracketc } Line <53> newline Line <53> newline Line <54> cbracketc } Line <54> newline Line <54> newline -Line <55> cbracketc } Line <55> newline Line <55> newline +Line <56> bracketo [ +Line <56> name player +Line <56> colon : +Line <56> name function +Line <56> parao ( +Line <56> name song +Line <56> parac ) +Line <56> bracketc ] Line <56> newline Line <56> newline -Line <57> bracketo [ -Line <57> name player -Line <57> colon : -Line <57> name function -Line <57> parao ( -Line <57> name song -Line <57> parac ) -Line <57> bracketc ] +Line <57> control +Line <57> string What you wanna do? +Line <57> cbracketo { Line <57> newline Line <57> newline -Line <58> control -Line <58> string What you wanna do? +Line <58> string play/resume Line <58> cbracketo { Line <58> newline Line <58> newline -Line <59> string play/resume -Line <59> cbracketo { +Line <59> name song +Line <59> dot dot +Line <59> name play +Line <59> parao ( +Line <59> parac ) Line <59> newline Line <59> newline -Line <60> name song -Line <60> dot dot -Line <60> name play +Line <60> name player Line <60> parao ( +Line <60> name song Line <60> parac ) Line <60> newline Line <60> newline -Line <61> name player -Line <61> parao ( -Line <61> name song -Line <61> parac ) +Line <61> cbracketc } Line <61> newline Line <61> newline -Line <62> cbracketc } +Line <62> string pause +Line <62> cbracketo { Line <62> newline Line <62> newline -Line <63> string pause -Line <63> cbracketo { +Line <63> name song +Line <63> dot . +Line <63> name pause +Line <63> parao ( +Line <63> parac ) Line <63> newline Line <63> newline -Line <64> name song -Line <64> dot . -Line <64> name pause +Line <64> name player Line <64> parao ( +Line <64> name song Line <64> parac ) Line <64> newline Line <64> newline -Line <65> name player -Line <65> parao ( -Line <65> name song -Line <65> parac ) +Line <65> cbracketc } Line <65> newline Line <65> newline -Line <66> cbracketc } +Line <66> string stop +Line <66> cbracketo { Line <66> newline Line <66> newline -Line <67> string stop -Line <67> cbracketo { +Line <67> name song +Line <67> dot . +Line <67> name stop +Line <67> parao ( +Line <67> parac ) Line <67> newline Line <67> newline -Line <68> name song -Line <68> dot . -Line <68> name stop +Line <68> name player Line <68> parao ( +Line <68> name song Line <68> parac ) Line <68> newline Line <68> newline -Line <69> name player -Line <69> parao ( -Line <69> name song -Line <69> parac ) +Line <69> cbracketc } Line <69> newline Line <69> newline -Line <70> cbracketc } +Line <70> string newSong +Line <70> cbracketo { Line <70> newline Line <70> newline -Line <71> string newSong -Line <71> cbracketo { +Line <71> name song +Line <71> dot . +Line <71> name stop +Line <71> parao ( +Line <71> parac ) Line <71> newline Line <71> newline -Line <72> name song -Line <72> dot . -Line <72> name stop +Line <72> name player Line <72> parao ( +Line <72> name song Line <72> parac ) Line <72> newline Line <72> newline -Line <73> name player -Line <73> parao ( -Line <73> name song -Line <73> parac ) +Line <73> cbracketc } Line <73> newline Line <73> newline -Line <74> cbracketc } +Line <74> string quit +Line <74> exit +Line <74> number 0 Line <74> newline Line <74> newline -Line <75> string quit -Line <75> exit -Line <75> number 0 +Line <75> cbracketc } Line <75> newline Line <75> newline -Line <76> cbracketc } Line <76> newline Line <76> newline +Line <77> bracketo [ +Line <77> name Ryan +Line <77> colon : +Line <77> name char +Line <77> bracketc ] Line <77> newline Line <77> newline -Line <78> bracketo [ -Line <78> name Ryan -Line <78> colon : -Line <78> name char -Line <78> bracketc ] +Line <78> name age +Line <78> equal = +Line <78> number 21 Line <78> newline Line <78> newline -Line <79> name age +Line <79> name money Line <79> equal = -Line <79> number 21 +Line <79> number 1000 Line <79> newline Line <79> newline -Line <80> name money +Line <80> name lname Line <80> equal = -Line <80> number 1000 +Line <80> string Ward Line <80> newline Line <80> newline -Line <81> name lname +Line <81> name known Line <81> equal = -Line <81> string Ward +Line <81> true true Line <81> newline Line <81> newline -Line <82> name known -Line <82> equal = -Line <82> true true -Line <82> newline Line <82> newline +Line <83> name calm +Line <83> colon : +Line <83> string ./path/to/file Line <83> newline -Line <84> name calm +Line <83> newline +Line <84> name excited Line <84> colon : Line <84> string ./path/to/file Line <84> newline Line <84> newline -Line <85> name excited -Line <85> colon : -Line <85> string ./path/to/file Line <85> newline Line <85> newline +Line <86> bracketo [ +Line <86> name John +Line <86> colon : +Line <86> name char +Line <86> bracketc ] Line <86> newline Line <86> newline -Line <87> bracketo [ -Line <87> name John -Line <87> colon : -Line <87> name char -Line <87> bracketc ] +Line <87> name lname +Line <87> equal = +Line <87> string Johnson Line <87> newline Line <87> newline -Line <88> name lname +Line <88> name age Line <88> equal = -Line <88> string Johnson +Line <88> number 16 Line <88> newline Line <88> newline -Line <89> name age +Line <89> name money Line <89> equal = -Line <89> number 16 +Line <89> number 100000 Line <89> newline Line <89> newline -Line <90> name money +Line <90> name known Line <90> equal = -Line <90> number 100000 +Line <90> true true Line <90> newline Line <90> newline -Line <91> name known -Line <91> equal = -Line <91> true true Line <91> newline Line <91> newline +Line <92> bracketo [ +Line <92> name Bob +Line <92> colon : +Line <92> name char +Line <92> bracketc ] Line <92> newline Line <92> newline -Line <93> bracketo [ -Line <93> name Bob -Line <93> colon : -Line <93> name char -Line <93> bracketc ] -Line <93> newline Line <93> newline Line <94> newline +Line <95> name lname +Line <95> equal = +Line <95> string Johnson Line <95> newline -Line <96> name lname +Line <96> name unknown Line <96> equal = -Line <96> string Johnson +Line <96> string Some Random Guy Line <96> newline -Line <97> name unknown +Line <96> newline +Line <97> name age Line <97> equal = -Line <97> string Some Random Guy +Line <97> number 24 Line <97> newline Line <97> newline -Line <98> name age +Line <98> name money Line <98> equal = -Line <98> number 24 +Line <98> number 100 Line <98> newline Line <98> newline -Line <99> name money -Line <99> equal = -Line <99> number 100 +Line <99> name excited +Line <99> colon : +Line <99> string path/to/file Line <99> newline Line <99> newline -Line <100> name excited -Line <100> colon : -Line <100> string path/to/file -Line <100> newline -Line <100> newline -Line <100> eof +Line <99> eof diff --git a/DMS/sound.cpp b/DMS/sound.cpp index 4f98a77..cdcc6c5 100644 --- a/DMS/sound.cpp +++ b/DMS/sound.cpp @@ -82,7 +82,7 @@ namespace dms::audio { if (args->size() || args->args[0].resolve(state).type == datatypes::string) { sf::Music* music = new sf::Music; - if (!music->openFromFile(args->args[0].s)) { + if (!music->openFromFile(args->args[0].getString())) { return value("Cannot open audio stream!", datatypes::error); } return value(music, "audiostream"); diff --git a/DMS/test.dms b/DMS/test.dms index 1553cdc..2dc83d4 100644 --- a/DMS/test.dms +++ b/DMS/test.dms @@ -11,21 +11,23 @@ enable savestate version 0.2 using extendedDefine // this code will reside within + music = loadMusic("test2.ogg") music2 = loadMusic("test.ogg") + [main] - a = 10 - tester() - print("a = " + a) - // music.setPitch(.7) - // print(music.getStatus()) - // music.play() - // print(music.getStatus()) - // print("Type: " + type(music2)) - // while(music.getStatus()!="stopped"){ - // wait 1 - // } - // print("Done") + // Let's extend the base feature set + + + music.setPitch(.7) + print(music.getStatus()) + music.play() + print(music.getStatus()) + print("Type: " + type(music2)) + while(music.getStatus()!="stopped"){ + wait 1 + } + print("Done") // a = 0 // while (true){ // asm { @@ -41,9 +43,6 @@ music2 = loadMusic("test.ogg") // player(song) // } -[tester:function()] - print(a) - [SelectSong:function()] choice "Pick song:" { "Music 1" { diff --git a/DMS/value.cpp b/DMS/value.cpp index 4d32d3f..3cb1c84 100644 --- a/DMS/value.cpp +++ b/DMS/value.cpp @@ -359,8 +359,8 @@ namespace dms { return false; } value value::resolve(dms_state* _state) { - if (type == datatypes::variable && (*this)!=(*_state->getMem())[s]) { - return (*_state->getMem())[s].resolve(_state); + if (type == datatypes::variable && (*this)!=(*_state->getMem())[getString()]) { + return (*_state->getMem())[getString()].resolve(_state); } return *this; } @@ -412,17 +412,17 @@ namespace dms { return "custom"; } else if (type == block) { - if (state->characterExists(s)) { - auto cha = state->getCharacter(s); + if (state->characterExists(getString())) { + auto cha = state->getCharacter(getString()); return cha->getName(); } - return s; + return getString(); } else if (type == datatypes::variable) { - return s; // Do the lookup + return getString(); // Do the lookup } else if (type == datatypes::error) { - return std::string("ERROR: ") + s; + return std::string("ERROR: ") + getString(); } else if (type == datatypes::escape) { return ""; @@ -450,6 +450,10 @@ namespace dms { else return INT_MIN; } + std::string value::getString() const + { + return s; + } // Compile time void value::nuke() { delete e; @@ -457,7 +461,7 @@ namespace dms { } std::ostream& operator << (std::ostream& out, const value& c) { if (c.type == string) { - out << (char)c.type << c.s << (char)0; + out << (char)c.type << c.getString() << (char)0; } else if (c.type == number) { out << (char)c.type << c.n; @@ -481,10 +485,10 @@ namespace dms { out << (char)c.type << "Custom Data: " << c; } else if (c.type == block) { - out << (char)c.type << c.s; + out << (char)c.type << c.getString(); } else if (c.type == datatypes::variable) { - out << (char)c.type << c.s; // Do the lookup + out << (char)c.type << c.getString(); // Do the lookup } else if (c.type == datatypes::escape) { out << (char)0; diff --git a/DMS/value.h b/DMS/value.h index 6c0cb4b..746ec41 100644 --- a/DMS/value.h +++ b/DMS/value.h @@ -84,6 +84,7 @@ namespace dms { std::string toString() const; double getDouble() const; int64_t getInt() const; + std::string getString() const; friend std::ostream& operator << (std::ostream& out, const value& c); }; diff --git a/README.md b/README.md index d92431b..7e6fc6b 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ The Dialogue Management Script's goal is to provide a nice and simple way to hav - [X] ~~Implement bytecode for for/while loops~~ - [X] ~~Implement bytecode for concatenation~~ - [X] ~~Interpert all the bytecode~~ -- [ ] Finish implementing custom datatype +- [X] ~~Finish implementing custom datatype~~ - [ ] Speed up interperter - [ ] Finish C API for code - [ ] Extend beginning features \ No newline at end of file