Browse Source

[ItaniumAbi] Flesh out mangling type codes a bit

pull/1/head
Alex Corrado 14 years ago
parent
commit
eb59e306c2
  1. 27
      src/Mono.Cxxi/Abi/Impl/ItaniumAbi.cs

27
src/Mono.Cxxi/Abi/Impl/ItaniumAbi.cs

@ -171,11 +171,34 @@ namespace Mono.Cxxi.Abi { @@ -171,11 +171,34 @@ namespace Mono.Cxxi.Abi {
switch (element) {
case CppTypes.Int:
code.Append (modifiers.Transform (
For.AllInputsIn (CppModifiers.Unsigned, CppModifiers.Short).InAnyOrder ().Emit ('t')
For.AllInputsIn (CppModifiers.Unsigned, CppModifiers.Short).InAnyOrder ().Emit ('t'),
For.AnyInputIn (CppModifiers.Short).Emit ('s'),
For.AllInputsIn (CppModifiers.Unsigned, CppModifiers.Long, CppModifiers.Long).InAnyOrder ().Emit ('y'),
For.AllInputsIn (CppModifiers.Long, CppModifiers.Long).InAnyOrder ().Emit ('x'),
For.AllInputsIn (CppModifiers.Unsigned, CppModifiers.Long).InAnyOrder ().Emit ('m'),
For.AnyInputIn (CppModifiers.Long).Emit ('l'),
For.AnyInputIn (CppModifiers.Unsigned).Emit ('j')
).DefaultIfEmpty ('i').ToArray ());
break;
case CppTypes.Bool:
code.Append ('b');
break;
case CppTypes.Char:
code.Append ('c');
if (modifiers.Contains (CppModifiers.Signed))
code.Append ('a');
else if (modifiers.Contains (CppModifiers.Unsigned))
code.Append ('h');
else
code.Append ('c');
break;
case CppTypes.Float:
code.Append ('f');
break;
case CppTypes.Double:
if (modifiers.Contains (CppModifiers.Long))
code.Append ('e');
else
code.Append ('d');
break;
case CppTypes.Class:
case CppTypes.Struct:

Loading…
Cancel
Save