Răsfoiți Sursa

Add calling_convention to odin-doc Type format

gingerBill 4 ani în urmă
părinte
comite
4282688e60
2 a modificat fișierele cu 28 adăugiri și 0 ștergeri
  1. 1 0
      src/docs_format.cpp
  2. 27 0
      src/docs_writer.cpp

+ 1 - 0
src/docs_format.cpp

@@ -134,6 +134,7 @@ struct OdinDocType {
 	i64 elem_counts[OdinDocType_ElemsCap];
 
 	// Each of these is esed by some types, not all
+	OdinDocString calling_convention;
 	OdinDocArray<OdinDocTypeIndex> types;
 	OdinDocArray<OdinDocEntityIndex> entities;
 	OdinDocTypeIndex polmorphic_params;

+ 27 - 0
src/docs_writer.cpp

@@ -675,6 +675,33 @@ OdinDocTypeIndex odin_doc_type(OdinDocWriter *w, Type *type) {
 			types[0] = odin_doc_type(w, type->Proc.params);
 			types[1] = odin_doc_type(w, type->Proc.results);
 			doc_type.types = odin_write_slice(w, types, gb_count_of(types));
+
+			String calling_convention = {};
+			switch (type->Proc.calling_convention) {
+			case ProcCC_Invalid:
+			case ProcCC_Odin:
+				// no need
+				break;
+			case ProcCC_Contextless:
+				calling_convention = str_lit("contextless");
+				break;
+			case ProcCC_CDecl:
+				calling_convention = str_lit("cdecl");
+				break;
+			case ProcCC_StdCall:
+				calling_convention = str_lit("stdcall");
+				break;
+			case ProcCC_FastCall:
+				calling_convention = str_lit("fastcall");
+				break;
+			case ProcCC_None:
+				calling_convention = str_lit("none");
+				break;
+			case ProcCC_InlineAsm:
+				calling_convention = str_lit("inline-assembly");
+				break;
+			}
+			doc_type.calling_convention = odin_doc_write_string(w, calling_convention);
 		}
 		break;
 	case Type_BitSet: