[vkgen] Add support for array element data

While I wound up not needing it in the end, it's now possible to specify
extra data for array element parsing.
This commit is contained in:
Bill Currie 2023-02-10 19:33:10 +09:00
parent 9e050ebf9a
commit 061f90ab83
3 changed files with 19 additions and 2 deletions

View file

@ -10,10 +10,12 @@
string parse_type; string parse_type;
string type; string type;
string parser; string parser;
string data;
} }
+fieldType:(PLItem *)item; +fieldType:(PLItem *)item;
-initWithItem:(PLItem *)item; -initWithItem:(PLItem *)item;
-writeParseData; -writeParseData;
-(string)type;
-(string)exprType; -(string)exprType;
-(string)parseType; -(string)parseType;
+(string)anyType; +(string)anyType;

View file

@ -31,6 +31,7 @@ parseItemType (PLItem *item)
{ {
str_free (type); str_free (type);
str_free (parser); str_free (parser);
str_free (data);
str_free (parse_type); str_free (parse_type);
[super dealloc]; [super dealloc];
} }
@ -52,6 +53,7 @@ parseItemType (PLItem *item)
parse_type = str_hold (parseItemType(typeItem)); parse_type = str_hold (parseItemType(typeItem));
type = str_hold ([[item getObjectForKey:"type"] string]); type = str_hold ([[item getObjectForKey:"type"] string]);
parser = str_hold ([[item getObjectForKey:"parser"] string]); parser = str_hold ([[item getObjectForKey:"parser"] string]);
data = str_hold ([[item getObjectForKey:"data"] string]);
} }
return self; return self;
@ -62,9 +64,19 @@ parseItemType (PLItem *item)
fprintf (output_file, "\t%s,\n", parse_type); fprintf (output_file, "\t%s,\n", parse_type);
fprintf (output_file, "\tsizeof (%s),\n", type); fprintf (output_file, "\tsizeof (%s),\n", type);
fprintf (output_file, "\t%s,\n", parser); fprintf (output_file, "\t%s,\n", parser);
if (data) {
fprintf (output_file, "\t&%s,\n", data);
} else {
fprintf (output_file, "\t0,\n");
}
return self; return self;
} }
-(string) type
{
return type;
}
-(string) exprType -(string) exprType
{ {
return "&" + type + "_type"; return "&" + type + "_type";

View file

@ -115,6 +115,7 @@ typedef struct parse_single_s {
pltype_t type; pltype_t type;
size_t stride; size_t stride;
plparser_t parser; plparser_t parser;
void *data;
size_t value_offset; size_t value_offset;
} parse_single_t; } parse_single_t;
@ -122,6 +123,7 @@ typedef struct parse_array_s {
pltype_t type; pltype_t type;
size_t stride; size_t stride;
plparser_t parser; plparser_t parser;
void *data;
size_t value_offset; size_t value_offset;
size_t size_offset; size_t size_offset;
} parse_array_t; } parse_array_t;
@ -130,6 +132,7 @@ typedef struct parse_fixed_array_s {
pltype_t type; pltype_t type;
size_t stride; size_t stride;
plparser_t parser; plparser_t parser;
void *data;
size_t size; size_t size;
} parse_fixed_array_t; } parse_fixed_array_t;
@ -341,7 +344,7 @@ parse_array (const plfield_t *field, const plitem_t *item,
array->stride, array->stride,
vkparse_alloc, vkparse_alloc,
array->parser, array->parser,
0, array->data,
}; };
plfield_t f = { 0, 0, 0, 0, &element }; plfield_t f = { 0, 0, 0, 0, &element };
@ -376,7 +379,7 @@ parse_fixed_array (const plfield_t *field, const plitem_t *item,
array->stride, array->stride,
vkparse_alloc, vkparse_alloc,
array->parser, array->parser,
0, array->data,
}; };
plfield_t f = { 0, 0, 0, 0, &element }; plfield_t f = { 0, 0, 0, 0, &element };