[PATCH 2/5] d3dcompiler: Parse struct dereferences.
Matteo Bruni
mbruni at codeweavers.com
Fri Sep 28 10:22:39 CDT 2012
---
dlls/d3dcompiler_43/hlsl.y | 31 ++++++++++++++++++++++++++++++-
1 files changed, 30 insertions(+), 1 deletions(-)
diff --git a/dlls/d3dcompiler_43/hlsl.y b/dlls/d3dcompiler_43/hlsl.y
index d302fa1..e795962 100644
--- a/dlls/d3dcompiler_43/hlsl.y
+++ b/dlls/d3dcompiler_43/hlsl.y
@@ -1795,7 +1795,36 @@ postfix_expr: primary_expr
struct source_location loc;
set_location(&loc, &@2);
- if ($1->data_type->type <= HLSL_CLASS_LAST_NUMERIC)
+ if ($1->data_type->type == HLSL_CLASS_STRUCT)
+ {
+ struct hlsl_type *type = $1->data_type;
+ struct hlsl_struct_field *field;
+
+ $$ = NULL;
+ LIST_FOR_EACH_ENTRY(field, type->e.elements, struct hlsl_struct_field, entry)
+ {
+ if (!strcmp($3, field->name))
+ {
+ struct hlsl_ir_deref *deref = new_record_deref($1, field);
+
+ if (!deref)
+ {
+ ERR("Out of memory\n");
+ return -1;
+ }
+ deref->node.loc = loc;
+ $$ = &deref->node;
+ break;
+ }
+ }
+ if (!$$)
+ {
+ hlsl_report_message(loc.file, loc.line, loc.col, HLSL_LEVEL_ERROR,
+ "invalid subscript %s", debugstr_a($3));
+ return 1;
+ }
+ }
+ else if ($1->data_type->type <= HLSL_CLASS_LAST_NUMERIC)
{
struct hlsl_ir_swizzle *swizzle;
--
1.7.8.6
More information about the wine-patches
mailing list