From e0e3423701e9b87d9a6124f0bb81a2064f21c22b Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 20 Jun 2023 14:42:26 +0200 Subject: [PATCH] ig-c99: just reorder blocks and rename identifiers --- lm-c99/ig-c99.ysl2 | 152 +++++++++++++++++++++++++-------------------- 1 file changed, 86 insertions(+), 66 deletions(-) diff --git a/lm-c99/ig-c99.ysl2 b/lm-c99/ig-c99.ysl2 index 24a6b64..e7e93d9 100644 --- a/lm-c99/ig-c99.ysl2 +++ b/lm-c99/ig-c99.ysl2 @@ -12,41 +12,8 @@ tstylesheet { // pEpACIDLang IG-C99 // The C99 Interface Generator for pEpACIDLang // ---------------------------------------------------------------------- - - // typeclass is either - // * primitive - // * object - def "func:ig_c99_typeclass" { - param "idltype"; - const "resolved_type", "func:idl_type_get_resolved_type($idltype)"; - const "resolved_typekind", "func:idl_type_get_typekind_of_type($resolved_type)"; - - choose { - when "func:idl_type_is_defined($idltype)" - choose { - when "$resolved_typekind = 'basetype'" - choose { - when "$resolved_type = 'string'" - result > object - when "$resolved_type = 'binary'" - result > object - otherwise - result > primitive - } - when "$resolved_typekind = 'enum'" - result > primitive - when "$resolved_typekind = 'struct'" - result > object - when "$resolved_typekind = 'generic'" - result > object - otherwise - error > ig_c99_typeclass - cant determine typeclass of: «$idltype» - } - otherwise - error > ig_c99_typeclass - is not a type: «$idltype» - } - }; + // generate basetype declarations defined by the idl template "idl" document "ig-c99/idl_core.h", "text" { || @@ -67,6 +34,16 @@ tstylesheet { || } + template "basetypes" { + for "*" { + const "name", "name()"; + if "func:c99_typename_of_basetype($name) != $name" { + > «func:typedef(func:c99_typename_of_basetype($name), $name)» + } + } + } + + template "api" document "ig-c99/{@name}_api.h", "text" { const "pkg_name", "../@name"; const "pkg_version", "../version/text()"; @@ -108,16 +85,8 @@ tstylesheet { } - // TYPEALIAS - // --------- - - def "func:typedef" { - param "is_type"; - param "alias_name"; - result > typedef «$is_type» «$alias_name»;\n - } - def "func:idltype_to_ctype_basetype" { + def "func:c99_typename_of_basetype" { param "idltype"; // TODO: test for is_basetype @@ -137,10 +106,69 @@ tstylesheet { when "$idltype = 'bool'" result > bool otherwise - error > func:idltype_to_ctype_basetype - basetype not supported by ig-c99: «$idltype» + error > func:c99_typename_of_basetype - basetype not supported by ig-c99: «$idltype» } } + def "func:c99_typename_of_enum" { + param "name"; + param "pkg_name"; + + result "yml:ucase(concat($pkg_name, '_', $name))"; + } + + def "func:c99_itemname_of_enumitem" { + param "enum_name"; + param "idl_item_name"; + + result "yml:ucase(concat($enum_name, '_', $idl_item_name))"; + } + + def "func:c99_typename_of_struct" { + param "pkg_name"; + param "idl_name"; + + result "concat(yml:capit($pkg_name), '_', yml:capit($idl_name))"; + } + + // typeclass is either + // * primitive + // * object + def "func:c99_typeclass_of_type" { + param "idltype"; + const "resolved_type", "func:idl_type_get_resolved_type($idltype)"; + const "resolved_typekind", "func:idl_type_get_typekind_of_type($resolved_type)"; + + choose { + when "func:idl_type_is_defined($idltype)" + choose { + when "$resolved_typekind = 'basetype'" + choose { + when "$resolved_type = 'string'" + result > object + when "$resolved_type = 'binary'" + result > object + otherwise + result > primitive + } + when "$resolved_typekind = 'enum'" + result > primitive + when "$resolved_typekind = 'struct'" + result > object + when "$resolved_typekind = 'generic'" + result > object + otherwise + error > c99_typeclass_of_type - cant determine typeclass of: «$idltype» + } + otherwise + error > c99_typeclass_of_type - is not a type: «$idltype» + } + }; + + + // TYPEALIAS + // --------- + template "deftype" { const "alias_name", "@name"; const "type_or_typekind", "as/@type"; @@ -158,13 +186,10 @@ tstylesheet { } } - template "basetypes" { - for "*" { - const "name", "name()"; - if "func:idltype_to_ctype_basetype($name) != $name" { - > «func:typedef(func:idltype_to_ctype_basetype($name), $name)» - } - } + def "func:typedef" { + param "is_type"; + param "alias_name"; + result > typedef «$is_type» «$alias_name»;\n } @@ -172,13 +197,6 @@ tstylesheet { // ENUM // ---- - def "func:idltype_to_ctype_enum" { - param "pkg_name"; - param "name"; - - result "yml:ucase(concat($pkg_name, '_', $name))"; - } - function "enums" { || // Enums @@ -197,7 +215,7 @@ tstylesheet { function "enum" { param "idl_enum_name"; param "idl_pkg_name"; - const "enum_name", "func:idltype_to_ctype_enum($idl_pkg_name, $idl_enum_name)"; + const "enum_name", "func:c99_typename_of_enum($idl_enum_name, $idl_pkg_name)"; || typedef enum _«$enum_name» { ``apply "item" with "enum_name", "$enum_name" @@ -209,7 +227,7 @@ tstylesheet { template "item" { param "enum_name"; const "idl_item_name", "@name"; - const "c99_item_name", "yml:ucase(concat($enum_name, '_', $idl_item_name))"; + const "c99_item_name", "func:c99_itemname_of_enumitem($enum_name, $idl_item_name)"; const "idl_value", "text()"; const "c99_value", "func:enum_item_value($idl_value)"; @@ -231,17 +249,19 @@ tstylesheet { // STRUCT // ------ - def "func:idltype_to_ctype_struct" { - param "pkg_name"; - param "idl_name"; + function "structs" { + || + // Structs + // ------- - result "concat(yml:capit($pkg_name), '_', yml:capit($idl_name))"; + ``apply "struct" + || } template "struct" { const "idl_name", "@name"; const "pkg_name", "../../@name"; - const "c_name", "func:idltype_to_ctype_struct($pkg_name, $idl_name)"; + const "c_name", "func:c99_typename_of_struct($pkg_name, $idl_name)"; || typedef struct _«$c_name» { ``apply "field" @@ -282,7 +302,7 @@ tstylesheet { def "func:idlparam_to_cparam" { param "idltype"; param "mode"; - const "typeclass", "func:ig_c99_typeclass($idltype)"; + const "typeclass", "func:c99_typeclass_of_type($idltype)"; choose { when "$mode = 'borrow'"