Added type casting a grouping bugfix, resolved #76

This commit is contained in:
2023-03-17 20:57:47 +11:00
parent 2edfbbe3ef
commit 1095e1a885
4 changed files with 32 additions and 26 deletions

View File

@@ -1,27 +1,4 @@
var colors = [
"red",
"orange",
"yellow",
"green",
"blue",
"violet",
"indigo"
];
var s = "42";
var t = "69";
fn getRainbowColor(index) {
return colors[index];
}
import standard;
import random;
var rng: opaque = createRandomGenerator(hash(clock()));
print getRainbowColor(rng.generateRandomNumber() % colors.length());
print getRainbowColor(rng.generateRandomNumber() % colors.length());
print getRainbowColor(rng.generateRandomNumber() % colors.length());
print getRainbowColor(rng.generateRandomNumber() % colors.length());
print getRainbowColor(rng.generateRandomNumber() % colors.length());
print int (s + t) - 1;

View File

@@ -739,6 +739,27 @@ 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);
//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
}
advance(parser); //skip the left paren
//binary() is an infix rule - so only get the RHS of the operator

View File

@@ -0,0 +1,7 @@
var s = "42";
var t = "69";
assert int (s + t) - 1 == 4268, "casting parentheses failed";
print "All good";

View File

@@ -108,6 +108,7 @@ int main() {
//run each file in tests/scripts/
const char* filenames[] = {
"arithmetic.toy",
"casting-parentheses-bugfix.toy",
"casting.toy",
"coercions.toy",
"comparisons.toy",