diff --git a/Repl.vcxproj b/Repl.vcxproj
index 555ef5c..2bd6283 100644
--- a/Repl.vcxproj
+++ b/Repl.vcxproj
@@ -71,12 +71,12 @@
false
- $(SolutionDir)out\$(Configuration)\
- $(Platform)\$(ProjectName)\$(Configuration)\
+ $(SolutionDir)out\
+ $(Platform)\$(Configuration)\$(ProjectName)\
- $(SolutionDir)out\$(Configuration)\
- $(Platform)\$(ProjectName)\$(Configuration)\
+ $(SolutionDir)out\
+ $(Platform)\$(Configuration)\$(ProjectName)\
@@ -110,7 +110,7 @@
Toy.lib;%(AdditionalDependencies)
- $(SolutionDir)out\$(Configuration)
+ $(SolutionDir)out
$(SolutionDir)/source;%(AdditionalIncludeDirectories)
@@ -125,30 +125,32 @@
$(SolutionDir)/source;%(AdditionalIncludeDirectories)
- $(SolutionDir)out\$(Configuration)
+ $(SolutionDir)out
Toy.lib;%(AdditionalDependencies)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{26360002-cc2a-469a-9b28-ba0c1af41657}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Toy.vcxproj b/Toy.vcxproj
index 58baba4..aa3a9b6 100644
--- a/Toy.vcxproj
+++ b/Toy.vcxproj
@@ -71,12 +71,12 @@
$(SolutionDir)out\
- $(Platform)\$(Configuration)\
+ $(Platform)\$(Configuration)\$(ProjectName)\
false
$(SolutionDir)out\
- $(Platform)\$(Configuration)\
+ $(Platform)\$(Configuration)\$(ProjectName)\
false
diff --git a/repl/lib_about.h b/repl/lib_about.h
deleted file mode 100644
index c7ba214..0000000
--- a/repl/lib_about.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#pragma once
-
-#include "toy_interpreter.h"
-
-int Toy_hookAbout(Toy_Interpreter* interpreter, Toy_Literal identifier, Toy_Literal alias);
diff --git a/repl/lib_standard.c b/repl/lib_standard.c
index 1c261b1..356564b 100644
--- a/repl/lib_standard.c
+++ b/repl/lib_standard.c
@@ -202,11 +202,11 @@ static int nativeMax(Toy_Interpreter* interpreter, Toy_LiteralArray* arguments)
//cooerce if needed
if (TOY_IS_INTEGER(resultLiteral) && TOY_IS_FLOAT(selfLiteral)) {
- resultLiteral = TOY_TO_FLOAT_LITERAL( TOY_AS_INTEGER(resultLiteral) );
+ resultLiteral = TOY_TO_FLOAT_LITERAL( (float)TOY_AS_INTEGER(resultLiteral) );
}
if (TOY_IS_FLOAT(resultLiteral) && TOY_IS_INTEGER(selfLiteral)) {
- selfLiteral = TOY_TO_FLOAT_LITERAL( TOY_AS_INTEGER(selfLiteral) );
+ selfLiteral = TOY_TO_FLOAT_LITERAL( (float)TOY_AS_INTEGER(selfLiteral) );
}
//compare
@@ -258,11 +258,11 @@ static int nativeMin(Toy_Interpreter* interpreter, Toy_LiteralArray* arguments)
//cooerce if needed
if (TOY_IS_INTEGER(resultLiteral) && TOY_IS_FLOAT(selfLiteral)) {
- resultLiteral = TOY_TO_FLOAT_LITERAL( TOY_AS_INTEGER(resultLiteral) );
+ resultLiteral = TOY_TO_FLOAT_LITERAL( (float)TOY_AS_INTEGER(resultLiteral) );
}
if (TOY_IS_FLOAT(resultLiteral) && TOY_IS_INTEGER(selfLiteral)) {
- selfLiteral = TOY_TO_FLOAT_LITERAL( TOY_AS_INTEGER(selfLiteral) );
+ selfLiteral = TOY_TO_FLOAT_LITERAL( (float)TOY_AS_INTEGER(selfLiteral) );
}
//compare
diff --git a/repl/lib_about.c b/repl/lib_toy_version_info.c
similarity index 96%
rename from repl/lib_about.c
rename to repl/lib_toy_version_info.c
index b9cda17..cf323a9 100644
--- a/repl/lib_about.c
+++ b/repl/lib_toy_version_info.c
@@ -1,23 +1,23 @@
-#include "lib_about.h"
+#include "lib_toy_version_info.h"
#include "toy_memory.h"
-int Toy_hookAbout(Toy_Interpreter* interpreter, Toy_Literal identifier, Toy_Literal alias) {
- //the about keys
+int Toy_hookToyVersionInfo(Toy_Interpreter* interpreter, Toy_Literal identifier, Toy_Literal alias) {
+ //the info keys
Toy_Literal majorKeyLiteral = TOY_TO_STRING_LITERAL(Toy_createRefString("major"));
Toy_Literal minorKeyLiteral = TOY_TO_STRING_LITERAL(Toy_createRefString("minor"));
Toy_Literal patchKeyLiteral = TOY_TO_STRING_LITERAL(Toy_createRefString("patch"));
Toy_Literal buildKeyLiteral = TOY_TO_STRING_LITERAL(Toy_createRefString("build"));
Toy_Literal authorKeyLiteral = TOY_TO_STRING_LITERAL(Toy_createRefString("author"));
- //the about identifiers
+ //the info identifiers
Toy_Literal majorIdentifierLiteral = TOY_TO_IDENTIFIER_LITERAL(Toy_createRefString("major"));
Toy_Literal minorIdentifierLiteral = TOY_TO_IDENTIFIER_LITERAL(Toy_createRefString("minor"));
Toy_Literal patchIdentifierLiteral = TOY_TO_IDENTIFIER_LITERAL(Toy_createRefString("patch"));
Toy_Literal buildIdentifierLiteral = TOY_TO_IDENTIFIER_LITERAL(Toy_createRefString("build"));
Toy_Literal authorIdentifierLiteral = TOY_TO_IDENTIFIER_LITERAL(Toy_createRefString("author"));
- //the about values
+ //the info values
Toy_Literal majorLiteral = TOY_TO_INTEGER_LITERAL(TOY_VERSION_MAJOR);
Toy_Literal minorLiteral = TOY_TO_INTEGER_LITERAL(TOY_VERSION_MINOR);
Toy_Literal patchLiteral = TOY_TO_INTEGER_LITERAL(TOY_VERSION_PATCH);
diff --git a/repl/lib_toy_version_info.h b/repl/lib_toy_version_info.h
new file mode 100644
index 0000000..1dd3fa0
--- /dev/null
+++ b/repl/lib_toy_version_info.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#include "toy_interpreter.h"
+
+int Toy_hookToyVersionInfo(Toy_Interpreter* interpreter, Toy_Literal identifier, Toy_Literal alias);
diff --git a/repl/repl_main.c b/repl/repl_main.c
index 4992dad..2c07562 100644
--- a/repl/repl_main.c
+++ b/repl/repl_main.c
@@ -1,6 +1,6 @@
#include "repl_tools.h"
#include "drive_system.h"
-#include "lib_about.h"
+#include "lib_toy_version_info.h"
#include "lib_standard.h"
#include "lib_random.h"
#include "lib_runner.h"
@@ -26,7 +26,7 @@ void repl(const char* initialInput) {
Toy_initInterpreter(&interpreter);
//inject the libs
- Toy_injectNativeHook(&interpreter, "about", Toy_hookAbout);
+ Toy_injectNativeHook(&interpreter, "toy_version_info", Toy_hookToyVersionInfo);
Toy_injectNativeHook(&interpreter, "standard", Toy_hookStandard);
Toy_injectNativeHook(&interpreter, "random", Toy_hookRandom);
Toy_injectNativeHook(&interpreter, "runner", Toy_hookRunner);
diff --git a/repl/repl_tools.c b/repl/repl_tools.c
index 63090f9..a222c18 100644
--- a/repl/repl_tools.c
+++ b/repl/repl_tools.c
@@ -1,5 +1,5 @@
#include "repl_tools.h"
-#include "lib_about.h"
+#include "lib_toy_version_info.h"
#include "lib_standard.h"
#include "lib_random.h"
#include "lib_runner.h"
@@ -111,7 +111,7 @@ void Toy_runBinary(const unsigned char* tb, size_t size) {
Toy_initInterpreter(&interpreter);
//inject the libs
- Toy_injectNativeHook(&interpreter, "about", Toy_hookAbout);
+ Toy_injectNativeHook(&interpreter, "toy_version_info", Toy_hookToyVersionInfo);
Toy_injectNativeHook(&interpreter, "standard", Toy_hookStandard);
Toy_injectNativeHook(&interpreter, "random", Toy_hookRandom);
Toy_injectNativeHook(&interpreter, "runner", Toy_hookRunner);
@@ -159,7 +159,7 @@ static unsigned char readByte(const unsigned char* tb, int* count) {
static const char* readString(const unsigned char* tb, int* count) {
const unsigned char* ret = tb + *count;
- *count += strlen((char*)ret) + 1; //+1 for null character
+ *count += (int)strlen((char*)ret) + 1; //+1 for null character
return (const char*)ret;
}
diff --git a/repl/repl_tools.h b/repl/repl_tools.h
index d589a20..c8c464c 100644
--- a/repl/repl_tools.h
+++ b/repl/repl_tools.h
@@ -46,7 +46,7 @@ const unsigned char* Toy_compileString(const char* source, size_t* size);
This function takes a bytecode array of `size` size, and executes it. The libraries available to the code are currently:
-* lib_about
+* lib_toy_version_info
* lib_standard
* lib_random
* lib_runner
diff --git a/source/toy_parser.c b/source/toy_parser.c
index 796d338..3bb96a5 100644
--- a/source/toy_parser.c
+++ b/source/toy_parser.c
@@ -750,23 +750,10 @@ static Toy_Opcode decrementInfix(Toy_Parser* parser, Toy_ASTNode** nodeHandle) {
static Toy_Opcode fnCall(Toy_Parser* parser, Toy_ASTNode** nodeHandle) {
//wait - is the previous token a type? this should be casting instead
if (parser->previous.type >= TOY_TOKEN_NULL && parser->previous.type <= TOY_TOKEN_ANY) {
- //casting type
- Toy_ASTNode* lhsNode = NULL;
- castingPrefix(parser, &lhsNode);
- advance(parser);
-
//casting value
- Toy_ASTNode* rhsNode = NULL;
- grouping(parser, &rhsNode);
+ parsePrecedence(parser, nodeHandle, PREC_CALL);
- //emit the cast node
-
- Toy_emitASTNodeBinary(&lhsNode, rhsNode, TOY_OP_TYPE_CAST);
-
- //pass it off to the caller
- *nodeHandle = lhsNode;
-
- return TOY_OP_GROUPING_BEGIN; //dummy value
+ return TOY_OP_TYPE_CAST; //opcode value
}
advance(parser); //skip the left paren
diff --git a/test/scripts/group-casting-bugfix.toy b/test/scripts/group-casting-bugfix.toy
new file mode 100644
index 0000000..221daac
--- /dev/null
+++ b/test/scripts/group-casting-bugfix.toy
@@ -0,0 +1,11 @@
+//test for casting + grouping, see #67
+{
+ assert string(10 % 4) == "2", "basic group casting failed";
+ assert string 4 == "4", "normal casting failed";
+
+ assert typeof string(10 % 4) == string, "group casting type failed";
+}
+
+
+
+print "All good";
\ No newline at end of file
diff --git a/test/scripts/lib/about.toy b/test/scripts/lib/toy_version_info.toy
similarity index 55%
rename from test/scripts/lib/about.toy
rename to test/scripts/lib/toy_version_info.toy
index 51de8c1..87a4c3a 100644
--- a/test/scripts/lib/about.toy
+++ b/test/scripts/lib/toy_version_info.toy
@@ -1,5 +1,5 @@
-import about as about;
-import about;
+import toy_version_info as toy_version_info;
+import toy_version_info;
assert author == "Kayne Ruse, KR Game Studios", "Author failed";
diff --git a/test/test_interpreter.c b/test/test_interpreter.c
index d454a9e..b67de22 100644
--- a/test/test_interpreter.c
+++ b/test/test_interpreter.c
@@ -119,6 +119,7 @@ int main() {
"dottify-bugfix.toy",
"function-within-function-bugfix.toy",
"functions.toy",
+ "group-casting-bugfix.toy",
"increment-postfix-bugfix.toy",
"index-arrays.toy",
"index-assignment-both-bugfix.toy",
diff --git a/test/test_libraries.c b/test/test_libraries.c
index ce3c9d3..58c9e77 100644
--- a/test/test_libraries.c
+++ b/test/test_libraries.c
@@ -14,10 +14,10 @@
#include "../repl/repl_tools.h"
#include "../repl/drive_system.h"
-#include "../repl/lib_about.h"
+#include "../repl/lib_toy_version_info.h"
+#include "../repl/lib_standard.h"
#include "../repl/lib_random.h"
#include "../repl/lib_runner.h"
-#include "../repl/lib_standard.h"
//supress the print output
static void noPrintFn(const char* output) {
@@ -72,7 +72,7 @@ int main() {
//run each file in test/scripts
Payload payloads[] = {
{"interactions.toy", "standard", Toy_hookStandard}, //interactions needs standard
- {"about.toy", "about", Toy_hookAbout},
+ {"toy_version_info.toy", "toy_version_info", Toy_hookToyVersionInfo},
{"standard.toy", "standard", Toy_hookStandard},
{"runner.toy", "runner", Toy_hookRunner},
{"random.toy", "random", Toy_hookRandom},