HLSL: use prefix for builtin functions names to avoid namespace collisions

It would have been possible for globally scoped user functions to collide
with builtin method names.  This adds a prefix to avoid polluting the
namespace.

Ideally this would be an invalid character to use in user identifiers, but
as that requires changing the scanner, for the moment it's an unlikely yet
valid prefix.
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
index 3891734..d82a182 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -2785,11 +2785,13 @@
 {
     // name
     TString* functionName = nullptr;
-    if ((baseObject == nullptr && scope == nullptr) ||
-        parseContext.isBuiltInMethod(callToken.loc, baseObject, *callToken.string)) {
+    if ((baseObject == nullptr && scope == nullptr)) {
+        functionName = callToken.string;
+    } else if (parseContext.isBuiltInMethod(callToken.loc, baseObject, *callToken.string)) {
         // Built-in methods are not in the symbol table as methods, but as global functions
         // taking an explicit 'this' as the first argument.
-        functionName = callToken.string;
+        functionName = NewPoolTString(BUILTIN_PREFIX);
+        functionName->append(*callToken.string);
     } else {
         functionName = NewPoolTString("");
         if (baseObject != nullptr)