Example #1
0
            // TODO: if it's an indexer then we want to override get_Item/set_Item methods
            // which map to [] and []=

            internal void AddBaseMethods(Type finishedType, SpecialNames specialNames)
            {
                // "Adds" base methods to super type - this makes super(...).xyz to work - otherwise
                // we'd return a function that did a virtual call resulting in a stack overflow.
                OverriddenMembers overrides = OverriddenMembers.GetForType(finishedType);

                foreach (MethodInfo mi in finishedType.GetMethods())
                {
                    if (!ShouldOverrideVirtual(mi))
                    {
                        continue;
                    }

                    string methodName = mi.Name;
                    if (methodName.StartsWith(BaseMethodPrefix) || methodName.StartsWith(FieldGetterPrefix) || methodName.StartsWith(FieldSetterPrefix))
                    {
                        foreach (string newName in specialNames.GetBaseName(mi))
                        {
                            if (mi.IsSpecialName && (newName.StartsWith("get_") || newName.StartsWith("set_")))
                            {
                                StoreOverriddenProperty(overrides, mi, newName);
                            }
                            else if (mi.IsSpecialName && (newName.StartsWith(FieldGetterPrefix) || newName.StartsWith(FieldSetterPrefix)))
                            {
                                StoreOverriddenField(overrides, mi, newName);
                            }
                            else
                            {
                                StoreOverriddenMethod(overrides, mi, newName);
                            }
                        }
                    }
                }
            }
Example #2
0
            // TODO: if it's an indexer then we want to override get_Item/set_Item methods
            // which map to [] and []=

            internal void AddBaseMethods(Type finishedType, SpecialNames specialNames) {
                // "Adds" base methods to super type - this makes super(...).xyz to work - otherwise 
                // we'd return a function that did a virtual call resulting in a stack overflow.
                OverriddenMembers overrides = OverriddenMembers.GetForType(finishedType);

                foreach (MethodInfo mi in finishedType.GetMethods()) {
                    if (!ShouldOverrideVirtual(mi)) continue;

                    string methodName = mi.Name;
                    if (methodName.StartsWith(BaseMethodPrefix) || methodName.StartsWith(FieldGetterPrefix) || methodName.StartsWith(FieldSetterPrefix)) {
                        foreach (string newName in specialNames.GetBaseName(mi)) {
                            if (mi.IsSpecialName && (newName.StartsWith("get_") || newName.StartsWith("set_"))) {
                                StoreOverriddenProperty(overrides, mi, newName);
                            } else if (mi.IsSpecialName && (newName.StartsWith(FieldGetterPrefix) || newName.StartsWith(FieldSetterPrefix))) {
                                StoreOverriddenField(overrides, mi, newName);
                            } else {
                                StoreOverriddenMethod(overrides, mi, newName);
                            }
                        }
                    }
                }
            }