public void HandleGenericAccess(List <System.Type> genericTypeArgs)
        {
            if (captureFunc == InternalFunc.TypeIDInstance)
            {
                captureFunc = InternalFunc.TypeIDGeneric;
            }
            else if (captureFunc == InternalFunc.TypeNameInstance)
            {
                captureFunc = InternalFunc.TypeNameGeneric;
            }
            else
            {
                throw new System.ArgumentException($"Cannot call generic internal function {captureFunc}");
            }

            genericType = genericTypeArgs.First();
        }
        public bool ResolveAccessToken(string accessToken)
        {
            if (captureScope.captureArchetype == ExpressionCaptureArchetype.Type)
            {
                return(false);

#if false
                if (captureScope.captureType != typeof(UdonSharpUtility))
                {
                    return(false);
                }

                switch (accessToken)
                {
                case nameof(UdonSharpUtility.GetCompilerMajorVersion):
                    captureFunc = InternalFunc.MajorVersion;
                    break;

                case nameof(UdonSharpUtility.GetCompilerMinorVersion):
                    captureFunc = InternalFunc.MinorVersion;
                    break;

                case nameof(UdonSharpUtility.GetCompilerPatchVersion):
                    captureFunc = InternalFunc.PatchVersion;
                    break;

                case nameof(UdonSharpUtility.GetCompilerBuild):
                    captureFunc = InternalFunc.Build;
                    break;

                case nameof(UdonSharpUtility.GetCompilerVersionString):
                    captureFunc = InternalFunc.VersionStr;
                    break;

                case nameof(UdonSharpUtility.GetTypeID):
                    captureFunc = InternalFunc.TypeIDGeneric;
                    break;

                case nameof(UdonSharpUtility.GetUdonScriptVersion):
                    captureFunc = InternalFunc.ScriptVersion;
                    break;

                case nameof(UdonSharpUtility.GetLastCompileDate):
                    captureFunc = InternalFunc.ScriptCompileDate;
                    break;

                case nameof(UdonSharpUtility.GetCompilerName):
                    captureFunc = InternalFunc.ScriptCompilerName;
                    break;

                default:
                    captureFunc = InternalFunc.None;
                    return(false);
                }

                return(captureFunc != InternalFunc.None);
#endif
            }
            else if (captureScope.captureArchetype == ExpressionCaptureArchetype.Unknown ||
                     captureScope.captureArchetype == ExpressionCaptureArchetype.This ||
                     captureScope.captureArchetype == ExpressionCaptureArchetype.LocalSymbol ||
                     captureScope.captureArchetype == ExpressionCaptureArchetype.Property ||
                     captureScope.captureArchetype == ExpressionCaptureArchetype.Field ||
                     captureScope.captureArchetype == ExpressionCaptureArchetype.ExternUserField ||
                     captureScope.captureArchetype == ExpressionCaptureArchetype.ArrayIndexer)
            {
                captureFunc = InternalFunc.None;

                switch (accessToken)
                {
                case nameof(UdonSharpBehaviour.GetUdonTypeID):
                    captureFunc = InternalFunc.TypeIDInstance;
                    break;

                case nameof(UdonSharpBehaviour.GetUdonTypeName):
                    captureFunc = InternalFunc.TypeNameInstance;
                    break;
                }

                if (captureFunc == InternalFunc.None)
                {
                    return(false);
                }

                return(true);
            }

            return(false);
        }