fixed goto/jump ()

This commit is contained in:
Ryan Ward 2020-11-13 23:24:01 -05:00
parent e534274d09
commit b602823646
11 changed files with 118 additions and 133 deletions

View File

@ -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" />

View File

@ -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>

View File

@ -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;
}

View File

@ -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"

View File

@ -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;

View File

@ -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 {

Binary file not shown.

View File

@ -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 [

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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){
// } else if (that > this) {
if (this==that) this()|that()
// } else {
// }
if(this == that){
} else if (that > this) {
} else {
}
[Bob:char]
//fname = "Bob"