From 2e879cef83189bf50789ea3e3d144738222e828c Mon Sep 17 00:00:00 2001 From: midipix Date: Wed, 6 Jan 2016 14:05:29 -0500 Subject: amgc_list_unit_enums(): initial implementation and integration. --- include/apimagic/apimagic.h | 6 ++++++ src/apimagic.c | 6 ++++++ src/driver/amgc_driver_ctx.c | 5 +++++ src/internal/apimagic_driver_impl.h | 1 + src/output/amgc_output_enum.c | 23 +++++++++++++++++++++++ src/skin/amgc_skin_default.c | 4 ++++ 6 files changed, 45 insertions(+) diff --git a/include/apimagic/apimagic.h b/include/apimagic/apimagic.h index a7cc472..6762ab2 100644 --- a/include/apimagic/apimagic.h +++ b/include/apimagic/apimagic.h @@ -53,6 +53,12 @@ enum amgc_output_action { AMGC_OUTPUT_STRUCT, AMGC_OUTPUT_UNION, AMGC_OUTPUT_FUNCTION, + AMGC_LIST_DEFINE, + AMGC_LIST_ENUM, + AMGC_LIST_TYPEDEF, + AMGC_LIST_STRUCT, + AMGC_LIST_UNION, + AMGC_LIST_FUNCTION, }; struct amgc_input { diff --git a/src/apimagic.c b/src/apimagic.c index dd0d893..77ae2a2 100644 --- a/src/apimagic.c +++ b/src/apimagic.c @@ -32,6 +32,12 @@ static void apimagic_perform_unit_actions(struct amgc_unit_ctx * uctx) (void)0; else amgc_output_unit_enums(uctx,0,stdout); + + case AMGC_LIST_ENUM: + if (action->symbol) + (void)0; + else + amgc_list_unit_enums(uctx,0,stdout); } } diff --git a/src/driver/amgc_driver_ctx.c b/src/driver/amgc_driver_ctx.c index c25be55..2b33de4 100644 --- a/src/driver/amgc_driver_ctx.c +++ b/src/driver/amgc_driver_ctx.c @@ -197,6 +197,11 @@ int amgc_get_driver_ctx( ctx->actions[nactions].type = AMGC_ACTION_OUTPUT; ctx->actions[nactions++].action = AMGC_OUTPUT_ENUM; break; + + case TAG_LIST_ENUMS: + ctx->actions[nactions].type = AMGC_ACTION_OUTPUT; + ctx->actions[nactions++].action = AMGC_LIST_ENUM; + break; } ctx->ctx.program = program; diff --git a/src/internal/apimagic_driver_impl.h b/src/internal/apimagic_driver_impl.h index d070c19..5b599a9 100644 --- a/src/internal/apimagic_driver_impl.h +++ b/src/internal/apimagic_driver_impl.h @@ -15,6 +15,7 @@ enum app_tags { TAG_HELP, TAG_VERSION, TAG_PRINT_ENUMS, + TAG_LIST_ENUMS, TAG_LANG_STD, }; diff --git a/src/output/amgc_output_enum.c b/src/output/amgc_output_enum.c index be399df..3c8288b 100644 --- a/src/output/amgc_output_enum.c +++ b/src/output/amgc_output_enum.c @@ -149,3 +149,26 @@ int amgc_output_unit_enums( return 0; } + +int amgc_list_unit_enums( + const struct amgc_unit_ctx * uctx, + const struct amgc_layout * layout, + FILE * fout) +{ + const struct amgc_entity * aentity; + + if (layout && layout->header && (fputs(layout->header,fout) < 0)) + return -1; + + for (aentity=uctx->entities->enums; aentity->entity; aentity++) + if ((fprintf(fout,"enum %s;\n", + aentity->entity && aentity->entity->base.symbol + ? aentity->entity->base.symbol->string + : aentity->altname) < 0)) + return -1; + + if (layout && layout->footer && (fputs(layout->footer,fout) < 0)) + return -1; + + return 0; +} diff --git a/src/skin/amgc_skin_default.c b/src/skin/amgc_skin_default.c index 407bad1..8444f66 100644 --- a/src/skin/amgc_skin_default.c +++ b/src/skin/amgc_skin_default.c @@ -20,6 +20,10 @@ const struct argv_option amgc_default_options[] = { {"print-enums", 0,TAG_PRINT_ENUMS,ARGV_OPTARG_NONE,0,0,0, "output the translation unit's enums."}, + {"list-enums", 0,TAG_LIST_ENUMS,ARGV_OPTARG_NONE,0,0,0, + "output forward declarations for " + "the translation unit's enums."}, + {"std", '\0',TAG_LANG_STD,ARGV_OPTARG_REQUIRED, ARGV_OPTION_HYBRID_EQUAL,AMGC_LANG_STD_PARADIGM,0, "set language standard"}, -- cgit v1.2.3