Browse Source

Add package flags

gingerBill 4 years ago
parent
commit
ae04af4e4e
3 changed files with 37 additions and 3 deletions
  1. 11 2
      core/odin/doc-format/doc_format.odin
  2. 7 0
      src/docs_format.cpp
  3. 19 1
      src/docs_writer.cpp

+ 11 - 2
core/odin/doc-format/doc_format.odin

@@ -63,9 +63,18 @@ File :: struct {
 	name: String,
 }
 
+Pkg_Flag :: enum u32le {
+	Builtin = 0,
+	Runtime = 1,
+	Init    = 2,
+}
+
+Pkg_Flags :: distinct bit_set[Pkg_Flag; u32le];
+
 Pkg :: struct {
 	fullpath: String,
 	name:     String,
+	flags:    Pkg_Flags,
 	docs:     String,
 	files:    Array(File_Index),
 	entities: Array(Entity_Index),
@@ -195,8 +204,8 @@ Type_Flag_Proc :: enum u32le {
 	C_Vararg    = 4,
 }
 
-Type_Flags_BitSet :: distinct bit_set[Type_Flag_BitSet; u32le];
-Type_Flag_BitSet :: enum u32le {
+Type_Flags_Bit_Set :: distinct bit_set[Type_Flag_Bit_Set; u32le];
+Type_Flag_Bit_Set :: enum u32le {
 	Range            = 1,
 	Op_Lt            = 2,
 	Op_Lt_Eq         = 3,

+ 7 - 0
src/docs_format.cpp

@@ -190,9 +190,16 @@ struct OdinDocEntity {
 	OdinDocArray<OdinDocString>      where_clauses; // Procedures
 };
 
+enum OdinDocPkgFlags : u32 {
+	OdinDocPkgFlag_Builtin = 1<<0,
+	OdinDocPkgFlag_Runtime = 1<<1,
+	OdinDocPkgFlag_Init    = 1<<2,
+};
+
 struct OdinDocPkg {
 	OdinDocString fullpath;
 	OdinDocString name;
+	u32           flags;
 	OdinDocString docs;
 	OdinDocArray<OdinDocFileIndex>   files;
 	OdinDocArray<OdinDocEntityIndex> entities;

+ 19 - 1
src/docs_writer.cpp

@@ -509,7 +509,6 @@ OdinDocTypeIndex odin_doc_type(OdinDocWriter *w, Type *type) {
 	map_set(&w->type_cache, hash_pointer(type), type_index);
 	map_set(&w->type_id_cache, hash_integer(type_index), type);
 
-
 	switch (type->kind) {
 	case Type_Basic:
 		doc_type.kind = OdinDocType_Basic;
@@ -1008,9 +1007,28 @@ void odin_doc_write_docs(OdinDocWriter *w) {
 		gbAllocator allocator = heap_allocator();
 
 		AstPackage *pkg = pkgs[i];
+
+		u32 pkg_flags = 0;
+		switch (pkg->kind) {
+		case Package_Normal:
+			break;
+		case Package_Runtime:
+			pkg_flags |= OdinDocPkgFlag_Runtime;
+			break;
+		case Package_Init:
+			pkg_flags |= OdinDocPkgFlag_Init;
+			break;
+		}
+		if (pkg->name == "builtin") {
+			pkg_flags |= OdinDocPkgFlag_Builtin;
+		} else if (pkg->name == "intrinsics") {
+			pkg_flags |= OdinDocPkgFlag_Builtin;
+		}
+
 		OdinDocPkg doc_pkg = {};
 		doc_pkg.fullpath = odin_doc_write_string(w, pkg->fullpath);
 		doc_pkg.name     = odin_doc_write_string(w, pkg->name);
+		doc_pkg.flags    = pkg_flags;
 		doc_pkg.docs     = odin_doc_pkg_doc_string(w, pkg);
 
 		OdinDocPkg *dst = nullptr;