From eb59e306c2f09fc5e64f63b7e264b11c6642b21c Mon Sep 17 00:00:00 2001 From: Alex Corrado Date: Mon, 5 Dec 2011 01:59:24 -0500 Subject: [PATCH] [ItaniumAbi] Flesh out mangling type codes a bit --- src/Mono.Cxxi/Abi/Impl/ItaniumAbi.cs | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/Mono.Cxxi/Abi/Impl/ItaniumAbi.cs b/src/Mono.Cxxi/Abi/Impl/ItaniumAbi.cs index aab6168c..4b078413 100644 --- a/src/Mono.Cxxi/Abi/Impl/ItaniumAbi.cs +++ b/src/Mono.Cxxi/Abi/Impl/ItaniumAbi.cs @@ -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: