[FEAT] Arrays allowed on structs
This commit is contained in:
13
parser.cpp
13
parser.cpp
@@ -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();
|
||||||
|
|||||||
4
test.vb
4
test.vb
@@ -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]
|
||||||
|
|||||||
Reference in New Issue
Block a user