From 0547b4d02ef7c07ba0ab9cbee0502b427660fd4d Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Tue, 15 Mar 2011 01:39:41 -0700 Subject: [PATCH] Note the member index in struct deref, so we don't have to calculate it again. --- mojoshader.h | 1 + mojoshader_compiler.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/mojoshader.h b/mojoshader.h index c660298a..f761e68e 100644 --- a/mojoshader.h +++ b/mojoshader.h @@ -1288,6 +1288,7 @@ typedef struct MOJOSHADER_astExpressionDerefStruct MOJOSHADER_astExpression *identifier; const char *member; int isswizzle; /* Always 1 or 0. Never set by parseAst()! */ + int member_index; /* Never set by parseAst()! */ } MOJOSHADER_astExpressionDerefStruct; typedef struct MOJOSHADER_astExpressionCallFunction diff --git a/mojoshader_compiler.c b/mojoshader_compiler.c index 677c1678..8d9afd66 100644 --- a/mojoshader_compiler.c +++ b/mojoshader_compiler.c @@ -677,6 +677,7 @@ static MOJOSHADER_astExpression *new_deref_struct_expr(Context *ctx, retval->identifier = identifier; retval->member = member; // cached; don't copy string. retval->isswizzle = 0; // may change during semantic analysis. + retval->member_index = 0; // set during semantic analysis. return (MOJOSHADER_astExpression *) retval; } // new_deref_struct_expr @@ -2659,6 +2660,7 @@ static const MOJOSHADER_astDataType *type_check_ast(Context *ctx, void *_ast) if (strcmp(mbrs[i].identifier, member) == 0) { ast->derefstruct.datatype = mbrs[i].datatype; + ast->derefstruct.member_index = i; break; } // if } // for