コード例 #1
0
        protected override void ProcessMethodInvocation(MethodInvocationExpression invoke, MethodDefinition method)
        {
            // Handle the case where a parameter can be out
            // If this is the case, we need to check that
            for (int i = 0; i < invoke.Arguments.Count; i++)
            {
                var arg       = invoke.Arguments[i];
                var variable  = this.GetUniform(arg);
                var parameter = method.Parameters[i];
                if (variable != null && parameter.Qualifiers.Contains(ParameterQualifier.Out))
                {
                    bool isUniformWasAlreadyUsedAsRead = false;
                    for (int j = 0; j < countReadBeforeInvoke; j++)
                    {
                        if (ReferenceEquals(uniformReadList[i], variable))
                        {
                            isUniformWasAlreadyUsedAsRead = true;
                            break;
                        }
                    }

                    // If this is a out parameter, and the variable was not already used as a read, then
                    // we can remove it from the uniform read list
                    if (!isUniformWasAlreadyUsedAsRead)
                    {
                        uniformReadList.Remove(variable);
                        if (!UniformUsedWriteFirstList.Contains(variable))
                        {
                            UniformUsedWriteFirstList.Add(variable);
                        }
                    }
                }
            }

            this.VisitDynamic(method);
        }
コード例 #2
0
 public bool IsVariableAsGlobalTemporary(Variable variable)
 {
     return(UniformUsedWriteFirstList.Contains(variable));
 }