From 27ffb299088d6f2f413c0a5052f2b15980a0fea0 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Fri, 3 Mar 2017 17:01:01 -0700 Subject: [PATCH] HLSL: Add 'class' keyword as (so far) synonym for 'struct'. --- Test/hlsl.struct.frag | 4 ++-- glslang/Include/revision.h | 4 ++-- hlsl/hlslGrammar.cpp | 5 ++++- hlsl/hlslScanContext.cpp | 3 ++- hlsl/hlslTokens.h | 1 + 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Test/hlsl.struct.frag b/Test/hlsl.struct.frag index e602c9ed..0017b7b7 100644 --- a/Test/hlsl.struct.frag +++ b/Test/hlsl.struct.frag @@ -12,7 +12,7 @@ struct myS { myS s1; -static struct { +static class { float4 i; } s2; @@ -32,7 +32,7 @@ float ff6 : packoffset(c102.y) : register(s3[5]); float4 PixelShaderFunction(float4 input, IN_S s) : COLOR0 { - struct FS { + class FS { bool3 b3; } s3; diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h index e9fc7fe8..e1978232 100644 --- a/glslang/Include/revision.h +++ b/glslang/Include/revision.h @@ -2,5 +2,5 @@ // For the version, it uses the latest git tag followed by the number of commits. // For the date, it uses the current date (when then script is run). -#define GLSLANG_REVISION "Overload400-PrecQual.1871" -#define GLSLANG_DATE "02-Mar-2017" +#define GLSLANG_REVISION "Overload400-PrecQual.1874" +#define GLSLANG_DATE "03-Mar-2017" diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp index 86a32679..a5bccc42 100755 --- a/hlsl/hlslGrammar.cpp +++ b/hlsl/hlslGrammar.cpp @@ -1259,6 +1259,7 @@ bool HlslGrammar::acceptType(TType& type) return acceptStructBufferType(type); break; + case EHTokClass: case EHTokStruct: case EHTokCBuffer: case EHTokTBuffer: @@ -1732,6 +1733,7 @@ bool HlslGrammar::acceptType(TType& type) // // struct_type // : STRUCT +// | CLASS // | CBUFFER // | TBUFFER // @@ -1747,8 +1749,9 @@ bool HlslGrammar::acceptStruct(TType& type) // TBUFFER else if (acceptTokenClass(EHTokTBuffer)) storageQualifier = EvqBuffer; + // CLASS // STRUCT - else if (! acceptTokenClass(EHTokStruct)) + else if (! acceptTokenClass(EHTokClass) && ! acceptTokenClass(EHTokStruct)) return false; // IDENTIFIER diff --git a/hlsl/hlslScanContext.cpp b/hlsl/hlslScanContext.cpp index 907ccd1c..a80ee93f 100755 --- a/hlsl/hlslScanContext.cpp +++ b/hlsl/hlslScanContext.cpp @@ -327,6 +327,7 @@ void HlslScanContext::fillInKeywordMap() (*KeywordMap)["RWStructuredBuffer"] = EHTokRWStructuredBuffer; (*KeywordMap)["StructuredBuffer"] = EHTokStructuredBuffer; + (*KeywordMap)["class"] = EHTokClass; (*KeywordMap)["struct"] = EHTokStruct; (*KeywordMap)["cbuffer"] = EHTokCBuffer; (*KeywordMap)["tbuffer"] = EHTokTBuffer; @@ -354,7 +355,6 @@ void HlslScanContext::fillInKeywordMap() ReservedSet->insert("auto"); ReservedSet->insert("catch"); ReservedSet->insert("char"); - ReservedSet->insert("class"); ReservedSet->insert("const_cast"); ReservedSet->insert("enum"); ReservedSet->insert("explicit"); @@ -740,6 +740,7 @@ EHlslTokenClass HlslScanContext::tokenizeIdentifier() return keyword; // variable, user type, ... + case EHTokClass: case EHTokStruct: case EHTokTypedef: case EHTokCBuffer: diff --git a/hlsl/hlslTokens.h b/hlsl/hlslTokens.h index 824aa8c8..1c8f5283 100755 --- a/hlsl/hlslTokens.h +++ b/hlsl/hlslTokens.h @@ -268,6 +268,7 @@ enum EHlslTokenClass { // variable, user type, ... EHTokIdentifier, EHTokTypeName, + EHTokClass, EHTokStruct, EHTokCBuffer, EHTokTBuffer,