fixed goto/jump ()
This commit is contained in:
parent
e534274d09
commit
b602823646
@ -178,12 +178,10 @@
|
||||
<ClInclude Include="dms_state.h" />
|
||||
<ClInclude Include="Invoker.h" />
|
||||
<ClInclude Include="memory.h" />
|
||||
<ClInclude Include="string_utils.h" />
|
||||
<ClInclude Include="dms_exceptions.h" />
|
||||
<ClInclude Include="errors.h" />
|
||||
<ClInclude Include="dms.h" />
|
||||
<ClInclude Include="LineParser.h" />
|
||||
<ClInclude Include="number_utils.h" />
|
||||
<ClInclude Include="token.h" />
|
||||
<ClInclude Include="utils.h" />
|
||||
<ClInclude Include="value.h" />
|
||||
|
||||
@ -107,18 +107,12 @@
|
||||
<ClInclude Include="LineParser.h">
|
||||
<Filter>Header Files\DMS</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="number_utils.h">
|
||||
<Filter>Header Files\DMS</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="dms.h">
|
||||
<Filter>Header Files\DMS</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="errors.h">
|
||||
<Filter>Header Files\DMS</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="string_utils.h">
|
||||
<Filter>Header Files\DMS</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="dms_state.h">
|
||||
<Filter>Header Files\DMS</Filter>
|
||||
</ClInclude>
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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 {
|
||||
|
||||
BIN
DMS/dump.bin
BIN
DMS/dump.bin
Binary file not shown.
142
DMS/dump.txt
142
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 [
|
||||
|
||||
@ -1,12 +0,0 @@
|
||||
#pragma once
|
||||
#include "value.h"
|
||||
#include "utils.h"
|
||||
#include "dms_state.h"
|
||||
#include <limits>
|
||||
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);
|
||||
}
|
||||
@ -1,21 +0,0 @@
|
||||
#pragma once
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <algorithm>
|
||||
#include <iterator>
|
||||
#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);
|
||||
}
|
||||
21
DMS/test.dms
21
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"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user