fixed goto/jump ()
This commit is contained in:
parent
e534274d09
commit
b602823646
@ -178,12 +178,10 @@
|
|||||||
<ClInclude Include="dms_state.h" />
|
<ClInclude Include="dms_state.h" />
|
||||||
<ClInclude Include="Invoker.h" />
|
<ClInclude Include="Invoker.h" />
|
||||||
<ClInclude Include="memory.h" />
|
<ClInclude Include="memory.h" />
|
||||||
<ClInclude Include="string_utils.h" />
|
|
||||||
<ClInclude Include="dms_exceptions.h" />
|
<ClInclude Include="dms_exceptions.h" />
|
||||||
<ClInclude Include="errors.h" />
|
<ClInclude Include="errors.h" />
|
||||||
<ClInclude Include="dms.h" />
|
<ClInclude Include="dms.h" />
|
||||||
<ClInclude Include="LineParser.h" />
|
<ClInclude Include="LineParser.h" />
|
||||||
<ClInclude Include="number_utils.h" />
|
|
||||||
<ClInclude Include="token.h" />
|
<ClInclude Include="token.h" />
|
||||||
<ClInclude Include="utils.h" />
|
<ClInclude Include="utils.h" />
|
||||||
<ClInclude Include="value.h" />
|
<ClInclude Include="value.h" />
|
||||||
|
|||||||
@ -107,18 +107,12 @@
|
|||||||
<ClInclude Include="LineParser.h">
|
<ClInclude Include="LineParser.h">
|
||||||
<Filter>Header Files\DMS</Filter>
|
<Filter>Header Files\DMS</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="number_utils.h">
|
|
||||||
<Filter>Header Files\DMS</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="dms.h">
|
<ClInclude Include="dms.h">
|
||||||
<Filter>Header Files\DMS</Filter>
|
<Filter>Header Files\DMS</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="errors.h">
|
<ClInclude Include="errors.h">
|
||||||
<Filter>Header Files\DMS</Filter>
|
<Filter>Header Files\DMS</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="string_utils.h">
|
|
||||||
<Filter>Header Files\DMS</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="dms_state.h">
|
<ClInclude Include="dms_state.h">
|
||||||
<Filter>Header Files\DMS</Filter>
|
<Filter>Header Files\DMS</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|||||||
@ -515,9 +515,13 @@ namespace dms {
|
|||||||
t.push_back(end);
|
t.push_back(end);
|
||||||
tempstream.init(&t); // Turn tokens we consumed into a tokenstream
|
tempstream.init(&t); // Turn tokens we consumed into a tokenstream
|
||||||
if (tokn.type==tokens::gotoo) {
|
if (tokn.type==tokens::gotoo) {
|
||||||
if (tempstream.match(tokens::string) || tempstream.match(tokens::gotoo)) {
|
if (tempstream.match(tokens::string)) {
|
||||||
buildGoto(tempstream.next().name);
|
buildGoto(tempstream.next().name);
|
||||||
buildNoop();
|
delete c;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (tempstream.match(tokens::name)) {
|
||||||
|
buildGoto(tempstream.next().name,true);
|
||||||
delete c;
|
delete c;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -527,9 +531,13 @@ namespace dms {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (tokn.type == tokens::jump) {
|
else if (tokn.type == tokens::jump) {
|
||||||
if (tempstream.match(tokens::string) || tempstream.match(tokens::jump)) {
|
if (tempstream.match(tokens::string)) {
|
||||||
buildJump(tempstream.next().name);
|
buildJump(tempstream.next().name);
|
||||||
buildNoop();
|
delete c;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (tempstream.match(tokens::name)) {
|
||||||
|
buildJump(tempstream.next().name, true);
|
||||||
delete c;
|
delete c;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,8 +8,6 @@
|
|||||||
#include "dms_state.h"
|
#include "dms_state.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
#include "LineParser.h"
|
#include "LineParser.h"
|
||||||
#include "number_utils.h"
|
|
||||||
#include "string_utils.h"
|
|
||||||
#include "token.h"
|
#include "token.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "value.h"
|
#include "value.h"
|
||||||
|
|||||||
@ -61,12 +61,13 @@ namespace dms {
|
|||||||
dms_state::dms_state() {
|
dms_state::dms_state() {
|
||||||
// We should define the defaults for the enables
|
// We should define the defaults for the enables
|
||||||
pushMem(); // Main memory
|
pushMem(); // Main memory
|
||||||
enables.insert_or_assign("leaking", false);
|
disable("forwardlabels");
|
||||||
enables.insert_or_assign("debugging", false);
|
disable("leaking");
|
||||||
enables.insert_or_assign("warnings", false); //
|
disable("debugging");
|
||||||
enables.insert_or_assign("statesave", true); // Allows you to save state
|
disable("warnings");
|
||||||
enables.insert_or_assign("omniscient", false); // Allows you to know who's who when you first meet them
|
disable("omniscient");
|
||||||
enables.insert_or_assign("fullname", true);
|
disable("fullname");
|
||||||
|
enable("statesave");
|
||||||
chunk* c = new chunk;
|
chunk* c = new chunk;
|
||||||
c->name = "$END";
|
c->name = "$END";
|
||||||
c->type = blocktype::bt_block;
|
c->type = blocktype::bt_block;
|
||||||
|
|||||||
@ -179,9 +179,21 @@ namespace dms {
|
|||||||
case GOTO:
|
case GOTO:
|
||||||
{
|
{
|
||||||
value labl = c->args.args[0];
|
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) {
|
if (!nnpos) {
|
||||||
push_error(errors::error{ errors::choice_unknown ,utils::concat("Unknown choice!") });
|
// 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 label '",labl.resolve(this).getPrintable(),"'!") });
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else {
|
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 <3> newline
|
Line <3> newline
|
||||||
Line <4> flag
|
Line <4> flag
|
||||||
Line <4> name forseelabels
|
Line <4> name forwardlabels
|
||||||
Line <4> newline
|
|
||||||
Line <4> newline
|
Line <4> newline
|
||||||
Line <5> flag
|
Line <5> flag
|
||||||
Line <5> name savestate
|
Line <5> name savestate
|
||||||
Line <5> newline
|
Line <5> newline
|
||||||
Line <5> newline
|
Line <5> newline
|
||||||
Line <6> flag
|
|
||||||
Line <6> name fullname
|
|
||||||
Line <6> newline
|
|
||||||
Line <6> newline
|
Line <6> newline
|
||||||
Line <7> newline
|
Line <7> newline
|
||||||
|
Line <8> flag
|
||||||
|
Line <8> string loadtest.dms
|
||||||
|
Line <8> newline
|
||||||
Line <8> newline
|
Line <8> newline
|
||||||
Line <9> flag
|
Line <9> flag
|
||||||
Line <9> string loadtest.dms
|
Line <9> number 0.2
|
||||||
Line <9> newline
|
Line <9> newline
|
||||||
Line <9> newline
|
Line <9> newline
|
||||||
Line <10> flag
|
Line <10> flag
|
||||||
Line <10> number 0.2
|
Line <10> name extendedDefine
|
||||||
Line <10> newline
|
Line <10> newline
|
||||||
Line <10> newline
|
Line <10> newline
|
||||||
Line <11> flag
|
|
||||||
Line <11> name extendedDefine
|
|
||||||
Line <11> newline
|
Line <11> newline
|
||||||
Line <11> newline
|
Line <11> newline
|
||||||
|
Line <12> bracketo [
|
||||||
|
Line <12> name main
|
||||||
|
Line <12> bracketc ]
|
||||||
Line <12> newline
|
Line <12> newline
|
||||||
Line <12> newline
|
Line <12> newline
|
||||||
Line <13> bracketo [
|
Line <13> name Ryan
|
||||||
Line <13> name main
|
Line <13> colon :
|
||||||
Line <13> bracketc ]
|
Line <13> string Hello `Bob`, how are you doing?
|
||||||
Line <13> newline
|
Line <13> newline
|
||||||
Line <13> newline
|
Line <13> newline
|
||||||
Line <14> name Ryan
|
Line <14> name Bob
|
||||||
Line <14> colon :
|
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 <14> newline
|
Line <14> newline
|
||||||
Line <15> name Bob
|
Line <15> name a
|
||||||
Line <15> colon :
|
Line <15> equal =
|
||||||
Line <15> string Hi `Ryan`, I'm good.
|
Line <15> number 1000
|
||||||
Line <15> newline
|
Line <15> newline
|
||||||
Line <15> newline
|
Line <15> newline
|
||||||
Line <16> name a
|
Line <16> name imp
|
||||||
Line <16> equal =
|
Line <16> equal =
|
||||||
Line <16> number 1000
|
Line <16> string this
|
||||||
Line <16> newline
|
Line <16> newline
|
||||||
Line <16> newline
|
Line <16> newline
|
||||||
Line <17> name test
|
Line <17> name test
|
||||||
@ -76,7 +76,7 @@ Line <19> newline
|
|||||||
Line <19> newline
|
Line <19> newline
|
||||||
Line <20> string this
|
Line <20> string this
|
||||||
Line <20> gotoo
|
Line <20> gotoo
|
||||||
Line <20> string this
|
Line <20> name imp
|
||||||
Line <20> newline
|
Line <20> newline
|
||||||
Line <20> newline
|
Line <20> newline
|
||||||
Line <21> string that
|
Line <21> string that
|
||||||
@ -127,6 +127,7 @@ Line <31> parac )
|
|||||||
Line <31> newline
|
Line <31> newline
|
||||||
Line <31> newline
|
Line <31> newline
|
||||||
Line <32> newline
|
Line <32> newline
|
||||||
|
Line <32> newline
|
||||||
Line <33> newline
|
Line <33> newline
|
||||||
Line <33> newline
|
Line <33> newline
|
||||||
Line <34> newline
|
Line <34> newline
|
||||||
@ -141,83 +142,86 @@ Line <39> newline
|
|||||||
Line <40> newline
|
Line <40> newline
|
||||||
Line <41> newline
|
Line <41> 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 <42> newline
|
||||||
Line <43> 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 <44> newline
|
||||||
Line <45> newline
|
Line <45> newline
|
||||||
Line <46> name unknown
|
|
||||||
Line <46> equal =
|
|
||||||
Line <46> string Some Random Guy
|
|
||||||
Line <46> newline
|
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 <47> newline
|
Line <48> name unknown
|
||||||
Line <48> name money
|
|
||||||
Line <48> equal =
|
Line <48> equal =
|
||||||
Line <48> number 100
|
Line <48> string Some Random Guy
|
||||||
Line <48> newline
|
Line <48> newline
|
||||||
Line <48> newline
|
Line <48> newline
|
||||||
Line <49> name excited
|
Line <49> name age
|
||||||
Line <49> colon :
|
Line <49> equal =
|
||||||
Line <49> string path/to/file
|
Line <49> number 0.24
|
||||||
Line <49> newline
|
Line <49> newline
|
||||||
Line <49> newline
|
Line <49> newline
|
||||||
|
Line <50> name money
|
||||||
|
Line <50> equal =
|
||||||
|
Line <50> number 100
|
||||||
Line <50> newline
|
Line <50> newline
|
||||||
Line <50> newline
|
Line <50> newline
|
||||||
Line <51> bracketo [
|
Line <51> name excited
|
||||||
Line <51> name test1
|
|
||||||
Line <51> colon :
|
Line <51> colon :
|
||||||
Line <51> name function
|
Line <51> string path/to/file
|
||||||
Line <51> parao (
|
|
||||||
Line <51> parac )
|
|
||||||
Line <51> bracketc ]
|
|
||||||
Line <51> newline
|
Line <51> newline
|
||||||
Line <51> newline
|
Line <51> newline
|
||||||
Line <52> string Inside a function!
|
|
||||||
Line <52> newline
|
Line <52> newline
|
||||||
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 <53> newline
|
||||||
|
Line <54> string Inside a function!
|
||||||
|
Line <54> newline
|
||||||
Line <54> newline
|
Line <54> newline
|
||||||
Line <55> 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 <56> newline
|
|
||||||
Line <57> string Func Arguments: a = `a`, b = `b`, c = `c`
|
|
||||||
Line <57> newline
|
Line <57> newline
|
||||||
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 <58> newline
|
Line <58> newline
|
||||||
Line <59> ret
|
Line <59> string Func Arguments: a = `a`, b = `b`, c = `c`
|
||||||
Line <59> name a
|
|
||||||
Line <59> plus +
|
|
||||||
Line <59> name b
|
|
||||||
Line <59> plus +
|
|
||||||
Line <59> name c
|
|
||||||
Line <59> newline
|
Line <59> newline
|
||||||
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> newline
|
Line <1> newline
|
||||||
Line <1> bracketo [
|
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!
|
entry main // Will either start the first block seen or the block supplied by you!
|
||||||
//enable warnings
|
//enable warnings
|
||||||
disable omniscient
|
disable omniscient
|
||||||
enable forseelabels
|
enable forwardlabels // Do most of your labels exist ahead?
|
||||||
enable savestate
|
enable savestate
|
||||||
disable fullname
|
|
||||||
//enable leaking
|
//enable leaking
|
||||||
//enable debugging
|
//enable debugging
|
||||||
loadfile "loadtest.dms"
|
loadfile "loadtest.dms"
|
||||||
@ -14,30 +13,34 @@ using extendedDefine
|
|||||||
Ryan: "Hello `Bob`, how are you doing?"
|
Ryan: "Hello `Bob`, how are you doing?"
|
||||||
Bob: "Hi `Ryan`, I'm good."
|
Bob: "Hi `Ryan`, I'm good."
|
||||||
a = 1000
|
a = 1000
|
||||||
|
imp = "this"
|
||||||
test = invokeTest("Running external code!");
|
test = invokeTest("Running external code!");
|
||||||
"Loop Test... `test`"
|
"Loop Test... `test`"
|
||||||
choice "Pick one" {
|
choice "Pick one" {
|
||||||
"this" goto "this"
|
"this" goto imp
|
||||||
"that" goto ("that")
|
"that" goto ("that")
|
||||||
}
|
}
|
||||||
::this::
|
::this::
|
||||||
"At \"this\""
|
"At \"this\""
|
||||||
goto ("loop")
|
goto "loop"
|
||||||
::that::
|
::that::
|
||||||
"At \"that\""
|
"At \"that\""
|
||||||
::loop::
|
::loop::
|
||||||
a = a + 1
|
a = a + 1
|
||||||
"a = `a`"
|
"a = `a`"
|
||||||
goto ("loop")
|
goto ("loop")
|
||||||
// if (this==that) this()|that()
|
|
||||||
|
|
||||||
// if(this == that){
|
|
||||||
|
|
||||||
// } else if (that > this) {
|
if (this==that) this()|that()
|
||||||
|
|
||||||
// } else {
|
|
||||||
|
|
||||||
// }
|
if(this == that){
|
||||||
|
|
||||||
|
} else if (that > this) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
[Bob:char]
|
[Bob:char]
|
||||||
//fname = "Bob"
|
//fname = "Bob"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user