Esempio n. 1
0
 /// <summary>
 /// </summary>
 /// <param name="methodInfo">
 /// </param>
 /// <param name="writer">
 /// </param>
 public static void WriteFunctionCallAttributes(this IMethod methodInfo, LlvmIndentedTextWriter writer)
 {
     if (methodInfo.DllImportData != null && methodInfo.DllImportData.CallingConvention == CallingConvention.StdCall)
     {
         writer.Write("x86_stdcallcc ");
     }
 }
Esempio n. 2
0
 /// <summary>
 /// </summary>
 /// <param name="writer">
 /// </param>
 /// <param name="tryClause">
 /// </param>
 public static void WriteFunctionCall(this LlvmIndentedTextWriter writer, TryClause tryClause)
 {
     if (tryClause != null)
     {
         writer.Write("invoke ");
     }
     else
     {
         writer.Write("call ");
     }
 }
Esempio n. 3
0
        /// <summary>
        /// </summary>
        /// <param name="type">
        /// </param>
        /// <param name="writer">
        /// </param>
        /// <param name="isPointer">
        /// </param>
        public static void WriteTypeName(this IType type, LlvmIndentedTextWriter writer, bool isPointer)
        {
            var typeBaseName = type.TypeToCType(isPointer);

            // clean name
            if (typeBaseName.EndsWith("&"))
            {
                typeBaseName = typeBaseName.Substring(0, typeBaseName.Length - 1);
            }

            writer.Write(typeBaseName);
        }
Esempio n. 4
0
        /// <summary>
        /// </summary>
        /// <param name="type">
        /// </param>
        /// <param name="writer">
        /// </param>
        public static void WriteTypeWithoutModifiers(this IType type, LlvmIndentedTextWriter writer, bool isPointer = false)
        {
            var effectiveType = type;

            if (effectiveType.IsPointer)
            {
                effectiveType.GetElementType().WriteTypeWithoutModifiers(writer, type.IsPointer);
                return;
            }

            if (!type.IsArray)
            {
                if (type.UseAsClass || !effectiveType.IsPrimitiveType() && !effectiveType.IsVoid() && !effectiveType.IsEnum)
                {
                    writer.Write('%');
                }

                // write base name
                effectiveType.WriteTypeName(writer, isPointer);
            }
            else if (!type.IsMultiArray)
            {
                writer.Write("{1} {2}, [ {0} x ", 0, "{", ArraySingleDimensionGen.GetArrayPrefixDataType());

                effectiveType = type;

                if (effectiveType.IsByRef)
                {
                    effectiveType = effectiveType.GetElementType();
                }

                effectiveType.GetElementType().WriteTypePrefix(writer);

                writer.Write(" ] }");
            }
            else
            {
                type.BaseType.WriteTypeWithoutModifiers(writer);
            }
        }
Esempio n. 5
0
 /// <summary>
 /// </summary>
 /// <param name="writer">
 /// </param>
 public abstract void WriteTo(LlvmIndentedTextWriter writer);
Esempio n. 6
0
 /// <summary>
 /// </summary>
 /// <param name="writer">
 /// </param>
 public override void WriteTo(LlvmIndentedTextWriter writer)
 {
 }
Esempio n. 7
0
 /// <summary>
 /// </summary>
 /// <param name="writer">
 /// </param>
 public abstract void WriteTo(LlvmIndentedTextWriter writer);
Esempio n. 8
0
 /// <summary>
 /// </summary>
 /// <param name="type">
 /// </param>
 /// <param name="writer">
 /// </param>
 /// <param name="asReference">
 /// </param>
 public static void WriteTypePrefix(this IType type, LlvmIndentedTextWriter writer, bool asReference = false)
 {
     type.WriteTypeWithoutModifiers(writer);
     type.WriteTypeModifiers(writer, asReference);
 }
Esempio n. 9
0
 /// <summary>
 /// </summary>
 /// <param name="writer">
 /// </param>
 public override void WriteTo(LlvmIndentedTextWriter writer)
 {
     base.WriteTo(writer);
 }
Esempio n. 10
0
 /// <summary>
 /// </summary>
 /// <param name="methodInfo">
 /// </param>
 /// <param name="writer">
 /// </param>
 public static void WriteFunctionCallAttributes(this IMethod methodInfo, LlvmIndentedTextWriter writer)
 {
     if (methodInfo.DllImportData != null &&
         methodInfo.DllImportData.CallingConvention == CallingConvention.StdCall)
     {
         writer.Write("x86_stdcallcc ");
     }
 }
Esempio n. 11
0
        /// <summary>
        /// </summary>
        /// <param name="type">
        /// </param>
        /// <param name="writer">
        /// </param>
        public static void WriteTypeWithoutModifiers(this IType type, LlvmIndentedTextWriter writer, bool isPointer = false)
        {
            var effectiveType = type;

            if (effectiveType.IsPointer)
            {
                effectiveType.GetElementType().WriteTypeWithoutModifiers(writer, type.IsPointer);
                return;
            }

            if (!type.IsArray)
            {
                if (type.UseAsClass || !effectiveType.IsPrimitiveType() && !effectiveType.IsVoid() && !effectiveType.IsEnum)
                {
                    writer.Write('%');
                }

                // write base name
                effectiveType.WriteTypeName(writer, isPointer);
            }
            else if (!type.IsMultiArray)
            {
                writer.Write("{1} {2}, [ {0} x ", 0, "{", ArraySingleDimensionGen.GetArrayPrefixDataType());

                effectiveType = type;

                if (effectiveType.IsByRef)
                {
                    effectiveType = effectiveType.GetElementType();
                }

                effectiveType.GetElementType().WriteTypePrefix(writer);

                writer.Write(" ] }");
            }
            else
            {
                type.BaseType.WriteTypeWithoutModifiers(writer);
            }
        }
Esempio n. 12
0
 /// <summary>
 /// </summary>
 /// <param name="type">
 /// </param>
 /// <param name="writer">
 /// </param>
 /// <param name="asReference">
 /// </param>
 public static void WriteTypePrefix(this IType type, LlvmIndentedTextWriter writer, bool asReference = false)
 {
     type.WriteTypeWithoutModifiers(writer);
     type.WriteTypeModifiers(writer, asReference);
 }
Esempio n. 13
0
        /// <summary>
        /// </summary>
        /// <param name="type">
        /// </param>
        /// <param name="writer">
        /// </param>
        /// <param name="isPointer">
        /// </param>
        public static void WriteTypeName(this IType type, LlvmIndentedTextWriter writer, bool isPointer)
        {
            var typeBaseName = type.TypeToCType(isPointer);

            // clean name
            if (typeBaseName.EndsWith("&"))
            {
                typeBaseName = typeBaseName.Substring(0, typeBaseName.Length - 1);
            }

            writer.Write(typeBaseName);
        }