Exemple #1
0
        private static string ConvertCppPrimitive(CppPrimitiveType primitive)
        {
            switch (primitive.Kind)
            {
            case CppPrimitiveKind.Bool: return("bool");

            case CppPrimitiveKind.Char: return("char");

            case CppPrimitiveKind.Double: return("double");

            case CppPrimitiveKind.Float: return("float");

            case CppPrimitiveKind.Int: return("int");

            case CppPrimitiveKind.Short: return("short");

            case CppPrimitiveKind.UnsignedChar: return("byte");

            case CppPrimitiveKind.UnsignedInt: return("uint");

            case CppPrimitiveKind.UnsignedShort: return("ushort");

            default:
                throw new Exception($"Unsupported type [{primitive.Kind}] on [{primitive}]");
            }
        }
Exemple #2
0
        private void RegisterPrimitiveType(CppPrimitiveType primitive, SyntaxKind syntax)
        {
            var name     = primitive.GetDisplayName();
            var typeInfo = new TypeInfo(name, primitive, PredefinedType(Token(syntax)));

            _nativeMap.Add(name, typeInfo);
        }
Exemple #3
0
        private static string GetCsTypeName(CppPrimitiveType primitiveType, bool isPointer)
        {
            string result = string.Empty;

            switch (primitiveType.Kind)
            {
            case CppPrimitiveKind.Void:
                result = "void";
                break;

            case CppPrimitiveKind.Bool:
                result = "bool";
                break;

            case CppPrimitiveKind.Char:
                result = "char";
                break;

            case CppPrimitiveKind.Short:
                result = "short";
                break;

            case CppPrimitiveKind.Int:
                result = "int";
                break;

            case CppPrimitiveKind.UnsignedShort:
                result = "ushort";
                break;

            case CppPrimitiveKind.UnsignedInt:
                result = "uint";
                break;

            case CppPrimitiveKind.Float:
                result = "float";
                break;

            case CppPrimitiveKind.Double:
                result = "double";
                break;

            case CppPrimitiveKind.UnsignedChar:
            case CppPrimitiveKind.LongLong:
            case CppPrimitiveKind.UnsignedLongLong:
            case CppPrimitiveKind.LongDouble:
            case CppPrimitiveKind.WChar:
            default:
                break;
            }

            if (isPointer)
            {
                result += "*";
            }

            return(result);
        }
Exemple #4
0
        private static string GetCsTypeName(CppPrimitiveType primitiveType, bool isPointer)
        {
            switch (primitiveType.Kind)
            {
            case CppPrimitiveKind.Void:
                return(isPointer ? "void*" : "void");

            case CppPrimitiveKind.Char:
                return(isPointer ? "byte*" : "byte");

            case CppPrimitiveKind.Bool:
                break;

            case CppPrimitiveKind.WChar:
                break;

            case CppPrimitiveKind.Short:
                return(isPointer ? "short*" : "short");

            case CppPrimitiveKind.Int:
                return(isPointer ? "int*" : "int");

            case CppPrimitiveKind.LongLong:
                break;

            case CppPrimitiveKind.UnsignedChar:
                break;

            case CppPrimitiveKind.UnsignedShort:
                return(isPointer ? "ushort*" : "ushort");

            case CppPrimitiveKind.UnsignedInt:
                return(isPointer ? "uint*" : "uint");

            case CppPrimitiveKind.UnsignedLongLong:
                break;

            case CppPrimitiveKind.Float:
                return(isPointer ? "float*" : "float");

            case CppPrimitiveKind.Double:
                return(isPointer ? "double*" : "double");

            case CppPrimitiveKind.LongDouble:
                break;

            default:
                return(string.Empty);
            }

            return(string.Empty);
        }
Exemple #5
0
        public static CSharpPrimitiveType GetCSharpPrimitive(CppPrimitiveType cppType)
        {
            switch (cppType.Kind)
            {
            case CppPrimitiveKind.Void:
                return(CSharpPrimitiveType.Void());

            case CppPrimitiveKind.Bool:
                return(CSharpPrimitiveType.Bool());

            case CppPrimitiveKind.WChar:
                return(CSharpPrimitiveType.Char());

            case CppPrimitiveKind.Char:
                return(CSharpPrimitiveType.SByte());

            case CppPrimitiveKind.Short:
                return(CSharpPrimitiveType.Short());

            case CppPrimitiveKind.Int:
                return(CSharpPrimitiveType.Int());

            case CppPrimitiveKind.LongLong:
                return(CSharpPrimitiveType.Long());

            case CppPrimitiveKind.UnsignedChar:
                return(CSharpPrimitiveType.Byte());

            case CppPrimitiveKind.UnsignedShort:
                return(CSharpPrimitiveType.UShort());

            case CppPrimitiveKind.UnsignedInt:
                return(CSharpPrimitiveType.UInt());

            case CppPrimitiveKind.UnsignedLongLong:
                return(CSharpPrimitiveType.ULong());

            case CppPrimitiveKind.Float:
                return(CSharpPrimitiveType.Float());

            case CppPrimitiveKind.Double:
                return(CSharpPrimitiveType.Double());

            case CppPrimitiveKind.LongDouble:
                return(CSharpPrimitiveType.Double());

            default:
                throw new ArgumentOutOfRangeException($"The kind {cppType.Kind} is not supported");
            }
        }
        public static string GetVType(this CppPrimitiveType self)
        {
            switch (self.Kind)
            {
            case CppPrimitiveKind.Bool:
                return("bool");

            case CppPrimitiveKind.Char:
                return("byte");

            case CppPrimitiveKind.Double:
                return("f64");

            case CppPrimitiveKind.Float:
                return("f32");

            case CppPrimitiveKind.Int:
                return("int");

            case CppPrimitiveKind.LongDouble:
                throw new System.NotImplementedException();

            case CppPrimitiveKind.LongLong:
                return("i64");

            case CppPrimitiveKind.Short:
                return("i16");

            case CppPrimitiveKind.UnsignedChar:
                return("byte");

            case CppPrimitiveKind.UnsignedInt:
                return("u32");

            case CppPrimitiveKind.UnsignedLongLong:
                return("u64");

            case CppPrimitiveKind.UnsignedShort:
                return("u16");

            case CppPrimitiveKind.Void:
                return("void");

            case CppPrimitiveKind.WChar:
                return("bool");
            }
            throw new System.NotImplementedException();
        }
Exemple #7
0
        public void TestSimple()
        {
            ParseAssert(@"
using Type_void = void;

using Type_bool = bool;

using Type_wchar = wchar_t ;

using Type_char = char;
using Type_unsigned_char = unsigned char;

using Type_short = short;
using Type_unsigned_short = unsigned short ;

using Type_int = int;
using Type_unsigned_int = unsigned int ;

using Type_long_long = long long;
using Type_unsigned_long_long = unsigned long long ;

using Type_float = float;
using Type_double = double;
",
                        compilation =>
            {
                Assert.False(compilation.HasErrors);

                Assert.AreEqual(13, compilation.Typedefs.Count);

                var primitives = new CppPrimitiveType[]
                {
                    CppPrimitiveType.Void,

                    CppPrimitiveType.Bool,

                    CppPrimitiveType.WChar,

                    CppPrimitiveType.Char,
                    CppPrimitiveType.UnsignedChar,

                    CppPrimitiveType.Short,
                    CppPrimitiveType.UnsignedShort,

                    CppPrimitiveType.Int,
                    CppPrimitiveType.UnsignedInt,

                    CppPrimitiveType.LongLong,
                    CppPrimitiveType.UnsignedLongLong,

                    CppPrimitiveType.Float,
                    CppPrimitiveType.Double,
                };


                for (int i = 0; i < primitives.Length; i++)
                {
                    var typedef      = compilation.Typedefs[i];
                    var expectedType = primitives[i];
                    Assert.AreEqual(expectedType, typedef.ElementType);
                    Assert.AreEqual("Type_" + expectedType.ToString().Replace(" ", "_"), typedef.Name);
                }
            }
                        );
        }
Exemple #8
0
        private void RegisterStandardTypedef(string nativeName, CppPrimitiveType primitive, SyntaxKind syntax)
        {
            var typeInfo = new TypeInfo(nativeName, new CppTypedef(nativeName, primitive), PredefinedType(Token(syntax)), true);

            _nativeMap.Add(nativeName, typeInfo);
        }
Exemple #9
0
        private void RegisterStandardTypedef(string nativeName, CppPrimitiveType primitive, string managedName)
        {
            var typeInfo = new TypeInfo(nativeName, new CppTypedef(nativeName, primitive), IdentifierName(managedName), true);

            _nativeMap.Add(nativeName, typeInfo);
        }