@@ -226,6 +226,15 @@ FixupList(AST *list)
226
226
return origlist;
227
227
}
228
228
229
+ // possibly create an array type
230
+ AST *
231
+ MaybeArrayType (AST *basetype, AST *size)
232
+ {
233
+ if (!size) return basetype;
234
+
235
+ return MakeArrayType (basetype, size);
236
+ }
237
+
229
238
// declare a Spin structure
230
239
static void
231
240
SpinDeclareStruct (AST *ident, AST *defs)
@@ -1075,26 +1084,33 @@ structlist:
1075
1084
{ $$ = AddToList($1 , CommentedListHolder($4 )); }
1076
1085
;
1077
1086
1087
+ optarray :
1088
+ ' [' expr ' ]'
1089
+ { $$ = $2 ; }
1090
+ | /* nothing */
1091
+ { $$ = NULL ; }
1092
+ ;
1093
+
1078
1094
structitem :
1079
- SP_IDENTIFIER
1080
- { $$ = NewAST(AST_DECLARE_VAR, NULL , $1 ); }
1081
- | SP_BYTE SP_IDENTIFIER
1095
+ SP_IDENTIFIER optarray
1096
+ { $$ = NewAST(AST_DECLARE_VAR, MaybeArrayType( NULL , $2 ) , $1 ); }
1097
+ | SP_BYTE SP_IDENTIFIER optarray
1082
1098
{
1083
- $$ = NewAST(AST_DECLARE_VAR, ast_type_byte, $2 );
1099
+ $$ = NewAST(AST_DECLARE_VAR, MaybeArrayType( ast_type_byte, $3 ) , $2 );
1084
1100
}
1085
- | SP_WORD SP_IDENTIFIER
1101
+ | SP_WORD SP_IDENTIFIER optarray
1086
1102
{
1087
- $$ = NewAST(AST_DECLARE_VAR, ast_type_word, $2 );
1103
+ $$ = NewAST(AST_DECLARE_VAR, MaybeArrayType( ast_type_word, $3 ) , $2 );
1088
1104
}
1089
- | SP_LONG SP_IDENTIFIER
1105
+ | SP_LONG SP_IDENTIFIER optarray
1090
1106
{
1091
- $$ = NewAST(AST_DECLARE_VAR, NULL , $2 );
1107
+ $$ = NewAST(AST_DECLARE_VAR, MaybeArrayType( NULL , $3 ) , $2 );
1092
1108
}
1093
- | SP_TYPENAME SP_IDENTIFIER
1109
+ | SP_TYPENAME SP_IDENTIFIER optarray
1094
1110
{
1095
1111
AST *name = $2 ;
1096
1112
AST *typname = $1 ;
1097
- $$ = NewAST(AST_DECLARE_VAR, typname, name);
1113
+ $$ = NewAST(AST_DECLARE_VAR, MaybeArrayType( typname, $3 ) , name);
1098
1114
}
1099
1115
;
1100
1116
0 commit comments