D->library_id = M->Lib.Info->Id;
} else {
D->library_id = CC65_INV_ID;
+ }
+ if (M->MainScope) {
+ D->scope_id = M->MainScope->Id;
+ } else {
+ D->scope_id = CC65_INV_ID;
}
- D->scope_id = M->MainScope->Id;
}
}
}
- /* Walk over all modules, check that eacxh one has a main scope assigned,
- * then sort the scopes by name
+ /* Walk over all modules. If a module doesn't have scopes, it wasn't
+ * compiled with debug info which is ok. If it has debug info, it must
+ * also have a main scope. If there are scopes, sort them by name.
*/
for (I = 0; I < CollCount (&D->Info->ModInfoById); ++I) {
/* Get this module */
ModInfo* M = CollAt (&D->Info->ModInfoById, I);
+ /* Ignore modules without any scopes (no debug info) */
+ if (CollCount (&M->ScopeInfoByName) == 0) {
+ continue;
+ }
+
/* Must have a main scope */
if (M->MainScope == 0) {
ParseError (D,
-/* Module information */
+/* Module information
+ * Notes:
+ * - scope_id contains CC65_INV_ID if the module was compiled without
+ * debug information.
+ */
typedef struct cc65_moduledata cc65_moduledata;
struct cc65_moduledata {
unsigned module_id; /* The internal module id */
/* Notes:
* - If the symbol is segment relative, the segment id gives segment
* information, otherwise it contains CC65_INV_ID.
- * - If the type is CC65_SYM_IMPORT, export_id may contain the id of the
+ * - If the type is CC65_SYM_IMPORT, export_id may contain the id of the
* export. This is not the case if the module contaiing the export doesn't
* have debug information.
* - For an import, the fields symbol_value and segment_id are taken from
* the export, if it is available, since imports have no value or segments
* by itself.
- * - For an import symbol_type and symbol_size are more or less unusable
+ * - For an import symbol_type and symbol_size are more or less unusable
* because they don't have a meaning for imports.
- * - For normal symbols (not cheap locals) parent_id contains CC65_INV_ID,
+ * - For normal symbols (not cheap locals) parent_id contains CC65_INV_ID,
* for cheap locals it contains the symbol id of the parent symbol.
*/
typedef struct cc65_symboldata cc65_symboldata;