diff --git a/parser.cpp b/parser.cpp index 138e88f..0f25f7f 100644 --- a/parser.cpp +++ b/parser.cpp @@ -480,17 +480,26 @@ static void parse_struct() { const int struct_num = types_add(struct_name); tkn_next(); while (tkn_get_token() != TOKEN_END) { + int member_length = 1; EXPECT(TOKEN_IDENTIFIER, "Expected identifier"); char member_name[40]; strcpy(member_name, tkn_get_string()); tkn_next(); EXPECT(TOKEN_AS, "Expected 'as'"); // 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]; strcpy(type_name, tkn_get_string()); const int type_num = types_exist(type_name); 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(); diff --git a/test.vb b/test.vb index 7e838cd..9c98dd5 100644 --- a/test.vb +++ b/test.vb @@ -1,7 +1,7 @@ ' Esto es un comentario struct point x as number - y as number + y as array of 5 number end struct triangle @@ -11,4 +11,4 @@ struct triangle end 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]