From 9c202860ad2bc391a0ac8bc2e99b3e5624d2b472 Mon Sep 17 00:00:00 2001
From: midipix <writeonce@midipix.org>
Date: Wed, 30 Dec 2015 05:27:21 -0500
Subject: amgc_init_unit_meta(): initial implementation and integration.

---
 src/logic/amgc_init_unit_meta.c | 62 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 62 insertions(+)
 create mode 100644 src/logic/amgc_init_unit_meta.c

(limited to 'src/logic')

diff --git a/src/logic/amgc_init_unit_meta.c b/src/logic/amgc_init_unit_meta.c
new file mode 100644
index 0000000..fec660d
--- /dev/null
+++ b/src/logic/amgc_init_unit_meta.c
@@ -0,0 +1,62 @@
+/**********************************************************/
+/*  apimagic: cparser-based API normalization utility     */
+/*  Copyright (C) 2015--2016  Z. Gilboa                   */
+/*  Released under GPLv2 and GPLv3; see COPYING.APIMAGIC. */
+/**********************************************************/
+
+#include <cparser/ast/ast_t.h>
+#include <cparser/ast/entity_t.h>
+
+#include <apimagic/apimagic.h>
+
+int amgc_init_unit_meta(
+	const struct amgc_unit_ctx *	uctx,
+	struct amgc_unit_meta *		meta)
+{
+	union entity_t * entity;
+
+	entity = uctx->ccunit->ast->scope.first_entity;
+
+	for (; entity; entity=entity->base.next) {
+		if (strcmp(*uctx->path,entity->base.pos.input_name))
+			continue;
+
+		if ((is_declaration(entity)) &&  (entity->declaration.implicit))
+				meta->ngenerated++;
+
+		else {
+			switch (entity->kind) {
+				case ENTITY_ENUM:
+					meta->nenums++;
+					break;
+
+				case ENTITY_ENUM_VALUE:
+					meta->nenumvals++;
+					break;
+
+				case ENTITY_TYPEDEF:
+					meta->ntypedefs++;
+					break;
+
+				case ENTITY_STRUCT:
+					if (entity->base.symbol || entity->compound.alias)
+						meta->nstructs++;
+					break;
+
+				case ENTITY_UNION:
+					if (entity->base.symbol || entity->compound.alias)
+						meta->nunions++;
+					break;
+
+				case ENTITY_FUNCTION:
+					meta->nfunctions++;
+					break;
+
+				default:
+					break;
+			}
+		}
+	}
+
+	return 0;
+}
-- 
cgit v1.2.3