diff options
| author | gingerBill <bill@gingerbill.org> | 2021-06-05 17:22:39 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-06-05 17:22:39 +0100 |
| commit | 599d18f26f25ca29e704190f25adcaa0bb9ed4f5 (patch) | |
| tree | 11a65c0a536f0b3dc299b0043645f5b334a2ff7f /src/parser.hpp | |
| parent | 61084d832d893eac2f22e79797cfc5dd55570973 (diff) | |
Experimental support for inline swizzling for array types of len <= 4 e.g. `v.xyz`, `v.argb`, `v.xxx`
Diffstat (limited to 'src/parser.hpp')
| -rw-r--r-- | src/parser.hpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/parser.hpp b/src/parser.hpp index 89f714aaa..1d353b04c 100644 --- a/src/parser.hpp +++ b/src/parser.hpp @@ -22,6 +22,8 @@ enum AddressingMode { Addressing_OptionalOk = 10, // rhs: acts like a value with an optional boolean part (for existence check) Addressing_SoaVariable = 11, // Struct-Of-Arrays indexed variable + Addressing_SwizzleValue = 12, // Swizzle indexed value + Addressing_SwizzleVariable = 13, // Swizzle indexed variable }; struct TypeAndValue { @@ -320,7 +322,12 @@ AST_KIND(_ExprBegin, "", bool) \ AST_KIND(UnaryExpr, "unary expression", struct { Token op; Ast *expr; }) \ AST_KIND(BinaryExpr, "binary expression", struct { Token op; Ast *left, *right; } ) \ AST_KIND(ParenExpr, "parentheses expression", struct { Ast *expr; Token open, close; }) \ - AST_KIND(SelectorExpr, "selector expression", struct { Token token; Ast *expr, *selector; }) \ + AST_KIND(SelectorExpr, "selector expression", struct { \ + Token token; \ + Ast *expr, *selector; \ + u8 swizzle_count; /*maximum of 4 components, if set, count >= 2*/ \ + u8 swizzle_indices; /*2 bits per component*/ \ + }) \ AST_KIND(ImplicitSelectorExpr, "implicit selector expression", struct { Token token; Ast *selector; }) \ AST_KIND(SelectorCallExpr, "selector call expression", struct { Token token; Ast *expr, *call; bool modified_call; }) \ AST_KIND(IndexExpr, "index expression", struct { Ast *expr, *index; Token open, close; }) \ |