HLSL: non-static member functions: track and find active anonymous 'this' scopes and members.

Thanks to @steve-lunarg for his input and discussions on handling member functions.
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
index 0e54be5..d209a68 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -1842,12 +1842,13 @@
     for (int b = 0; b < (int)functionDeclarators.size(); ++b) {
         // update signature
         if (functionDeclarators[b].function->hasImplicitThis())
-            functionDeclarators[b].function->addThisParameter(type);
+            functionDeclarators[b].function->addThisParameter(type, intermediate.implicitThisName);
     }
 
     // All member functions get parsed inside the class/struct namespace and with the
     // class/struct members in a symbol-table level.
     parseContext.pushNamespace(structName);
+    parseContext.pushThisScope(type);
     bool deferredSuccess = true;
     for (int b = 0; b < (int)functionDeclarators.size() && deferredSuccess; ++b) {
         // parse body
@@ -1856,6 +1857,7 @@
             deferredSuccess = false;
         popTokenStream();
     }
+    parseContext.popThisScope();
     parseContext.popNamespace();
 
     return deferredSuccess;
@@ -2075,6 +2077,8 @@
     declarator.function = new TFunction(functionName, type);
     if (type.getQualifier().storage == EvqTemporary)
         declarator.function->setImplicitThis();
+    else
+        declarator.function->setIllegalImplicitThis();
 
     // function_parameters
     if (acceptFunctionParameters(*declarator.function)) {