[FEAT] Arrays allowed on structs

This commit is contained in:
2021-05-04 16:35:47 +02:00
parent 7297215aeb
commit 2ff14cd2f1
2 changed files with 13 additions and 4 deletions

View File

@@ -480,17 +480,26 @@ static void parse_struct() {
const int struct_num = types_add(struct_name); const int struct_num = types_add(struct_name);
tkn_next(); tkn_next();
while (tkn_get_token() != TOKEN_END) { while (tkn_get_token() != TOKEN_END) {
int member_length = 1;
EXPECT(TOKEN_IDENTIFIER, "Expected identifier"); EXPECT(TOKEN_IDENTIFIER, "Expected identifier");
char member_name[40]; char member_name[40];
strcpy(member_name, tkn_get_string()); strcpy(member_name, tkn_get_string());
tkn_next(); EXPECT(TOKEN_AS, "Expected 'as'"); tkn_next(); EXPECT(TOKEN_AS, "Expected 'as'");
// TODO [RZC 04/05/2021] Implement support for arrays // TODO [RZC 04/05/2021] Implement support for arrays
tkn_next(); EXPECT(TOKEN_IDENTIFIER, "Expected type identifier"); tkn_next();
if (tkn_get_token() == TOKEN_ARRAY) {
tkn_next(); EXPECT(TOKEN_OF, "Expected 'of'");
tkn_next(); EXPECT(TOKEN_NUMBER, "Expected number");
member_length = (int)tkn_get_value();
if (tkn_get_value() > member_length) HALT("Expected integer value");
tkn_next();
}
EXPECT(TOKEN_IDENTIFIER, "Expected type identifier");
char type_name[40]; char type_name[40];
strcpy(type_name, tkn_get_string()); strcpy(type_name, tkn_get_string());
const int type_num = types_exist(type_name); const int type_num = types_exist(type_name);
if (type_num == -1) HALT("Unknown type"); if (type_num == -1) HALT("Unknown type");
types_add_member(struct_num, member_name, type_num, 1); types_add_member(struct_num, member_name, type_num, member_length);
tkn_next(); tkn_next();
} }
tkn_next(); tkn_next();

View File

@@ -1,7 +1,7 @@
' Esto es un comentario ' Esto es un comentario
struct point struct point
x as number x as number
y as number y as array of 5 number
end end
struct triangle struct triangle
@@ -11,4 +11,4 @@ struct triangle
end end
var peiv as array of 2 triangle var peiv as array of 2 triangle
const perico as number = 4-peiv[1].a.x const perico as number = 4-peiv[1].a.x * peiv[0].c.y[2]