mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 14:54:07 +10:00
Added type casting a grouping bugfix, resolved #76
This commit is contained in:
@@ -1,27 +1,4 @@
|
|||||||
var colors = [
|
var s = "42";
|
||||||
"red",
|
var t = "69";
|
||||||
"orange",
|
|
||||||
"yellow",
|
|
||||||
"green",
|
|
||||||
"blue",
|
|
||||||
"violet",
|
|
||||||
"indigo"
|
|
||||||
];
|
|
||||||
|
|
||||||
fn getRainbowColor(index) {
|
print int (s + t) - 1;
|
||||||
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());
|
|
||||||
@@ -739,6 +739,27 @@ static Toy_Opcode decrementInfix(Toy_Parser* parser, Toy_ASTNode** nodeHandle) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Toy_Opcode fnCall(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
|
advance(parser); //skip the left paren
|
||||||
|
|
||||||
//binary() is an infix rule - so only get the RHS of the operator
|
//binary() is an infix rule - so only get the RHS of the operator
|
||||||
|
|||||||
7
test/scripts/casting-parentheses-bugfix.toy
Normal file
7
test/scripts/casting-parentheses-bugfix.toy
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
var s = "42";
|
||||||
|
var t = "69";
|
||||||
|
|
||||||
|
assert int (s + t) - 1 == 4268, "casting parentheses failed";
|
||||||
|
|
||||||
|
|
||||||
|
print "All good";
|
||||||
@@ -108,6 +108,7 @@ int main() {
|
|||||||
//run each file in tests/scripts/
|
//run each file in tests/scripts/
|
||||||
const char* filenames[] = {
|
const char* filenames[] = {
|
||||||
"arithmetic.toy",
|
"arithmetic.toy",
|
||||||
|
"casting-parentheses-bugfix.toy",
|
||||||
"casting.toy",
|
"casting.toy",
|
||||||
"coercions.toy",
|
"coercions.toy",
|
||||||
"comparisons.toy",
|
"comparisons.toy",
|
||||||
|
|||||||
Reference in New Issue
Block a user