Browse Source

ig-c99: just reorder blocks and rename identifiers

main
heck 2 years ago
parent
commit
e0e3423701
  1. 152
      lm-c99/ig-c99.ysl2

152
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'"

Loading…
Cancel
Save