diff --git a/DMS/DMS.vcxproj b/DMS/DMS.vcxproj index b53b930..a678815 100644 --- a/DMS/DMS.vcxproj +++ b/DMS/DMS.vcxproj @@ -178,12 +178,10 @@ - - diff --git a/DMS/DMS.vcxproj.filters b/DMS/DMS.vcxproj.filters index 5c16978..a9f7896 100644 --- a/DMS/DMS.vcxproj.filters +++ b/DMS/DMS.vcxproj.filters @@ -107,18 +107,12 @@ Header Files\DMS - - Header Files\DMS - Header Files\DMS Header Files\DMS - - Header Files\DMS - Header Files\DMS diff --git a/DMS/LineParserMatchProcess.cpp b/DMS/LineParserMatchProcess.cpp index 2431716..5ac2c27 100644 --- a/DMS/LineParserMatchProcess.cpp +++ b/DMS/LineParserMatchProcess.cpp @@ -515,9 +515,13 @@ namespace dms { t.push_back(end); tempstream.init(&t); // Turn tokens we consumed into a tokenstream if (tokn.type==tokens::gotoo) { - if (tempstream.match(tokens::string) || tempstream.match(tokens::gotoo)) { + if (tempstream.match(tokens::string)) { buildGoto(tempstream.next().name); - buildNoop(); + delete c; + return true; + } + else if (tempstream.match(tokens::name)) { + buildGoto(tempstream.next().name,true); delete c; return true; } @@ -527,9 +531,13 @@ namespace dms { } } else if (tokn.type == tokens::jump) { - if (tempstream.match(tokens::string) || tempstream.match(tokens::jump)) { + if (tempstream.match(tokens::string)) { buildJump(tempstream.next().name); - buildNoop(); + delete c; + return true; + } + else if (tempstream.match(tokens::name)) { + buildJump(tempstream.next().name, true); delete c; return true; } diff --git a/DMS/dms.h b/DMS/dms.h index 26276ca..ad92d65 100644 --- a/DMS/dms.h +++ b/DMS/dms.h @@ -8,8 +8,6 @@ #include "dms_state.h" #include "errors.h" #include "LineParser.h" -#include "number_utils.h" -#include "string_utils.h" #include "token.h" #include "utils.h" #include "value.h" diff --git a/DMS/dms_state.cpp b/DMS/dms_state.cpp index fe54c0e..ba7f20d 100644 --- a/DMS/dms_state.cpp +++ b/DMS/dms_state.cpp @@ -61,12 +61,13 @@ namespace dms { dms_state::dms_state() { // We should define the defaults for the enables pushMem(); // Main memory - enables.insert_or_assign("leaking", false); - enables.insert_or_assign("debugging", false); - enables.insert_or_assign("warnings", false); // - enables.insert_or_assign("statesave", true); // Allows you to save state - enables.insert_or_assign("omniscient", false); // Allows you to know who's who when you first meet them - enables.insert_or_assign("fullname", true); + disable("forwardlabels"); + disable("leaking"); + disable("debugging"); + disable("warnings"); + disable("omniscient"); + disable("fullname"); + enable("statesave"); chunk* c = new chunk; c->name = "$END"; c->type = blocktype::bt_block; diff --git a/DMS/dms_state_interpret.cpp b/DMS/dms_state_interpret.cpp index d5be57d..a8e9260 100644 --- a/DMS/dms_state_interpret.cpp +++ b/DMS/dms_state_interpret.cpp @@ -179,9 +179,21 @@ namespace dms { case GOTO: { value labl = c->args.args[0]; - size_t nnpos = seek(labl.getPrintable(),cmds, LABL, 0); + if (isEnabled("forwardlabels")) { + size_t nnpos = seek(labl.resolve(this).getPrintable(), cmds, LABL, pos); // Seek from next pos (pos++) to end of cmds + if (!nnpos) { + // This could be a method, it could, but it isn't. We jump to searching from the beginning of the block + goto seek_from_0; + } + else { + pos = nnpos; + } + break; + } + seek_from_0: + size_t nnpos = seek(labl.resolve(this).getPrintable(),cmds, LABL, 0); if (!nnpos) { - push_error(errors::error{ errors::choice_unknown ,utils::concat("Unknown choice!") }); + push_error(errors::error{ errors::choice_unknown ,utils::concat("Unknown label '",labl.resolve(this).getPrintable(),"'!") }); return false; } else { diff --git a/DMS/dump.bin b/DMS/dump.bin index 4f49c2d..9606fda 100644 Binary files a/DMS/dump.bin and b/DMS/dump.bin differ diff --git a/DMS/dump.txt b/DMS/dump.txt index c9fbccf..f4fd55e 100644 --- a/DMS/dump.txt +++ b/DMS/dump.txt @@ -10,51 +10,51 @@ Line <3> name omniscient Line <3> newline Line <3> newline Line <4> flag -Line <4> name forseelabels -Line <4> newline +Line <4> name forwardlabels Line <4> newline Line <5> flag Line <5> name savestate Line <5> newline Line <5> newline -Line <6> flag -Line <6> name fullname -Line <6> newline Line <6> newline Line <7> newline +Line <8> flag +Line <8> string loadtest.dms +Line <8> newline Line <8> newline Line <9> flag -Line <9> string loadtest.dms +Line <9> number 0.2 Line <9> newline Line <9> newline Line <10> flag -Line <10> number 0.2 +Line <10> name extendedDefine Line <10> newline Line <10> newline -Line <11> flag -Line <11> name extendedDefine Line <11> newline Line <11> newline +Line <12> bracketo [ +Line <12> name main +Line <12> bracketc ] Line <12> newline Line <12> newline -Line <13> bracketo [ -Line <13> name main -Line <13> bracketc ] +Line <13> name Ryan +Line <13> colon : +Line <13> string Hello `Bob`, how are you doing? Line <13> newline Line <13> newline -Line <14> name Ryan +Line <14> name Bob Line <14> colon : -Line <14> string Hello `Bob`, how are you doing? +Line <14> string Hi `Ryan`, I'm good. Line <14> newline Line <14> newline -Line <15> name Bob -Line <15> colon : -Line <15> string Hi `Ryan`, I'm good. +Line <15> name a +Line <15> equal = +Line <15> number 1000 Line <15> newline Line <15> newline -Line <16> name a +Line <16> name imp Line <16> equal = -Line <16> number 1000 +Line <16> string this Line <16> newline Line <16> newline Line <17> name test @@ -76,7 +76,7 @@ Line <19> newline Line <19> newline Line <20> string this Line <20> gotoo -Line <20> string this +Line <20> name imp Line <20> newline Line <20> newline Line <21> string that @@ -127,6 +127,7 @@ Line <31> parac ) Line <31> newline Line <31> newline Line <32> newline +Line <32> newline Line <33> newline Line <33> newline Line <34> newline @@ -141,83 +142,86 @@ Line <39> newline Line <40> newline Line <41> newline Line <41> newline -Line <42> bracketo [ -Line <42> name Bob -Line <42> colon : -Line <42> name char -Line <42> bracketc ] -Line <42> newline Line <42> newline Line <43> newline +Line <43> newline +Line <44> bracketo [ +Line <44> name Bob +Line <44> colon : +Line <44> name char +Line <44> bracketc ] +Line <44> newline Line <44> newline Line <45> newline -Line <46> name unknown -Line <46> equal = -Line <46> string Some Random Guy Line <46> newline -Line <46> newline -Line <47> name age -Line <47> equal = -Line <47> number 0.24 Line <47> newline -Line <47> newline -Line <48> name money +Line <48> name unknown Line <48> equal = -Line <48> number 100 +Line <48> string Some Random Guy Line <48> newline Line <48> newline -Line <49> name excited -Line <49> colon : -Line <49> string path/to/file +Line <49> name age +Line <49> equal = +Line <49> number 0.24 Line <49> newline Line <49> newline +Line <50> name money +Line <50> equal = +Line <50> number 100 Line <50> newline Line <50> newline -Line <51> bracketo [ -Line <51> name test1 +Line <51> name excited Line <51> colon : -Line <51> name function -Line <51> parao ( -Line <51> parac ) -Line <51> bracketc ] +Line <51> string path/to/file Line <51> newline Line <51> newline -Line <52> string Inside a function! Line <52> newline Line <52> newline +Line <53> bracketo [ +Line <53> name test1 +Line <53> colon : +Line <53> name function +Line <53> parao ( +Line <53> parac ) +Line <53> bracketc ] Line <53> newline +Line <53> newline +Line <54> string Inside a function! +Line <54> newline Line <54> newline Line <55> newline -Line <55> newline -Line <56> bracketo [ -Line <56> name newblock -Line <56> colon : -Line <56> name function -Line <56> parao ( -Line <56> name a -Line <56> seperator , -Line <56> name b -Line <56> seperator , -Line <56> name c -Line <56> parac ) -Line <56> bracketc ] Line <56> newline -Line <56> newline -Line <57> string Func Arguments: a = `a`, b = `b`, c = `c` Line <57> newline Line <57> newline -Line <58> string Time to return +Line <58> bracketo [ +Line <58> name newblock +Line <58> colon : +Line <58> name function +Line <58> parao ( +Line <58> name a +Line <58> seperator , +Line <58> name b +Line <58> seperator , +Line <58> name c +Line <58> parac ) +Line <58> bracketc ] Line <58> newline Line <58> newline -Line <59> ret -Line <59> name a -Line <59> plus + -Line <59> name b -Line <59> plus + -Line <59> name c +Line <59> string Func Arguments: a = `a`, b = `b`, c = `c` Line <59> newline Line <59> newline -Line <59> eof +Line <60> string Time to return +Line <60> newline +Line <60> newline +Line <61> ret +Line <61> name a +Line <61> plus + +Line <61> name b +Line <61> plus + +Line <61> name c +Line <61> newline +Line <61> newline +Line <61> eof Line <1> newline Line <1> newline Line <1> bracketo [ diff --git a/DMS/number_utils.h b/DMS/number_utils.h deleted file mode 100644 index 1620dfa..0000000 --- a/DMS/number_utils.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once -#include "value.h" -#include "utils.h" -#include "dms_state.h" -#include -namespace dms::number_utils { - dms_number* huge(dms_state* state); - dms_number* tiny(dms_state* state); - dms_number* abs(dms_state* state, dms_args args); - dms_number* max(dms_state* state, dms_args args); - dms_number* pow(dms_state* state, dms_args args); -} \ No newline at end of file diff --git a/DMS/string_utils.h b/DMS/string_utils.h deleted file mode 100644 index 7e152bf..0000000 --- a/DMS/string_utils.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include "value.h" -#include "dms_state.h" -#include "dms_exceptions.h" -#include "utils.h" -#include "errors.h" -namespace dms::string_utils { - dms_string* reverse(dms_state* state, dms_args args); - dms_string* sub(dms_state* state, dms_args args); - dms_string* upper(dms_state* state, dms_args args); - dms_string* lower(dms_state* state, dms_args args); - dms_boolean* startsWith(dms_state* state, dms_args args); - dms_boolean* endsWith(dms_state* state, dms_args args); - dms_number* indexOf(dms_state* state, dms_args args); - dms_boolean* includes(dms_state* state, dms_args args); - dms_string* repeat(dms_state* state, dms_args args); -} \ No newline at end of file diff --git a/DMS/test.dms b/DMS/test.dms index eb2ba67..c4bf942 100644 --- a/DMS/test.dms +++ b/DMS/test.dms @@ -1,9 +1,8 @@ entry main // Will either start the first block seen or the block supplied by you! //enable warnings disable omniscient -enable forseelabels +enable forwardlabels // Do most of your labels exist ahead? enable savestate -disable fullname //enable leaking //enable debugging loadfile "loadtest.dms" @@ -14,30 +13,34 @@ using extendedDefine Ryan: "Hello `Bob`, how are you doing?" Bob: "Hi `Ryan`, I'm good." a = 1000 + imp = "this" test = invokeTest("Running external code!"); "Loop Test... `test`" choice "Pick one" { - "this" goto "this" + "this" goto imp "that" goto ("that") } ::this:: "At \"this\"" - goto ("loop") + goto "loop" ::that:: "At \"that\"" ::loop:: a = a + 1 "a = `a`" goto ("loop") - // if (this==that) this()|that() - // if(this == that){ + + if (this==that) this()|that() + + + if(this == that){ - // } else if (that > this) { + } else if (that > this) { - // } else { + } else { - // } + } [Bob:char] //fname = "Bob"