1998-11-24 00:02:31 +03:00
|
|
|
#include "xpidl.h"
|
|
|
|
|
1998-11-27 00:03:03 +03:00
|
|
|
/* is this type output in the form "<foo> *"? */
|
|
|
|
#define STARRED_TYPE(type) ( ((type) == IDLN_TYPE_STRING || \
|
|
|
|
(type) == IDLN_TYPE_WIDE_STRING || \
|
|
|
|
(type) == IDLN_IDENT) )
|
|
|
|
|
1998-11-24 00:02:31 +03:00
|
|
|
static gboolean
|
|
|
|
ident(TreeState *state)
|
|
|
|
{
|
|
|
|
printf("%s", IDL_IDENT(state->tree).str);
|
|
|
|
return TRUE;
|
|
|
|
}
|
1998-11-27 00:03:03 +03:00
|
|
|
static gboolean
|
|
|
|
add_interface_ref_maybe(IDL_tree p, gpointer user_data)
|
|
|
|
{
|
|
|
|
GHashTable *hash = (GHashTable *)user_data;
|
|
|
|
if (IDL_NODE_TYPE(p) == IDLN_IDENT &&
|
|
|
|
!g_hash_table_lookup(hash, IDL_IDENT(p).str))
|
|
|
|
g_hash_table_insert(hash, IDL_IDENT(p).str, "FOUND");
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
find_interface_refs(IDL_tree p, gpointer user_data)
|
|
|
|
{
|
|
|
|
IDL_tree node;
|
|
|
|
switch(IDL_NODE_TYPE(p)) {
|
|
|
|
case IDLN_ATTR_DCL:
|
|
|
|
node = IDL_ATTR_DCL(p).param_type_spec;
|
|
|
|
break;
|
|
|
|
case IDLN_OP_DCL:
|
|
|
|
/*
|
|
|
|
IDL_tree_walk_in_order(IDL_OP_DCL(p).parameter_dcls, generate_includes,
|
|
|
|
user_data);
|
|
|
|
*/
|
|
|
|
node = IDL_OP_DCL(p).op_type_spec;
|
|
|
|
break;
|
|
|
|
case IDLN_PARAM_DCL:
|
|
|
|
node = IDL_PARAM_DCL(p).param_type_spec;
|
|
|
|
break;
|
|
|
|
case IDLN_INTERFACE:
|
|
|
|
node = IDL_INTERFACE(p).inheritance_spec;
|
|
|
|
if (node)
|
|
|
|
xpidl_list_foreach(node, add_interface_ref_maybe, user_data);
|
|
|
|
node = NULL;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
node = NULL;
|
|
|
|
}
|
|
|
|
if (node && IDL_NODE_TYPE(node) == IDLN_IDENT)
|
|
|
|
add_interface_ref_maybe(node, user_data);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
write_header(gpointer key, gpointer value, gpointer user_data)
|
|
|
|
{
|
|
|
|
char *ident = (char *)key;
|
|
|
|
TreeState *state = (TreeState *)user_data;
|
|
|
|
fprintf(state->file, "#include \"%s.h\" /* interface %s */\n",
|
|
|
|
ident, ident);
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
pass_1(TreeState *state)
|
|
|
|
{
|
|
|
|
GHashTable *hash = g_hash_table_new(g_str_hash, g_str_equal);
|
|
|
|
if (!hash)
|
|
|
|
return FALSE;
|
|
|
|
fputs("#include \"nscore.h\"\n", state->file);
|
|
|
|
IDL_tree_walk_in_order(state->tree, find_interface_refs, hash);
|
|
|
|
g_hash_table_foreach(hash, write_header, state);
|
|
|
|
g_hash_table_destroy(hash);
|
|
|
|
return TRUE;
|
|
|
|
}
|
1998-11-24 00:02:31 +03:00
|
|
|
|
|
|
|
static gboolean
|
|
|
|
interface(TreeState *state)
|
|
|
|
{
|
1998-11-27 00:03:03 +03:00
|
|
|
IDL_tree iface = state->tree, iter;
|
|
|
|
|
1998-11-25 02:16:49 +03:00
|
|
|
char *className =
|
1998-11-27 00:03:03 +03:00
|
|
|
IDL_ns_ident_to_qstring(IDL_IDENT_TO_NS(IDL_INTERFACE(iface).ident),
|
|
|
|
"_", 0);
|
|
|
|
fprintf(state->file, "\n/* starting interface %s */\n",
|
1998-11-25 02:16:49 +03:00
|
|
|
className);
|
|
|
|
|
1998-11-27 00:03:03 +03:00
|
|
|
fputs("class ", state->file);
|
|
|
|
state->tree = IDL_INTERFACE(iface).ident;
|
|
|
|
if (!ident(state))
|
|
|
|
return FALSE;
|
1998-11-25 02:16:49 +03:00
|
|
|
|
1998-11-27 00:03:03 +03:00
|
|
|
if ((iter = IDL_INTERFACE(iface).inheritance_spec)) {
|
|
|
|
fputs(" : ", state->file);
|
|
|
|
for (; iter; iter = IDL_LIST(iter).next) {
|
|
|
|
state->tree = IDL_LIST(iter).data;
|
|
|
|
fputs("public ", state->file);
|
|
|
|
if (!ident(state))
|
|
|
|
return FALSE;
|
|
|
|
if (IDL_LIST(iter).next)
|
|
|
|
fputs(", ", state->file);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fputs(" {\n", state->file);
|
|
|
|
state->tree = IDL_INTERFACE(iface).body;
|
1998-11-25 02:16:49 +03:00
|
|
|
|
|
|
|
if (!process_node(state))
|
|
|
|
return FALSE;
|
|
|
|
|
1998-11-25 07:54:02 +03:00
|
|
|
fprintf(state->file, "\n};\n");
|
1998-11-25 02:16:49 +03:00
|
|
|
|
|
|
|
return TRUE;
|
1998-11-24 00:02:31 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
list(TreeState *state)
|
|
|
|
{
|
|
|
|
IDL_tree iter;
|
|
|
|
for (iter = state->tree; iter; iter = IDL_LIST(iter).next) {
|
|
|
|
state->tree = IDL_LIST(iter).data;
|
|
|
|
if (!process_node(state))
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1998-11-25 02:16:49 +03:00
|
|
|
static gboolean
|
|
|
|
xpcom_type(TreeState *state)
|
|
|
|
{
|
|
|
|
if (!state->tree) {
|
|
|
|
fputs("void", state->file);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(IDL_NODE_TYPE(state->tree)) {
|
|
|
|
case IDLN_TYPE_INTEGER: {
|
|
|
|
gboolean sign = IDL_TYPE_INTEGER(state->tree).f_signed;
|
|
|
|
switch (IDL_TYPE_INTEGER(state->tree).f_type) {
|
|
|
|
case IDL_INTEGER_TYPE_SHORT:
|
|
|
|
fputs(sign ? "PRInt16" : "PRUint16", state->file);
|
|
|
|
break;
|
|
|
|
case IDL_INTEGER_TYPE_LONG:
|
|
|
|
fputs(sign ? "PRInt32" : "PRUint32", state->file);
|
|
|
|
break;
|
|
|
|
case IDL_INTEGER_TYPE_LONGLONG:
|
|
|
|
fputs(sign ? "PRInt64" : "PRUint64", state->file);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
g_error("Unknown integer type %d\n",
|
|
|
|
IDL_TYPE_INTEGER(state->tree).f_type);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
1998-11-25 22:12:50 +03:00
|
|
|
case IDLN_TYPE_CHAR:
|
|
|
|
fputs("char", state->file);
|
|
|
|
break;
|
|
|
|
case IDLN_TYPE_WIDE_CHAR:
|
|
|
|
fputs("PRUint16", state->file); /* wchar_t? */
|
|
|
|
break;
|
|
|
|
case IDLN_TYPE_WIDE_STRING:
|
1998-11-27 00:03:03 +03:00
|
|
|
fputs("PRUnichar *", state->file);
|
|
|
|
break;
|
1998-11-25 02:16:49 +03:00
|
|
|
case IDLN_TYPE_STRING:
|
1998-11-27 00:03:03 +03:00
|
|
|
fputs("char *", state->file);
|
1998-11-25 02:16:49 +03:00
|
|
|
break;
|
|
|
|
case IDLN_TYPE_BOOLEAN:
|
|
|
|
fputs("PRBool", state->file);
|
|
|
|
break;
|
|
|
|
case IDLN_IDENT:
|
|
|
|
fprintf(state->file, "%s *", IDL_IDENT(state->tree).str);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
fprintf(state->file, "unknown_type_%d", IDL_NODE_TYPE(state->tree));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1998-11-24 00:02:31 +03:00
|
|
|
static gboolean
|
|
|
|
type_integer(TreeState *state)
|
|
|
|
{
|
|
|
|
IDL_tree p = state->tree;
|
|
|
|
|
|
|
|
if (!IDL_TYPE_INTEGER(p).f_signed)
|
1998-11-25 07:19:59 +03:00
|
|
|
fputs("unsigned ", state->file);
|
1998-11-24 00:02:31 +03:00
|
|
|
|
|
|
|
switch(IDL_TYPE_INTEGER(p).f_type) {
|
|
|
|
case IDL_INTEGER_TYPE_SHORT:
|
|
|
|
printf("short");
|
|
|
|
break;
|
|
|
|
case IDL_INTEGER_TYPE_LONG:
|
|
|
|
printf("long");
|
|
|
|
break;
|
|
|
|
case IDL_INTEGER_TYPE_LONGLONG:
|
1998-11-25 22:12:50 +03:00
|
|
|
printf("long long");
|
1998-11-24 00:02:31 +03:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
type(TreeState *state)
|
|
|
|
{
|
|
|
|
if (!state->tree) {
|
1998-11-25 02:16:49 +03:00
|
|
|
fputs("void", state->file);
|
1998-11-24 00:02:31 +03:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(IDL_NODE_TYPE(state->tree)) {
|
|
|
|
case IDLN_TYPE_INTEGER:
|
|
|
|
return type_integer(state);
|
|
|
|
case IDLN_TYPE_STRING:
|
1998-11-25 02:16:49 +03:00
|
|
|
fputs("string", state->file);
|
|
|
|
return TRUE;
|
1998-11-25 22:12:50 +03:00
|
|
|
case IDLN_TYPE_WIDE_STRING:
|
|
|
|
fputs("wstring", state->file);
|
|
|
|
return TRUE;
|
|
|
|
case IDLN_TYPE_CHAR:
|
|
|
|
fputs("char", state->file);
|
|
|
|
return TRUE;
|
|
|
|
case IDLN_TYPE_WIDE_CHAR:
|
|
|
|
fputs("wchar", state->file);
|
|
|
|
return TRUE;
|
1998-11-25 02:16:49 +03:00
|
|
|
case IDLN_TYPE_BOOLEAN:
|
|
|
|
fputs("boolean", state->file);
|
1998-11-24 00:02:31 +03:00
|
|
|
return TRUE;
|
|
|
|
default:
|
1998-11-25 02:16:49 +03:00
|
|
|
fprintf(state->file, "unknown_type_%d", IDL_NODE_TYPE(state->tree));
|
1998-11-24 00:02:31 +03:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
param_dcls(TreeState *state)
|
|
|
|
{
|
|
|
|
IDL_tree iter;
|
1998-11-25 07:19:59 +03:00
|
|
|
fputs("(", state->file);
|
1998-11-24 00:02:31 +03:00
|
|
|
for (iter = state->tree; iter; iter = IDL_LIST(iter).next) {
|
|
|
|
struct _IDL_PARAM_DCL decl = IDL_PARAM_DCL(IDL_LIST(iter).data);
|
|
|
|
switch(decl.attr) {
|
|
|
|
case IDL_PARAM_IN:
|
1998-11-25 02:16:49 +03:00
|
|
|
fputs("in ", state->file);
|
1998-11-24 00:02:31 +03:00
|
|
|
break;
|
|
|
|
case IDL_PARAM_OUT:
|
1998-11-25 02:16:49 +03:00
|
|
|
fputs("out ", state->file);
|
1998-11-24 00:02:31 +03:00
|
|
|
break;
|
|
|
|
case IDL_PARAM_INOUT:
|
1998-11-25 02:16:49 +03:00
|
|
|
fputs("inout ", state->file);
|
1998-11-24 00:02:31 +03:00
|
|
|
break;
|
|
|
|
default:;
|
|
|
|
}
|
|
|
|
state->tree = (IDL_tree)decl.param_type_spec;
|
|
|
|
if (!type(state))
|
|
|
|
return FALSE;
|
1998-11-25 02:16:49 +03:00
|
|
|
fputs(" ", state->file);
|
1998-11-24 00:02:31 +03:00
|
|
|
state->tree = (IDL_tree)decl.simple_declarator;
|
|
|
|
if (!process_node(state))
|
|
|
|
return FALSE;
|
|
|
|
if (IDL_LIST(iter).next)
|
1998-11-25 02:16:49 +03:00
|
|
|
fputs(", ", state->file);
|
|
|
|
}
|
|
|
|
fputs(")", state->file);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* An attribute declaration looks like:
|
|
|
|
*
|
|
|
|
* [ IDL_ATTR_DCL]
|
|
|
|
* - param_type_spec [IDL_TYPE_* or NULL for void]
|
|
|
|
* - simple_declarations [IDL_LIST]
|
|
|
|
* - data [IDL_IDENT]
|
|
|
|
* - next [IDL_LIST or NULL if no more idents]
|
|
|
|
* - data [IDL_IDENT]
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define ATTR_IDENT(tree) (IDL_IDENT(IDL_LIST(IDL_ATTR_DCL(tree).simple_declarations).data))
|
|
|
|
#define ATTR_TYPE_DECL(tree) (IDL_ATTR_DCL(tree).param_type_spec)
|
|
|
|
#define ATTR_TYPE(tree) (IDL_NODE_TYPE(ATTR_TYPE_DECL(tree)))
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
attr_accessor(TreeState *state, gboolean getter)
|
|
|
|
{
|
|
|
|
char *attrname = ATTR_IDENT(state->tree).str;
|
|
|
|
if (getter && (ATTR_TYPE(state->tree) == IDLN_TYPE_BOOLEAN)) {
|
1998-11-25 22:12:50 +03:00
|
|
|
fprintf(state->file, " NS_IMETHOD Is%c%s(PRBool *aIs%c%s);\n",
|
1998-11-25 02:16:49 +03:00
|
|
|
toupper(attrname[0]), attrname + 1,
|
|
|
|
toupper(attrname[0]), attrname + 1);
|
|
|
|
} else {
|
|
|
|
IDL_tree orig = state->tree;
|
|
|
|
fprintf(state->file, " NS_IMETHOD %cet%c%s(",
|
|
|
|
getter ? 'G' : 'S',
|
|
|
|
toupper(attrname[0]), attrname + 1);
|
|
|
|
state->tree = ATTR_TYPE_DECL(state->tree);
|
|
|
|
if (!xpcom_type(state))
|
|
|
|
return FALSE;
|
|
|
|
state->tree = orig;
|
1998-11-25 22:12:50 +03:00
|
|
|
fprintf(state->file, "%s%sa%c%s);\n",
|
1998-11-27 00:03:03 +03:00
|
|
|
(STARRED_TYPE(ATTR_TYPE(orig)) ? "" : " "),
|
1998-11-25 22:12:50 +03:00
|
|
|
getter ? "*" : "",
|
1998-11-25 02:16:49 +03:00
|
|
|
toupper(attrname[0]), attrname + 1);
|
1998-11-24 00:02:31 +03:00
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
attr_dcl(TreeState *state)
|
|
|
|
{
|
1998-11-25 02:16:49 +03:00
|
|
|
gboolean ro = IDL_ATTR_DCL(state->tree).f_readonly;
|
1998-11-24 00:02:31 +03:00
|
|
|
IDL_tree orig = state->tree;
|
1998-11-25 02:16:49 +03:00
|
|
|
fprintf(state->file, "\n /* %sattribute ",
|
|
|
|
ro ? "readonly " : "");
|
1998-11-24 00:02:31 +03:00
|
|
|
state->tree = IDL_ATTR_DCL(state->tree).param_type_spec;
|
1998-11-27 00:03:03 +03:00
|
|
|
if (state->tree && !type(state))
|
1998-11-24 00:02:31 +03:00
|
|
|
return FALSE;
|
1998-11-25 02:16:49 +03:00
|
|
|
fputs(" ", state->file);
|
1998-11-24 00:02:31 +03:00
|
|
|
state->tree = IDL_ATTR_DCL(orig).simple_declarations;
|
|
|
|
if (state->tree && !process_node(state))
|
|
|
|
return FALSE;
|
1998-11-25 02:16:49 +03:00
|
|
|
fputs("; */\n", state->file);
|
|
|
|
|
|
|
|
state->tree = orig;
|
|
|
|
return attr_accessor(state, TRUE) && (ro || attr_accessor(state, FALSE));
|
1998-11-24 00:02:31 +03:00
|
|
|
}
|
|
|
|
|
1998-11-25 07:19:59 +03:00
|
|
|
/*
|
|
|
|
* param generation:
|
|
|
|
* in string foo --> nsString * foo
|
|
|
|
* out string foo --> nsString * &foo;
|
|
|
|
* inout string foo --> nsString * &foo;
|
|
|
|
*/
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
xpcom_param(TreeState *state)
|
|
|
|
{
|
|
|
|
IDL_tree param = state->tree;
|
|
|
|
state->tree = IDL_PARAM_DCL(param).param_type_spec;
|
1998-11-27 00:03:03 +03:00
|
|
|
|
|
|
|
/* in params that are pointers should be const */
|
|
|
|
if (STARRED_TYPE(IDL_NODE_TYPE(state->tree)) &&
|
|
|
|
IDL_PARAM_DCL(param).attr == IDL_PARAM_IN)
|
|
|
|
fputs("const ", state->file);
|
|
|
|
|
1998-11-25 07:19:59 +03:00
|
|
|
if (!xpcom_type(state))
|
|
|
|
return FALSE;
|
1998-11-25 22:12:50 +03:00
|
|
|
fprintf(state->file, "%s%s",
|
1998-11-27 00:03:03 +03:00
|
|
|
STARRED_TYPE(IDL_NODE_TYPE(state->tree)) ? "" : " ",
|
1998-11-25 22:12:50 +03:00
|
|
|
IDL_PARAM_DCL(param).attr == IDL_PARAM_IN ? "" : "*");
|
1998-11-25 07:19:59 +03:00
|
|
|
fprintf(state->file, "%s",
|
|
|
|
IDL_IDENT(IDL_PARAM_DCL(param).simple_declarator).str);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1998-11-24 00:02:31 +03:00
|
|
|
/*
|
|
|
|
* A method is an `operation', therefore a method decl is an `op dcl'.
|
|
|
|
* I blame Elliot.
|
|
|
|
*/
|
|
|
|
static gboolean
|
|
|
|
op_dcl(TreeState *state)
|
|
|
|
{
|
|
|
|
struct _IDL_OP_DCL op = IDL_OP_DCL(state->tree);
|
1998-11-25 07:19:59 +03:00
|
|
|
IDL_tree iter;
|
1998-11-24 00:02:31 +03:00
|
|
|
state->tree = op.op_type_spec;
|
1998-11-25 02:16:49 +03:00
|
|
|
fputs("\n /* ", state->file);
|
1998-11-24 00:02:31 +03:00
|
|
|
if (!type(state))
|
|
|
|
return FALSE;
|
1998-11-25 02:16:49 +03:00
|
|
|
fputs(" ", state->file);
|
1998-11-24 00:02:31 +03:00
|
|
|
state->tree = op.ident;
|
|
|
|
if (state->tree && !process_node(state))
|
|
|
|
return FALSE;
|
|
|
|
state->tree = op.parameter_dcls;
|
|
|
|
if (!param_dcls(state))
|
|
|
|
return FALSE;
|
1998-11-25 02:16:49 +03:00
|
|
|
fputs("; */\n", state->file);
|
1998-11-25 07:19:59 +03:00
|
|
|
|
|
|
|
fprintf(state->file, " NS_IMETHOD %s(", IDL_IDENT(op.ident).str);
|
|
|
|
for (iter = op.parameter_dcls; iter; iter = IDL_LIST(iter).next) {
|
|
|
|
state->tree = IDL_LIST(iter).data;
|
|
|
|
if (!xpcom_param(state))
|
|
|
|
return FALSE;
|
|
|
|
if (IDL_LIST(iter).next)
|
|
|
|
fputs(", ", state->file);
|
|
|
|
}
|
1998-11-25 22:12:50 +03:00
|
|
|
fputs(") = 0;\n", state->file);
|
1998-11-24 00:02:31 +03:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
nodeHandler headerDispatch[] = {
|
1998-11-27 00:03:03 +03:00
|
|
|
pass_1, /* IDLN_NONE */
|
1998-11-24 00:02:31 +03:00
|
|
|
NULL, /* IDLN_ANY */
|
|
|
|
list, /* IDLN_LIST */
|
|
|
|
NULL, /* IDLN_GENTREE */
|
|
|
|
NULL, /* IDLN_INTEGER */
|
|
|
|
NULL, /* IDLN_STRING */
|
|
|
|
NULL, /* IDLN_WIDE_STRING */
|
|
|
|
NULL, /* IDLN_CHAR */
|
|
|
|
NULL, /* IDLN_WIDE_CHAR */
|
|
|
|
NULL, /* IDLN_FIXED */
|
|
|
|
NULL, /* IDLN_FLOAT */
|
|
|
|
NULL, /* IDLN_BOOLEAN */
|
|
|
|
ident, /* IDLN_IDENT */
|
|
|
|
NULL, /* IDLN_TYPE_DCL */
|
|
|
|
NULL, /* IDLN_CONST_DCL */
|
|
|
|
NULL, /* IDLN_EXCEPT_DCL */
|
|
|
|
attr_dcl, /* IDLN_ATTR_DCL */
|
|
|
|
op_dcl, /* IDLN_OP_DCL */
|
|
|
|
param_dcls, /* IDLN_PARAM_DCL */
|
|
|
|
NULL, /* IDLN_FORWARD_DCL */
|
|
|
|
type_integer, /* IDLN_TYPE_INTEGER */
|
|
|
|
type, /* IDLN_TYPE_FLOAT */
|
|
|
|
type, /* IDLN_TYPE_FIXED */
|
|
|
|
type, /* IDLN_TYPE_CHAR */
|
|
|
|
type, /* IDLN_TYPE_WIDE_CHAR */
|
|
|
|
type, /* IDLN_TYPE_STRING */
|
|
|
|
type, /* IDLN_TYPE_WIDE_STRING */
|
|
|
|
type, /* IDLN_TYPE_BOOLEAN */
|
|
|
|
type, /* IDLN_TYPE_OCTET */
|
|
|
|
type, /* IDLN_TYPE_ANY */
|
|
|
|
type, /* IDLN_TYPE_OBJECT */
|
|
|
|
type, /* IDLN_TYPE_ENUM */
|
|
|
|
type, /* IDLN_TYPE_SEQUENCE */
|
|
|
|
type, /* IDLN_TYPE_ARRAY */
|
|
|
|
type, /* IDLN_TYPE_STRUCT */
|
|
|
|
type, /* IDLN_TYPE_UNION */
|
|
|
|
NULL, /* IDLN_MEMBER */
|
|
|
|
NULL, /* IDLN_NATIVE */
|
|
|
|
NULL, /* IDLN_CASE_STMT */
|
|
|
|
interface, /* IDLN_INTERFACE */
|
|
|
|
NULL, /* IDLN_MODULE */
|
|
|
|
NULL, /* IDLN_BINOP */
|
|
|
|
NULL, /* IDLN_UNARYOP */
|
|
|
|
NULL /* IDLN_TYPE_TYPECODE */
|
|
|
|
};
|