Ejemplo n.º 1
0
        private void DispatchMethodBody(MethodBody body)
        {
            foreach (var variable in body.Variables)
            {
                Visit(variable.VariableType, body.Method.FullName);
            }

            for (int i = 0; i < body.Instructions.Count; i++)
            {
                var instruction = body.Instructions[i];
                var field       = instruction.Operand as FieldReference;
                if (field != null)
                {
                    Visit(field, body.Method.FullName);
                    continue;
                }

                var method = instruction.Operand as MethodReference;
                if (method != null && !IsUnityScriptMethod(method))
                {
                    Visit(method, body.Method.FullName);
                    if (_visitor.MethodChanged)
                    {
                        _visitor.RewriteObjectListToParamsCall(body, i);
                    }

                    // Can't callvirt on static methods
                    if (instruction.OpCode == OpCodes.Callvirt)
                    {
                        var targetMethod = instruction.Operand as MethodReference;

                        if (targetMethod != null && !targetMethod.HasThis)
                        {
                            instruction.OpCode = OpCodes.Call;
                        }
                    }

                    continue;
                }

                var type = instruction.Operand as TypeReference;
                if (type != null)
                {
                    Visit(type, body.Method.FullName);
                }
            }
        }