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"