mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 23:04:08 +10:00
Assignment target is now an AST node
This will make assigning to arbitrary targets easier.
This commit is contained in:
@@ -396,18 +396,23 @@ int test_type_emission(Toy_Bucket** bucketHandle) {
|
||||
Toy_Ast* ast = NULL;
|
||||
Toy_Ast* right = NULL;
|
||||
Toy_String* name = Toy_createNameStringLength(bucketHandle, "foobar", 6, TOY_VALUE_INTEGER, false);
|
||||
Toy_private_emitAstValue(bucketHandle, &ast, TOY_VALUE_FROM_STRING(name));
|
||||
Toy_private_emitAstValue(bucketHandle, &right, TOY_VALUE_FROM_INTEGER(69));
|
||||
Toy_private_emitAstVariableAssignment(bucketHandle, &ast, name, TOY_AST_FLAG_ASSIGN, right);
|
||||
Toy_private_emitAstVariableAssignment(bucketHandle, &ast, TOY_AST_FLAG_ASSIGN, right);
|
||||
|
||||
//check if it worked
|
||||
if (
|
||||
ast == NULL ||
|
||||
ast->type != TOY_AST_VAR_ASSIGN ||
|
||||
ast->varAssign.flag != TOY_AST_FLAG_ASSIGN ||
|
||||
ast->varAssign.name == NULL ||
|
||||
ast->varAssign.name->type != TOY_STRING_NAME ||
|
||||
strcmp(ast->varAssign.name->as.name.data, "foobar") != 0 ||
|
||||
ast->varAssign.name->as.name.type != TOY_VALUE_INTEGER ||
|
||||
ast->varAssign.target == NULL ||
|
||||
ast->varAssign.target->type != TOY_AST_VALUE ||
|
||||
TOY_VALUE_IS_STRING(ast->varAssign.target->value.value) != true ||
|
||||
TOY_VALUE_AS_STRING(ast->varAssign.target->value.value)->type != TOY_STRING_NAME ||
|
||||
strcmp(TOY_VALUE_AS_STRING(ast->varAssign.target->value.value)->as.name.data, "foobar") != 0 ||
|
||||
|
||||
TOY_VALUE_AS_STRING(ast->varAssign.target->value.value)->as.name.type != TOY_VALUE_INTEGER ||
|
||||
|
||||
ast->varAssign.expr->type != TOY_AST_VALUE ||
|
||||
TOY_VALUE_AS_INTEGER(ast->varAssign.expr->value.value) != 69)
|
||||
{
|
||||
@@ -420,18 +425,20 @@ int test_type_emission(Toy_Bucket** bucketHandle) {
|
||||
{
|
||||
//build the AST
|
||||
Toy_Ast* ast = NULL;
|
||||
Toy_Ast* right = NULL;
|
||||
Toy_String* name = Toy_createNameStringLength(bucketHandle, "foobar", 6, TOY_VALUE_INTEGER, false);
|
||||
Toy_private_emitAstVariableAccess(bucketHandle, &ast, name);
|
||||
Toy_private_emitAstValue(bucketHandle, &ast, TOY_VALUE_FROM_STRING(name));
|
||||
Toy_private_emitAstVariableAccess(bucketHandle, &ast);
|
||||
|
||||
//check if it worked
|
||||
if (
|
||||
ast == NULL ||
|
||||
ast->type != TOY_AST_VAR_ACCESS ||
|
||||
ast->varAccess.name == NULL ||
|
||||
ast->varAccess.name->type != TOY_STRING_NAME ||
|
||||
strcmp(ast->varAccess.name->as.name.data, "foobar") != 0 ||
|
||||
ast->varAccess.name->as.name.type != TOY_VALUE_INTEGER)
|
||||
ast->varAccess.child == NULL ||
|
||||
ast->varAccess.child->type != TOY_AST_VALUE ||
|
||||
TOY_VALUE_IS_STRING(ast->varAccess.child->value.value) != true ||
|
||||
TOY_VALUE_AS_STRING(ast->varAccess.child->value.value)->type != TOY_STRING_NAME ||
|
||||
strcmp(TOY_VALUE_AS_STRING(ast->varAccess.child->value.value)->as.name.data, "foobar") != 0 ||
|
||||
TOY_VALUE_AS_STRING(ast->varAccess.child->value.value)->as.name.type != TOY_VALUE_INTEGER)
|
||||
{
|
||||
fprintf(stderr, TOY_CC_ERROR "ERROR: failed to emit an access as 'Toy_Ast', state unknown\n" TOY_CC_RESET);
|
||||
return -1;
|
||||
|
||||
@@ -170,9 +170,11 @@ int test_var_assign(Toy_Bucket** bucketHandle) {
|
||||
ast->block.child == NULL || \
|
||||
ast->block.child->type != TOY_AST_VAR_ASSIGN || \
|
||||
ast->block.child->varAssign.flag != ARG_FLAG || \
|
||||
ast->block.child->varAssign.name == NULL || \
|
||||
ast->block.child->varAssign.name->type != TOY_STRING_NAME || \
|
||||
strcmp(ast->block.child->varAssign.name->as.name.data, ARG_NAME) != 0 || \
|
||||
ast->block.child->varAssign.target == NULL || \
|
||||
ast->block.child->varAssign.target->type != TOY_AST_VALUE || \
|
||||
TOY_VALUE_IS_STRING(ast->block.child->varAssign.target->value.value) != true ||\
|
||||
TOY_VALUE_AS_STRING(ast->block.child->varAssign.target->value.value)->type != TOY_STRING_NAME ||\
|
||||
strcmp(TOY_VALUE_AS_STRING(ast->block.child->varAssign.target->value.value)->as.name.data, ARG_NAME) != 0 || \
|
||||
ast->block.child->varAssign.expr == NULL || \
|
||||
ast->block.child->varAssign.expr->type != TOY_AST_VALUE || \
|
||||
TOY_VALUE_IS_INTEGER(ast->block.child->varAssign.expr->value.value) == false || \
|
||||
@@ -512,8 +514,11 @@ int test_aggregate(Toy_Bucket** bucketHandle) {
|
||||
|
||||
ast->block.child->aggregate.left == NULL ||
|
||||
ast->block.child->aggregate.left->type != TOY_AST_VAR_ACCESS ||
|
||||
ast->block.child->aggregate.left->varAccess.name->type != TOY_STRING_NAME ||
|
||||
strcmp(ast->block.child->aggregate.left->varAccess.name->as.name.data, "name") != 0 ||
|
||||
ast->block.child->aggregate.left->varAccess.child == NULL ||
|
||||
ast->block.child->aggregate.left->varAccess.child->type != TOY_AST_VALUE ||
|
||||
TOY_VALUE_IS_STRING(ast->block.child->aggregate.left->varAccess.child->value.value) != true ||
|
||||
TOY_VALUE_AS_STRING(ast->block.child->aggregate.left->varAccess.child->value.value)->type != TOY_STRING_NAME ||
|
||||
strcmp(TOY_VALUE_AS_STRING(ast->block.child->aggregate.left->varAccess.child->value.value)->as.name.data, "name") != 0 ||
|
||||
|
||||
ast->block.child->aggregate.right->type != TOY_AST_VALUE ||
|
||||
TOY_VALUE_IS_INTEGER(ast->block.child->aggregate.right->value.value) != true ||
|
||||
@@ -542,8 +547,13 @@ int test_aggregate(Toy_Bucket** bucketHandle) {
|
||||
|
||||
ast->block.child->aggregate.left == NULL ||
|
||||
ast->block.child->aggregate.left->type != TOY_AST_VAR_ACCESS ||
|
||||
ast->block.child->aggregate.left->varAccess.name->type != TOY_STRING_NAME ||
|
||||
strcmp(ast->block.child->aggregate.left->varAccess.name->as.name.data, "name") != 0 ||
|
||||
|
||||
ast->block.child->aggregate.left->varAccess.child == NULL ||
|
||||
ast->block.child->aggregate.left->varAccess.child->type != TOY_AST_VALUE ||
|
||||
TOY_VALUE_IS_STRING(ast->block.child->aggregate.left->varAccess.child->value.value) != true ||
|
||||
TOY_VALUE_AS_STRING(ast->block.child->aggregate.left->varAccess.child->value.value)->type != TOY_STRING_NAME ||
|
||||
|
||||
strcmp(TOY_VALUE_AS_STRING(ast->block.child->aggregate.left->varAccess.child->value.value)->as.name.data, "name") != 0 ||
|
||||
|
||||
ast->block.child->aggregate.right->type != TOY_AST_AGGREGATE ||
|
||||
ast->block.child->aggregate.right->aggregate.flag != TOY_AST_FLAG_COLLECTION ||
|
||||
|
||||
Reference in New Issue
Block a user