From 9c202860ad2bc391a0ac8bc2e99b3e5624d2b472 Mon Sep 17 00:00:00 2001 From: midipix 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 +#include + +#include + +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