Custom datatypes mostly implemented

This commit is contained in:
Ryan Ward 2021-01-05 19:57:59 -05:00
parent 2e298fab80
commit 8ad61af59d
14 changed files with 269 additions and 226 deletions

View File

@ -111,12 +111,12 @@
<ClCompile Include="Invoker.cpp"> <ClCompile Include="Invoker.cpp">
<Filter>Source Files\DMS\objects</Filter> <Filter>Source Files\DMS\objects</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="sound.cpp">
<Filter>Source Files\DMS\standardMethods</Filter>
</ClCompile>
<ClCompile Include="pch.cpp"> <ClCompile Include="pch.cpp">
<Filter>Source Files\DMS</Filter> <Filter>Source Files\DMS</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="sound.cpp">
<Filter>Source Files\DMS\platformdep</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="value.h"> <ClInclude Include="value.h">
@ -182,11 +182,11 @@
<ClInclude Include="s_value.h"> <ClInclude Include="s_value.h">
<Filter>Header Files\DMS\C-API</Filter> <Filter>Header Files\DMS\C-API</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="sound.h">
<Filter>Header Files\DMS\standardMethods</Filter>
</ClInclude>
<ClInclude Include="pch.h"> <ClInclude Include="pch.h">
<Filter>Header Files\DMS</Filter> <Filter>Header Files\DMS</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="sound.h">
<Filter>Header Files\DMS\platformdep</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -43,7 +43,7 @@ namespace dms {
c->opcode = codes::KNOT; c->opcode = codes::KNOT;
c->args.push(assn); c->args.push(assn);
current_chunk->addCmd(c); current_chunk->addCmd(c);
v.set(assn.s); v.set(assn.getString());
v.type = variable; v.type = variable;
return true; return true;
} }
@ -64,7 +64,7 @@ namespace dms {
tokenstream tempstream(&toks); tokenstream tempstream(&toks);
value var(datatypes::variable); value var(datatypes::variable);
if (match_process_standard(&tempstream, var)) { if (match_process_standard(&tempstream, var)) {
v.set(var.s); v.set(var.getString());
v.type = datatypes::variable; v.type = datatypes::variable;
return true; return true;
} }
@ -178,7 +178,7 @@ namespace dms {
value var = value(datatypes::variable); value var = value(datatypes::variable);
// We have some work to do here // We have some work to do here
if (match_process_standard(stream, right)) { if (match_process_standard(stream, right)) {
v.set(var.s); v.set(var.getString());
v.type = datatypes::variable; v.type = datatypes::variable;
cmd* c = new cmd; cmd* c = new cmd;
c->opcode = code; c->opcode = code;
@ -242,7 +242,7 @@ namespace dms {
value var = value(datatypes::variable); value var = value(datatypes::variable);
// COMP cmp out v1 v2 // COMP cmp out v1 v2
if (match_process_standard(stream,right)) { if (match_process_standard(stream,right)) {
v.set(var.s); v.set(var.getString());
v.type = datatypes::variable; v.type = datatypes::variable;
cmd* c = new cmd; cmd* c = new cmd;
c->opcode = codes::COMP; c->opcode = codes::COMP;

View File

@ -459,7 +459,7 @@ namespace dms {
// We got a name which is refering to a variable so lets build one // We got a name which is refering to a variable so lets build one
value v; value v;
v.type = datatypes::variable; // Special type, it writes data to the string portion, but is interperted as a lookup v.type = datatypes::variable; // Special type, it writes data to the string portion, but is interperted as a lookup
v.s = tokens[i].name; v.getString() = tokens[i].name;
args.push(v); args.push(v);
} }
else if (tokens[i].type == tokens::seperator) { else if (tokens[i].type == tokens::seperator) {

View File

@ -21,6 +21,9 @@ namespace dms {
return datatype[args->args[0].type]; return datatype[args->args[0].type];
} }
return "nil"; return "nil";
}
value concat(void* self, dms_state* state, dms_args* args) {
} }
void init(dms_state* state) { void init(dms_state* state) {
state->invoker.registerFunction("print", print); state->invoker.registerFunction("print", print);

View File

@ -3,7 +3,5 @@
namespace dms { namespace dms {
namespace core { namespace core {
void init(dms_state* state); void init(dms_state* state);
value print(void* self, dms_state* state, dms_args* args);
value type(void* self, dms_state* state, dms_args* args);
} }
} }

View File

@ -19,7 +19,7 @@ namespace dms {
if (!state->run(func, Fmem)) { if (!state->run(func, Fmem)) {
std::vector<value> err = Fmem->examine(datatypes::error); std::vector<value> err = Fmem->examine(datatypes::error);
if (err.size() > 0) if (err.size() > 0)
state->push_error(errors::error{ errors::unknown ,err[0].s }); state->push_error(errors::error{ errors::unknown ,err[0].getString() });
else else
state->push_error(errors::error{ errors::unknown ,"Function Returned an error!" }); state->push_error(errors::error{ errors::unknown ,"Function Returned an error!" });
state->popMem();// We need to restore the stack state->popMem();// We need to restore the stack
@ -182,7 +182,7 @@ namespace dms {
bool dms_state::assign(value var, value val) { bool dms_state::assign(value var, value val) {
if (val.type == datatypes::error) { if (val.type == datatypes::error) {
(*getMem())[var.getPrintable()] = val; (*getMem())[var.getPrintable()] = val;
push_error(errors::error{ errors::unknown ,val.s }); push_error(errors::error{ errors::unknown ,val.getString() });
return false; return false;
} }
val.state = this; val.state = this;

View File

@ -259,7 +259,7 @@ namespace dms {
{ {
if (c->args.args[0].resolve(this).type == datatypes::custom) { if (c->args.args[0].resolve(this).type == datatypes::custom) {
auto cust = c->args.args[0].resolve(this); auto cust = c->args.args[0].resolve(this);
auto fname = c->args.args[1].s; auto fname = c->args.args[1].getString();
auto assn = c->args.args[2]; auto assn = c->args.args[2];
dms_args args; dms_args args;
@ -340,15 +340,15 @@ namespace dms {
value env = c->args.args[1]; value env = c->args.args[1];
value indx = c->args.args[2].resolve(this); value indx = c->args.args[2].resolve(this);
value assn = c->args.args[3].resolve(this); value assn = c->args.args[3].resolve(this);
if (env.type == datatypes::block && blockExists(env.s)) { // If this is a block let's handle this if (env.type == datatypes::block && blockExists(env.getString())) { // If this is a block let's handle this
enviroment* e = nullptr; enviroment* e = nullptr;
if (environments.count(env.s)) { if (environments.count(env.getString())) {
e = environments[env.s]; e = environments[env.getString()];
} }
else if (characters.count(env.s)) { else if (characters.count(env.getString())) {
e = characters[env.s]; e = characters[env.getString()];
} }
e->values[indx.s] = assn; e->values[indx.getString()] = assn;
} }
else if (env.type == datatypes::env) { else if (env.type == datatypes::env) {
if (indx.type == datatypes::number) { if (indx.type == datatypes::number) {
@ -437,13 +437,13 @@ namespace dms {
value assn = c->args.args[0]; value assn = c->args.args[0];
value env = c->args.args[1]; value env = c->args.args[1];
value indx = c->args.args[2].resolve(this); value indx = c->args.args[2].resolve(this);
if (env.type == datatypes::block && blockExists(env.s)) { // If this is a block let's handle this if (env.type == datatypes::block && blockExists(env.getString())) { // If this is a block let's handle this
enviroment* e = nullptr; enviroment* e = nullptr;
if (environments.count(env.s)) { if (environments.count(env.getString())) {
e = environments[env.s]; e = environments[env.getString()];
} }
else if (characters.count(env.s)) { else if (characters.count(env.getString())) {
e = characters[env.s]; e = characters[env.getString()];
} }
if(!assign( assn, e->values[indx.getPrintable()])) { if(!assign( assn, e->values[indx.getPrintable()])) {
return false; return false;
@ -556,13 +556,13 @@ namespace dms {
break; break;
case SSPK: case SSPK:
//Because we are using void* we must cast our pointers //Because we are using void* we must cast our pointers
if (characterExists(c->args.args[0].s)){ if (characterExists(c->args.args[0].getString())){
speaker = getCharacter(c->args.args[0].s); speaker = getCharacter(c->args.args[0].getString());
if (!handler->handleSpeaker(this, speaker)) if (!handler->handleSpeaker(this, speaker))
return false; return false;
} }
else { else {
push_error(errors::error{ errors::disp_unknown,concat("Unknown character '",c->args.args[0].s,"'!")}); push_error(errors::error{ errors::disp_unknown,concat("Unknown character '",c->args.args[0].getString(),"'!")});
return false; return false;
} }
break; break;
@ -572,7 +572,7 @@ namespace dms {
break; break;
case CHAR: case CHAR:
{ {
std::string cha = c->args.args[0].s; std::string cha = c->args.args[0].getString();
getCharacter(cha); getCharacter(cha);
break; break;
} }
@ -596,10 +596,10 @@ namespace dms {
//Because we are using void* we must cast our pointers //Because we are using void* we must cast our pointers
{ {
std::vector<std::string> args; std::vector<std::string> args;
std::string prompt = c->args.args[0].s; std::string prompt = c->args.args[0].getString();
std::string fn = c->args.args[1].s; std::string fn = c->args.args[1].getString();
for (size_t i = 2; i < c->args.args.size(); i++) for (size_t i = 2; i < c->args.args.size(); i++)
args.push_back(c->args.args[i].resolve(this).s); args.push_back(c->args.args[i].resolve(this).getString());
size_t npos = handler->handleChoice(this, prompt, args); size_t npos = handler->handleChoice(this, prompt, args);
size_t nnpos = seek(concat("CHOI_", fn, "_", npos),cmds,LABL,pos); size_t nnpos = seek(concat("CHOI_", fn, "_", npos),cmds,LABL,pos);
if (!nnpos) { if (!nnpos) {
@ -614,7 +614,7 @@ namespace dms {
case JUMP: case JUMP:
// Value assert resolves the data so a variable must eventually equal a string // Value assert resolves the data so a variable must eventually equal a string
if (utils::valueassert(c->args, this, datatypes::string)) { if (utils::valueassert(c->args, this, datatypes::string)) {
std::string block = c->args.args[0].resolve(this).s; std::string block = c->args.args[0].resolve(this).getString();
if (chunks[block] == NULL) { if (chunks[block] == NULL) {
push_error(errors::error{ errors::non_existing_block ,utils::concat("Attempted to Jump to a non existing block [",block,"]") }); push_error(errors::error{ errors::non_existing_block ,utils::concat("Attempted to Jump to a non existing block [",block,"]") });
return false; return false;

Binary file not shown.

View File

@ -33,55 +33,108 @@ Line <12> name extendedDefine
Line <12> newline Line <12> newline
Line <12> newline Line <12> newline
Line <13> newline Line <13> newline
Line <14> name music
Line <14> equal =
Line <14> name loadMusic
Line <14> parao (
Line <14> string test2.ogg
Line <14> parac )
Line <14> newline Line <14> newline
Line <14> newline Line <14> newline
Line <15> name music2 Line <15> name music
Line <15> equal = Line <15> equal =
Line <15> name loadMusic Line <15> name loadMusic
Line <15> parao ( Line <15> parao (
Line <15> string test.ogg Line <15> string test2.ogg
Line <15> parac ) Line <15> parac )
Line <15> newline Line <15> newline
Line <15> newline Line <15> newline
Line <16> bracketo [ Line <16> name music2
Line <16> name main Line <16> equal =
Line <16> bracketc ] Line <16> name loadMusic
Line <16> parao (
Line <16> string test.ogg
Line <16> parac )
Line <16> newline Line <16> newline
Line <16> newline Line <16> newline
Line <17> name a
Line <17> equal =
Line <17> number 10
Line <17> newline Line <17> newline
Line <17> newline Line <17> newline
Line <18> name tester Line <18> bracketo [
Line <18> parao ( Line <18> name main
Line <18> parac ) Line <18> bracketc ]
Line <18> newline Line <18> newline
Line <18> newline Line <18> newline
Line <19> name print
Line <19> parao (
Line <19> string a =
Line <19> plus +
Line <19> name a
Line <19> parac )
Line <19> newline
Line <19> newline Line <19> newline
Line <20> newline Line <20> newline
Line <20> newline
Line <21> newline Line <21> newline
Line <21> newline
Line <22> name music
Line <22> dot dot
Line <22> name setPitch
Line <22> parao (
Line <22> number 0.7
Line <22> parac )
Line <22> newline Line <22> newline
Line <22> newline
Line <23> name print
Line <23> parao (
Line <23> name music
Line <23> dot .
Line <23> name getStatus
Line <23> parao (
Line <23> parac )
Line <23> parac )
Line <23> newline Line <23> newline
Line <23> newline
Line <24> name music
Line <24> dot .
Line <24> name play
Line <24> parao (
Line <24> parac )
Line <24> newline Line <24> newline
Line <24> newline
Line <25> name print
Line <25> parao (
Line <25> name music
Line <25> dot .
Line <25> name getStatus
Line <25> parao (
Line <25> parac )
Line <25> parac )
Line <25> newline Line <25> newline
Line <25> newline
Line <26> name print
Line <26> parao (
Line <26> string Type:
Line <26> plus +
Line <26> name type
Line <26> parao (
Line <26> name music2
Line <26> parac )
Line <26> parac )
Line <26> newline Line <26> newline
Line <26> newline
Line <27> name while
Line <27> parao (
Line <27> name music
Line <27> dot dot
Line <27> name getStatus
Line <27> parao (
Line <27> parac )
Line <27> not !
Line <27> equal =
Line <27> string stopped
Line <27> parac )
Line <27> cbracketo {
Line <27> newline Line <27> newline
Line <27> newline
Line <28> name wait
Line <28> number 1
Line <28> newline Line <28> newline
Line <28> newline
Line <29> cbracketc }
Line <29> newline Line <29> newline
Line <29> newline
Line <30> name print
Line <30> parao (
Line <30> string Done
Line <30> parac )
Line <30> newline
Line <30> newline Line <30> newline
Line <31> newline Line <31> newline
Line <32> newline Line <32> newline
@ -96,270 +149,255 @@ Line <40> newline
Line <41> newline Line <41> newline
Line <42> newline Line <42> newline
Line <43> newline Line <43> newline
Line <43> newline
Line <44> bracketo [
Line <44> name tester
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> name print
Line <45> parao (
Line <45> name a
Line <45> parac )
Line <45> newline Line <45> newline
Line <45> newline Line <45> newline
Line <46> bracketo [
Line <46> name SelectSong
Line <46> colon :
Line <46> name function
Line <46> parao (
Line <46> parac )
Line <46> bracketc ]
Line <46> newline Line <46> newline
Line <46> newline Line <46> newline
Line <47> bracketo [ Line <47> control
Line <47> name SelectSong Line <47> string Pick song:
Line <47> colon : Line <47> cbracketo {
Line <47> name function
Line <47> parao (
Line <47> parac )
Line <47> bracketc ]
Line <47> newline Line <47> newline
Line <47> newline Line <47> newline
Line <48> control Line <48> string Music 1
Line <48> string Pick song:
Line <48> cbracketo { Line <48> cbracketo {
Line <48> newline Line <48> newline
Line <48> newline Line <48> newline
Line <49> string Music 1 Line <49> ret
Line <49> cbracketo { Line <49> name music
Line <49> newline Line <49> newline
Line <49> newline Line <49> newline
Line <50> ret Line <50> cbracketc }
Line <50> name music
Line <50> newline Line <50> newline
Line <50> newline Line <50> newline
Line <51> cbracketc } Line <51> string Music 2
Line <51> cbracketo {
Line <51> newline Line <51> newline
Line <51> newline Line <51> newline
Line <52> string Music 2 Line <52> ret
Line <52> cbracketo { Line <52> name music2
Line <52> newline Line <52> newline
Line <52> newline Line <52> newline
Line <53> ret Line <53> cbracketc }
Line <53> name music2
Line <53> newline Line <53> newline
Line <53> newline Line <53> newline
Line <54> cbracketc } Line <54> cbracketc }
Line <54> newline Line <54> newline
Line <54> newline Line <54> newline
Line <55> cbracketc }
Line <55> newline Line <55> newline
Line <55> newline Line <55> newline
Line <56> bracketo [
Line <56> name player
Line <56> colon :
Line <56> name function
Line <56> parao (
Line <56> name song
Line <56> parac )
Line <56> bracketc ]
Line <56> newline Line <56> newline
Line <56> newline Line <56> newline
Line <57> bracketo [ Line <57> control
Line <57> name player Line <57> string What you wanna do?
Line <57> colon : Line <57> cbracketo {
Line <57> name function
Line <57> parao (
Line <57> name song
Line <57> parac )
Line <57> bracketc ]
Line <57> newline Line <57> newline
Line <57> newline Line <57> newline
Line <58> control Line <58> string play/resume
Line <58> string What you wanna do?
Line <58> cbracketo { Line <58> cbracketo {
Line <58> newline Line <58> newline
Line <58> newline Line <58> newline
Line <59> string play/resume Line <59> name song
Line <59> cbracketo { Line <59> dot dot
Line <59> name play
Line <59> parao (
Line <59> parac )
Line <59> newline Line <59> newline
Line <59> newline Line <59> newline
Line <60> name song Line <60> name player
Line <60> dot dot
Line <60> name play
Line <60> parao ( Line <60> parao (
Line <60> name song
Line <60> parac ) Line <60> parac )
Line <60> newline Line <60> newline
Line <60> newline Line <60> newline
Line <61> name player Line <61> cbracketc }
Line <61> parao (
Line <61> name song
Line <61> parac )
Line <61> newline Line <61> newline
Line <61> newline Line <61> newline
Line <62> cbracketc } Line <62> string pause
Line <62> cbracketo {
Line <62> newline Line <62> newline
Line <62> newline Line <62> newline
Line <63> string pause Line <63> name song
Line <63> cbracketo { Line <63> dot .
Line <63> name pause
Line <63> parao (
Line <63> parac )
Line <63> newline Line <63> newline
Line <63> newline Line <63> newline
Line <64> name song Line <64> name player
Line <64> dot .
Line <64> name pause
Line <64> parao ( Line <64> parao (
Line <64> name song
Line <64> parac ) Line <64> parac )
Line <64> newline Line <64> newline
Line <64> newline Line <64> newline
Line <65> name player Line <65> cbracketc }
Line <65> parao (
Line <65> name song
Line <65> parac )
Line <65> newline Line <65> newline
Line <65> newline Line <65> newline
Line <66> cbracketc } Line <66> string stop
Line <66> cbracketo {
Line <66> newline Line <66> newline
Line <66> newline Line <66> newline
Line <67> string stop Line <67> name song
Line <67> cbracketo { Line <67> dot .
Line <67> name stop
Line <67> parao (
Line <67> parac )
Line <67> newline Line <67> newline
Line <67> newline Line <67> newline
Line <68> name song Line <68> name player
Line <68> dot .
Line <68> name stop
Line <68> parao ( Line <68> parao (
Line <68> name song
Line <68> parac ) Line <68> parac )
Line <68> newline Line <68> newline
Line <68> newline Line <68> newline
Line <69> name player Line <69> cbracketc }
Line <69> parao (
Line <69> name song
Line <69> parac )
Line <69> newline Line <69> newline
Line <69> newline Line <69> newline
Line <70> cbracketc } Line <70> string newSong
Line <70> cbracketo {
Line <70> newline Line <70> newline
Line <70> newline Line <70> newline
Line <71> string newSong Line <71> name song
Line <71> cbracketo { Line <71> dot .
Line <71> name stop
Line <71> parao (
Line <71> parac )
Line <71> newline Line <71> newline
Line <71> newline Line <71> newline
Line <72> name song Line <72> name player
Line <72> dot .
Line <72> name stop
Line <72> parao ( Line <72> parao (
Line <72> name song
Line <72> parac ) Line <72> parac )
Line <72> newline Line <72> newline
Line <72> newline Line <72> newline
Line <73> name player Line <73> cbracketc }
Line <73> parao (
Line <73> name song
Line <73> parac )
Line <73> newline Line <73> newline
Line <73> newline Line <73> newline
Line <74> cbracketc } Line <74> string quit
Line <74> exit
Line <74> number 0
Line <74> newline Line <74> newline
Line <74> newline Line <74> newline
Line <75> string quit Line <75> cbracketc }
Line <75> exit
Line <75> number 0
Line <75> newline Line <75> newline
Line <75> newline Line <75> newline
Line <76> cbracketc }
Line <76> newline Line <76> newline
Line <76> newline Line <76> newline
Line <77> bracketo [
Line <77> name Ryan
Line <77> colon :
Line <77> name char
Line <77> bracketc ]
Line <77> newline Line <77> newline
Line <77> newline Line <77> newline
Line <78> bracketo [ Line <78> name age
Line <78> name Ryan Line <78> equal =
Line <78> colon : Line <78> number 21
Line <78> name char
Line <78> bracketc ]
Line <78> newline Line <78> newline
Line <78> newline Line <78> newline
Line <79> name age Line <79> name money
Line <79> equal = Line <79> equal =
Line <79> number 21 Line <79> number 1000
Line <79> newline Line <79> newline
Line <79> newline Line <79> newline
Line <80> name money Line <80> name lname
Line <80> equal = Line <80> equal =
Line <80> number 1000 Line <80> string Ward
Line <80> newline Line <80> newline
Line <80> newline Line <80> newline
Line <81> name lname Line <81> name known
Line <81> equal = Line <81> equal =
Line <81> string Ward Line <81> true true
Line <81> newline Line <81> newline
Line <81> newline Line <81> newline
Line <82> name known
Line <82> equal =
Line <82> true true
Line <82> newline
Line <82> newline Line <82> newline
Line <83> name calm
Line <83> colon :
Line <83> string ./path/to/file
Line <83> newline Line <83> newline
Line <84> name calm Line <83> newline
Line <84> name excited
Line <84> colon : Line <84> colon :
Line <84> string ./path/to/file Line <84> string ./path/to/file
Line <84> newline Line <84> newline
Line <84> newline Line <84> newline
Line <85> name excited
Line <85> colon :
Line <85> string ./path/to/file
Line <85> newline Line <85> newline
Line <85> newline Line <85> newline
Line <86> bracketo [
Line <86> name John
Line <86> colon :
Line <86> name char
Line <86> bracketc ]
Line <86> newline Line <86> newline
Line <86> newline Line <86> newline
Line <87> bracketo [ Line <87> name lname
Line <87> name John Line <87> equal =
Line <87> colon : Line <87> string Johnson
Line <87> name char
Line <87> bracketc ]
Line <87> newline Line <87> newline
Line <87> newline Line <87> newline
Line <88> name lname Line <88> name age
Line <88> equal = Line <88> equal =
Line <88> string Johnson Line <88> number 16
Line <88> newline Line <88> newline
Line <88> newline Line <88> newline
Line <89> name age Line <89> name money
Line <89> equal = Line <89> equal =
Line <89> number 16 Line <89> number 100000
Line <89> newline Line <89> newline
Line <89> newline Line <89> newline
Line <90> name money Line <90> name known
Line <90> equal = Line <90> equal =
Line <90> number 100000 Line <90> true true
Line <90> newline Line <90> newline
Line <90> newline Line <90> newline
Line <91> name known
Line <91> equal =
Line <91> true true
Line <91> newline Line <91> newline
Line <91> newline Line <91> newline
Line <92> bracketo [
Line <92> name Bob
Line <92> colon :
Line <92> name char
Line <92> bracketc ]
Line <92> newline Line <92> newline
Line <92> newline Line <92> newline
Line <93> bracketo [
Line <93> name Bob
Line <93> colon :
Line <93> name char
Line <93> bracketc ]
Line <93> newline
Line <93> newline Line <93> newline
Line <94> newline Line <94> newline
Line <95> name lname
Line <95> equal =
Line <95> string Johnson
Line <95> newline Line <95> newline
Line <96> name lname Line <96> name unknown
Line <96> equal = Line <96> equal =
Line <96> string Johnson Line <96> string Some Random Guy
Line <96> newline Line <96> newline
Line <97> name unknown Line <96> newline
Line <97> name age
Line <97> equal = Line <97> equal =
Line <97> string Some Random Guy Line <97> number 24
Line <97> newline Line <97> newline
Line <97> newline Line <97> newline
Line <98> name age Line <98> name money
Line <98> equal = Line <98> equal =
Line <98> number 24 Line <98> number 100
Line <98> newline Line <98> newline
Line <98> newline Line <98> newline
Line <99> name money Line <99> name excited
Line <99> equal = Line <99> colon :
Line <99> number 100 Line <99> string path/to/file
Line <99> newline Line <99> newline
Line <99> newline Line <99> newline
Line <100> name excited Line <99> eof
Line <100> colon :
Line <100> string path/to/file
Line <100> newline
Line <100> newline
Line <100> eof

View File

@ -82,7 +82,7 @@ namespace dms::audio {
if (args->size() || args->args[0].resolve(state).type == datatypes::string) { if (args->size() || args->args[0].resolve(state).type == datatypes::string) {
sf::Music* music = new sf::Music; sf::Music* music = new sf::Music;
if (!music->openFromFile(args->args[0].s)) { if (!music->openFromFile(args->args[0].getString())) {
return value("Cannot open audio stream!", datatypes::error); return value("Cannot open audio stream!", datatypes::error);
} }
return value(music, "audiostream"); return value(music, "audiostream");

View File

@ -11,21 +11,23 @@ enable savestate
version 0.2 version 0.2
using extendedDefine using extendedDefine
// this code will reside within // this code will reside within
music = loadMusic("test2.ogg") music = loadMusic("test2.ogg")
music2 = loadMusic("test.ogg") music2 = loadMusic("test.ogg")
[main] [main]
a = 10 // Let's extend the base feature set
tester()
print("a = " + a)
// music.setPitch(.7) music.setPitch(.7)
// print(music.getStatus()) print(music.getStatus())
// music.play() music.play()
// print(music.getStatus()) print(music.getStatus())
// print("Type: " + type(music2)) print("Type: " + type(music2))
// while(music.getStatus()!="stopped"){ while(music.getStatus()!="stopped"){
// wait 1 wait 1
// } }
// print("Done") print("Done")
// a = 0 // a = 0
// while (true){ // while (true){
// asm { // asm {
@ -41,9 +43,6 @@ music2 = loadMusic("test.ogg")
// player(song) // player(song)
// } // }
[tester:function()]
print(a)
[SelectSong:function()] [SelectSong:function()]
choice "Pick song:" { choice "Pick song:" {
"Music 1" { "Music 1" {

View File

@ -359,8 +359,8 @@ namespace dms {
return false; return false;
} }
value value::resolve(dms_state* _state) { value value::resolve(dms_state* _state) {
if (type == datatypes::variable && (*this)!=(*_state->getMem())[s]) { if (type == datatypes::variable && (*this)!=(*_state->getMem())[getString()]) {
return (*_state->getMem())[s].resolve(_state); return (*_state->getMem())[getString()].resolve(_state);
} }
return *this; return *this;
} }
@ -412,17 +412,17 @@ namespace dms {
return "custom"; return "custom";
} }
else if (type == block) { else if (type == block) {
if (state->characterExists(s)) { if (state->characterExists(getString())) {
auto cha = state->getCharacter(s); auto cha = state->getCharacter(getString());
return cha->getName(); return cha->getName();
} }
return s; return getString();
} }
else if (type == datatypes::variable) { else if (type == datatypes::variable) {
return s; // Do the lookup return getString(); // Do the lookup
} }
else if (type == datatypes::error) { else if (type == datatypes::error) {
return std::string("ERROR: ") + s; return std::string("ERROR: ") + getString();
} }
else if (type == datatypes::escape) { else if (type == datatypes::escape) {
return ""; return "";
@ -450,6 +450,10 @@ namespace dms {
else else
return INT_MIN; return INT_MIN;
} }
std::string value::getString() const
{
return s;
}
// Compile time // Compile time
void value::nuke() { void value::nuke() {
delete e; delete e;
@ -457,7 +461,7 @@ namespace dms {
} }
std::ostream& operator << (std::ostream& out, const value& c) { std::ostream& operator << (std::ostream& out, const value& c) {
if (c.type == string) { if (c.type == string) {
out << (char)c.type << c.s << (char)0; out << (char)c.type << c.getString() << (char)0;
} }
else if (c.type == number) { else if (c.type == number) {
out << (char)c.type << c.n; out << (char)c.type << c.n;
@ -481,10 +485,10 @@ namespace dms {
out << (char)c.type << "Custom Data: " << c; out << (char)c.type << "Custom Data: " << c;
} }
else if (c.type == block) { else if (c.type == block) {
out << (char)c.type << c.s; out << (char)c.type << c.getString();
} }
else if (c.type == datatypes::variable) { else if (c.type == datatypes::variable) {
out << (char)c.type << c.s; // Do the lookup out << (char)c.type << c.getString(); // Do the lookup
} }
else if (c.type == datatypes::escape) { else if (c.type == datatypes::escape) {
out << (char)0; out << (char)0;

View File

@ -84,6 +84,7 @@ namespace dms {
std::string toString() const; std::string toString() const;
double getDouble() const; double getDouble() const;
int64_t getInt() const; int64_t getInt() const;
std::string getString() const;
friend std::ostream& operator << (std::ostream& out, const value& c); friend std::ostream& operator << (std::ostream& out, const value& c);
}; };

View File

@ -6,7 +6,7 @@ The Dialogue Management Script's goal is to provide a nice and simple way to hav
- [X] ~~Implement bytecode for for/while loops~~ - [X] ~~Implement bytecode for for/while loops~~
- [X] ~~Implement bytecode for concatenation~~ - [X] ~~Implement bytecode for concatenation~~
- [X] ~~Interpert all the bytecode~~ - [X] ~~Interpert all the bytecode~~
- [ ] Finish implementing custom datatype - [X] ~~Finish implementing custom datatype~~
- [ ] Speed up interperter - [ ] Speed up interperter
- [ ] Finish C API for code - [ ] Finish C API for code
- [ ] Extend beginning features - [ ] Extend beginning features