[Mono-dev] Is there any reason to not add instead a flag?
"Andrés G. Aragoneses"
knocte at gmail.com
Wed Aug 11 19:59:36 EDT 2010
Hey Miguel, sorry for the small delay to reply:
El 10/08/10 21:41, Miguel de Icaza escribió:
> In your recent commit, you added a new command to mcs/tools/corcompare,
> the mono-abi-info tool. I do not know what this tool does, and I do
> not know why we could not just have used mono-api-info with a new flag
> --abi instead of installing another executable.
I thought about this, but it would be a bit weird to use a tool called
"mono-api-info" if you don't want the API but the ABI. This is why I
thought it would be more intuitive this way.
> It goes against the "If it is not documented, it does not exist" rule.
Then mono-api-info doesn't exist either :) (there's no man page for it)
> So can we:
>
> (a) get this merged into mono-api-info
I'm thinking I can get it to be the same executable, but can it be a
different script called "mono-abi-info" which internally calls
mono-api-info.exe passing the flag?
> (b) document this on the wiki or the relevant man pages?
If there's no man page for mono-api-info, I prefer to do it in a wiki
page, ok? (Don't know man format enough to not copy-paste the structure ;) )
I'll work on it tomorrow. Thanks for the feedback.
Andres
>
> miguel
>
>> Branch: refs/heads/master
>> Home: http://github.com/mono/mono
>>
>> Commit: c508a786c106ceff274b9b985919368b6b404342
>> Author: Andrés G. Aragoneses <knocte at gmail.com>
>> Date: 08/10/2010 14:36:27
>> URL: http://github.com/mono/mono/commit/c508a786c106ceff274b9b985919368b6b404342
>>
>> Added new ABI mode to mono-api-info tool, wrapped in a mono-abi-info script.
>>
>> 2010-08-05 Andrés G. Aragoneses <andres at lindenlab.com>
>>
>> * mcs/tools/corcompare/mono-api-info.cs: Implemented new mode to show ABI.
>> * mcs/tools/corcompare/Makefile: added mono-abi-info autofoo.
>> * scripts/.gitignore: added mono-abi-info.
>> * scripts/Makefile.am: added mono-abi-info autofoo.
>>
>> Changed paths:
>> M ChangeLog
>> M mcs/tools/corcompare/ChangeLog
>> M mcs/tools/corcompare/Makefile
>> M mcs/tools/corcompare/mono-api-info.cs
>> M scripts/.gitignore
>> M scripts/Makefile.am
>>
>> Modified: ChangeLog
>> ===================================================================
>> --- a/ChangeLog
>> +++ b/ChangeLog
>> @@ -1,3 +1,8 @@
>> +2010-08-05 Andr??s G. Aragoneses <andres at lindenlab.com>
>> +
>> + * scripts/.gitignore: added mono-abi-info.
>> + * scripts/Makefile.am: added mono-abi-info autofoo.
>> +
>> 2010-07-16 Zoltan Varga <vargaz at gmail.com>
>>
>> * configure.in: Remove the 'LLVM backend is experimental' warning.
>> Modified: mcs/tools/corcompare/ChangeLog
>> ===================================================================
>> --- a/mcs/tools/corcompare/ChangeLog
>> +++ b/mcs/tools/corcompare/ChangeLog
>> @@ -1,3 +1,8 @@
>> +2010-08-05 Andr??s G. Aragoneses <andres at lindenlab.com>
>> +
>> + * mono-api-info.cs: Implemented new mode to show ABI.
>> + * Makefile: added mono-abi-info autofoo.
>> +
>> 2010-04-16 C.J. Adams-Collier <cjac at colliertech.org>
>>
>> * mono-api-diff.cs: revived from the mono-2-2 branch and applied
>> Modified: mcs/tools/corcompare/Makefile
>> ===================================================================
>> --- a/mcs/tools/corcompare/Makefile
>> +++ b/mcs/tools/corcompare/Makefile
>> @@ -2,7 +2,7 @@ thisdir = tools/corcompare
>> SUBDIRS =
>> include ../../build/rules.make
>>
>> -ALL_PROGRAMS = mono-api-info.exe
>> +ALL_PROGRAMS = mono-api-info.exe mono-abi-info.exe
>>
>> CECIL = ../../class/lib/net_2_0/Mono.Cecil.dll
>>
>> @@ -43,3 +43,6 @@ dist-local: dist-default
>>
>> mono-api-info.exe: $(APIINFO_SOURCES)
>> $(CSCOMPILE) -r:$(CECIL) -out:$@ $^
>> +
>> +mono-abi-info.exe: $(APIINFO_SOURCES)
>> + $(CSCOMPILE) -r:$(CECIL) -d:ABI -out:$@ $^
>> Modified: mcs/tools/corcompare/mono-api-info.cs
>> ===================================================================
>> --- a/mcs/tools/corcompare/mono-api-info.cs
>> +++ b/mcs/tools/corcompare/mono-api-info.cs
>> @@ -29,6 +29,9 @@ namespace CorCompare
>> if (args.Length == 0)
>> return 1;
>>
>> + AbiMode = false;
>> + SetAbiMode ();
>> +
>> AssemblyCollection acoll = new AssemblyCollection ();
>>
>> foreach (string fullName in args) {
>> @@ -45,6 +48,14 @@ namespace CorCompare
>> doc.WriteTo (writer);
>> return 0;
>> }
>> +
>> + [System.Diagnostics.Conditional ("ABI")]
>> + private static void SetAbiMode ()
>> + {
>> + AbiMode = true;
>> + }
>> +
>> + internal static bool AbiMode { get; private set; }
>> }
>>
>> public class Utils {
>> @@ -211,7 +222,7 @@ namespace CorCompare
>> if (string.IsNullOrEmpty (t.Namespace))
>> continue;
>>
>> - if ((t.Attributes & TypeAttributes.VisibilityMask) != TypeAttributes.Public)
>> + if (!Driver.AbiMode && ((t.Attributes & TypeAttributes.VisibilityMask) != TypeAttributes.Public))
>> continue;
>>
>> if (t.DeclaringType != null)
>> @@ -409,28 +420,31 @@ namespace CorCompare
>> AddAttribute (nclass, "enumtype", Utils.CleanupTypeName (value_type.FieldType));
>> }
>>
>> - MethodDefinition [] ctors = GetConstructors (type);
>> - if (ctors.Length > 0) {
>> - Array.Sort (ctors, MemberReferenceComparer.Default);
>> - members.Add (new ConstructorData (document, nclass, ctors));
>> - }
>> + if (!Driver.AbiMode) {
>>
>> - PropertyDefinition[] properties = GetProperties (type);
>> - if (properties.Length > 0) {
>> - Array.Sort (properties, MemberReferenceComparer.Default);
>> - members.Add (new PropertyData (document, nclass, properties));
>> - }
>> + MethodDefinition [] ctors = GetConstructors (type);
>> + if (ctors.Length > 0) {
>> + Array.Sort (ctors, MemberReferenceComparer.Default);
>> + members.Add (new ConstructorData (document, nclass, ctors));
>> + }
>>
>> - EventDefinition [] events = GetEvents (type);
>> - if (events.Length > 0) {
>> - Array.Sort (events, MemberReferenceComparer.Default);
>> - members.Add (new EventData (document, nclass, events));
>> - }
>> + PropertyDefinition[] properties = GetProperties (type);
>> + if (properties.Length > 0) {
>> + Array.Sort (properties, MemberReferenceComparer.Default);
>> + members.Add (new PropertyData (document, nclass, properties));
>> + }
>> +
>> + EventDefinition [] events = GetEvents (type);
>> + if (events.Length > 0) {
>> + Array.Sort (events, MemberReferenceComparer.Default);
>> + members.Add (new EventData (document, nclass, events));
>> + }
>>
>> - MethodDefinition [] methods = GetMethods (type);
>> - if (methods.Length > 0) {
>> - Array.Sort (methods, MemberReferenceComparer.Default);
>> - members.Add (new MethodData (document, nclass, methods));
>> + MethodDefinition [] methods = GetMethods (type);
>> + if (methods.Length > 0) {
>> + Array.Sort (methods, MemberReferenceComparer.Default);
>> + members.Add (new MethodData (document, nclass, methods));
>> + }
>> }
>>
>> foreach (MemberData md in members)
>> @@ -542,12 +556,19 @@ namespace CorCompare
>> if (field.IsSpecialName)
>> continue;
>>
>> + if (Driver.AbiMode && field.IsStatic)
>> + continue;
>> +
>> // we're only interested in public or protected members
>> FieldAttributes maskedVisibility = (field.Attributes & FieldAttributes.FieldAccessMask);
>> - if (maskedVisibility == FieldAttributes.Public
>> - || maskedVisibility == FieldAttributes.Family
>> - || maskedVisibility == FieldAttributes.FamORAssem) {
>> + if (Driver.AbiMode && !field.IsNotSerialized) {
>> list.Add (field);
>> + } else {
>> + if (maskedVisibility == FieldAttributes.Public
>> + || maskedVisibility == FieldAttributes.Family
>> + || maskedVisibility == FieldAttributes.FamORAssem) {
>> + list.Add (field);
>> + }
>> }
>> }
>>
>> Modified: scripts/.gitignore
>> ===================================================================
>> --- a/scripts/.gitignore
>> +++ b/scripts/.gitignore
>> @@ -42,6 +42,7 @@
>> /mkbundle2
>> /mod
>> /mono-api-diff
>> +/mono-abi-info
>> /mono-api-info
>> /mono-api-info1
>> /mono-api-info2
>> Modified: scripts/Makefile.am
>> ===================================================================
>> --- a/scripts/Makefile.am
>> +++ b/scripts/Makefile.am
>> @@ -82,6 +82,7 @@ scripts_4_0 = \
>> mconfig$(SCRIPT_SUFFIX) \
>> mod$(SCRIPT_SUFFIX) \
>> monolinker$(SCRIPT_SUFFIX) \
>> + mono-abi-info$(SCRIPT_SUFFIX) \
>> mono-api-info$(SCRIPT_SUFFIX) \
>> mono-shlib-cop$(SCRIPT_SUFFIX) \
>> mozroots$(SCRIPT_SUFFIX) \
>>
>>
>>
>>
>> _______________________________________________
>> Mono-patches maillist - Mono-patches at lists.ximian.com
>> http://lists.ximian.com/mailman/listinfo/mono-patches
More information about the Mono-devel-list
mailing list