Implemented goto and jump as functons

This commit is contained in:
Ryan Ward 2020-11-12 23:21:06 -05:00
parent 34208eacff
commit e534274d09
6 changed files with 132 additions and 87 deletions

View File

@ -79,6 +79,7 @@ namespace dms {
// Build // Build
void buildGoto(std::string g, bool v = false); void buildGoto(std::string g, bool v = false);
void buildJump(std::string j, bool v = false);
void buildNoop(); void buildNoop();
void buildLabel(std::string l); void buildLabel(std::string l);
void buildSpeed(double s); void buildSpeed(double s);

View File

@ -11,6 +11,17 @@ namespace dms {
} }
current_chunk->addCmd(c); current_chunk->addCmd(c);
} }
void LineParser::buildJump(std::string g, bool v) {
cmd* c = new cmd;
c->opcode = codes::JUMP;
if (v) {
c->args.push(value(g, datatypes::variable));
}
else {
c->args.push(value(g));
}
current_chunk->addCmd(c);
}
void LineParser::buildNoop() { void LineParser::buildNoop() {
cmd* c = new cmd; cmd* c = new cmd;
c->opcode = codes::NOOP; c->opcode = codes::NOOP;

View File

@ -486,9 +486,10 @@ namespace dms {
That's all there is to functions within the bytecode side of things, the vm is where things are a little more involved That's all there is to functions within the bytecode side of things, the vm is where things are a little more involved
*/ */
if (stream->match(tokens::name, tokens::parao)) { if (stream->match(tokens::name, tokens::parao) || stream->match(tokens::gotoo, tokens::parao) || stream->match(tokens::name, tokens::jump)) {
cmd* c = new cmd; cmd* c = new cmd;
c->opcode = codes::FUNC; c->opcode = codes::FUNC;
token tokn = stream->peek();
std::string n = stream->next().name; std::string n = stream->next().name;
c->args.push(value(n,datatypes::variable)); // Set the func identifier as the first variable c->args.push(value(n,datatypes::variable)); // Set the func identifier as the first variable
// Let's set the target // Let's set the target
@ -513,6 +514,30 @@ namespace dms {
t.push_back(token{ tokens::nil,codes::NOOP,"",t[0].line_num }); t.push_back(token{ tokens::nil,codes::NOOP,"",t[0].line_num });
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 (tempstream.match(tokens::string) || tempstream.match(tokens::gotoo)) {
buildGoto(tempstream.next().name);
buildNoop();
delete c;
return true;
}
else {
badSymbol(&tempstream);
return false;
}
}
else if (tokn.type == tokens::jump) {
if (tempstream.match(tokens::string) || tempstream.match(tokens::jump)) {
buildJump(tempstream.next().name);
buildNoop();
delete c;
return true;
}
else {
badSymbol(&tempstream);
return false;
}
}
value tempval; value tempval;
token tok; token tok;
value ref = value(datatypes::variable); value ref = value(datatypes::variable);

Binary file not shown.

View File

@ -79,144 +79,145 @@ Line <20> gotoo
Line <20> string this Line <20> string this
Line <20> newline Line <20> newline
Line <20> newline Line <20> newline
Line <21> string test2 Line <21> string that
Line <21> name tryme Line <21> gotoo
Line <21> parao ( Line <21> parao (
Line <21> true true Line <21> string that
Line <21> parac ) Line <21> parac )
Line <21> newline Line <21> newline
Line <21> newline Line <21> newline
Line <22> string that Line <22> cbracketc }
Line <22> gotoo
Line <22> string that
Line <22> newline Line <22> newline
Line <22> newline Line <22> newline
Line <23> string test Line <23> label this
Line <23> name test
Line <23> parao (
Line <23> number 1
Line <23> seperator ,
Line <23> number 2
Line <23> seperator ,
Line <23> number 3
Line <23> parac )
Line <23> newline Line <23> newline
Line <23> newline Line <23> newline
Line <24> cbracketc } Line <24> string At "this"
Line <24> newline Line <24> newline
Line <24> newline Line <24> newline
Line <25> label this Line <25> gotoo
Line <25> parao (
Line <25> string loop
Line <25> parac )
Line <25> newline Line <25> newline
Line <25> newline Line <25> newline
Line <26> string At "this" Line <26> label that
Line <26> newline Line <26> newline
Line <26> newline Line <26> newline
Line <27> gotoo Line <27> string At "that"
Line <27> string loop
Line <27> newline Line <27> newline
Line <27> newline Line <27> newline
Line <28> label that Line <28> label loop
Line <28> newline Line <28> newline
Line <28> newline Line <28> newline
Line <29> string At "that" Line <29> name a
Line <29> equal =
Line <29> name a
Line <29> plus +
Line <29> number 1
Line <29> newline Line <29> newline
Line <29> newline Line <29> newline
Line <30> label loop Line <30> string a = `a`
Line <30> newline Line <30> newline
Line <30> newline Line <30> newline
Line <31> name a Line <31> gotoo
Line <31> equal = Line <31> parao (
Line <31> name a Line <31> string loop
Line <31> plus + Line <31> parac )
Line <31> number 1
Line <31> newline Line <31> newline
Line <31> newline Line <31> newline
Line <32> string a = `a`
Line <32> newline Line <32> newline
Line <32> newline
Line <33> gotoo
Line <33> string loop
Line <33> newline Line <33> newline
Line <33> newline Line <33> newline
Line <34> newline Line <34> newline
Line <34> newline
Line <35> bracketo [
Line <35> name Bob
Line <35> colon :
Line <35> name char
Line <35> bracketc ]
Line <35> newline Line <35> newline
Line <35> newline Line <35> newline
Line <36> newline Line <36> newline
Line <37> newline Line <37> newline
Line <37> newline
Line <38> newline Line <38> newline
Line <39> name unknown
Line <39> equal =
Line <39> string Some Random Guy
Line <39> newline Line <39> newline
Line <39> newline Line <39> newline
Line <40> name age
Line <40> equal =
Line <40> number 0.24
Line <40> newline Line <40> newline
Line <40> newline
Line <41> name money
Line <41> equal =
Line <41> number 100
Line <41> newline Line <41> newline
Line <41> newline Line <41> newline
Line <42> name excited Line <42> bracketo [
Line <42> name Bob
Line <42> colon : Line <42> colon :
Line <42> string path/to/file Line <42> name char
Line <42> bracketc ]
Line <42> newline Line <42> newline
Line <42> newline Line <42> newline
Line <43> newline Line <43> newline
Line <43> newline
Line <44> bracketo [
Line <44> name test1
Line <44> colon :
Line <44> name function
Line <44> parao (
Line <44> parac )
Line <44> bracketc ]
Line <44> newline Line <44> newline
Line <44> newline
Line <45> string Inside a function!
Line <45> 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 money
Line <48> equal =
Line <48> number 100
Line <48> newline Line <48> newline
Line <48> newline Line <48> newline
Line <49> bracketo [ Line <49> name excited
Line <49> name newblock
Line <49> colon : Line <49> colon :
Line <49> name function Line <49> string path/to/file
Line <49> parao (
Line <49> name a
Line <49> seperator ,
Line <49> name b
Line <49> seperator ,
Line <49> name c
Line <49> parac )
Line <49> bracketc ]
Line <49> newline Line <49> newline
Line <49> newline Line <49> newline
Line <50> string Func Arguments: a = `a`, b = `b`, c = `c`
Line <50> newline Line <50> newline
Line <50> newline Line <50> newline
Line <51> string Time to return Line <51> bracketo [
Line <51> name test1
Line <51> colon :
Line <51> name function
Line <51> parao (
Line <51> parac )
Line <51> bracketc ]
Line <51> newline Line <51> newline
Line <51> newline Line <51> newline
Line <52> ret Line <52> string Inside a function!
Line <52> name a
Line <52> plus +
Line <52> name b
Line <52> plus +
Line <52> name c
Line <52> newline Line <52> newline
Line <52> newline Line <52> newline
Line <52> eof Line <53> 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> 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> newline
Line <59> newline
Line <59> eof
Line <1> newline Line <1> newline
Line <1> newline Line <1> newline
Line <1> bracketo [ Line <1> bracketo [

View File

@ -18,19 +18,26 @@ using extendedDefine
"Loop Test... `test`" "Loop Test... `test`"
choice "Pick one" { choice "Pick one" {
"this" goto "this" "this" goto "this"
"test2" tryme(true) "that" goto ("that")
"that" goto "that"
"test" test(1,2,3)
} }
::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) {
// } else {
// }
[Bob:char] [Bob:char]
//fname = "Bob" //fname = "Bob"