/*
* Copyright (c) 1998, 1999 The University of Utah and
* the Computer Systems Laboratory at the University of Utah (CSL).
*
* This file is part of Flick, the Flexible IDL Compiler Kit.
*
* Flick is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Flick is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Flick; see the file COPYING. If not, write to
* the Free Software Foundation, 59 Temple Place #330, Boston, MA 02111, USA.
*/
#include <mom/c/libcast.h>
#include <mom/c/libpres_c.h>
#include <mom/c/pfe.hh>
/*
* The method fills the `pg_state::prim_collections' array with descriptions
* of this presentation generator's primitive and built-in presented types.
*
* Different presentation generators may use these primitive types in slightly
* different ways; it is up to the specific PG to decide how to associate AOI
* types with various presented types. But since most presentations have
* very similar notions about their sets of primitive types (e.g., similar
* notions for `short' and `long' and `unsigned' integers), it is useful for
* the PG library to provide a facility for defining these common, ``basic''
* presented types.
*/
void pg_state::make_prim_collections()
{
p_type_collection *ptc;
p_scope_node *psn;
p_type_node *ptn;
pres_c_mapping direct_map = pres_c_new_mapping(PRES_C_MAPPING_DIRECT);
int i;
/*
* It is problematic to make an integer `signed' just because it is not
* unsigned. (`signed x' is not always equivalent to `x'.) The
* reverse is also true, but is not so problematic in practice. What
* we really need are flag bits in the AOI integer like those we have
* for AOI characters.
*
* Similarly, `long int' is not the same as `int'.
*/
const cast_primitive_modifier int_signed = 0; /* CAST_MOD_SIGNED */
const cast_primitive_modifier int_long = 0; /* CAST_MOD_LONG */
/*****/
/* Initialize `prim_collections'. */
for (i = 0; i < PRIM_COLLECTION_MAX; ++i)
prim_collections[i] = 0;
/*********************************************************************/
/*
* Create the ``definition'' presentations of the types, i.e., the
* basic presentations of the types.
*/
/* Define the presented type corresponding to `void'. */
ptc = new p_type_collection;
ptc->set_name("void");
psn = new p_scope_node;
psn->set_name("default");
ptc->add_scope(psn);
ptn = new p_type_node;
ptn->set_name("definition");
ptn->set_format("%s");
ptn->set_type(cast_new_type(CAST_TYPE_VOID));
ptn->set_mapping(direct_map);
ptc->add_type("default", ptn);
prim_collections[PRIM_COLLECTION_VOID] = ptc;
/* Define the presented type corresponding to `boolean'. */
ptc = new p_type_collection;
ptc->set_name("boolean");
psn = new p_scope_node;
psn->set_name("default");
ptc->add_scope(psn);
ptn = new p_type_node;
ptn->set_name("definition");
ptn->set_format("%s");
ptn->set_type(cast_new_prim_type(CAST_PRIM_CHAR, CAST_MOD_UNSIGNED));
ptn->set_mapping(direct_map);
ptc->add_type("default", ptn);
prim_collections[PRIM_COLLECTION_BOOLEAN] = ptc;
/* Define the presented type corresponding to `char'. */
ptc = new p_type_collection;
ptc->set_name("char");
psn = new p_scope_node;
psn->set_name("default");
ptc->add_scope(psn);
ptn = new p_type_node;
ptn->set_name("definition");
ptn->set_format("%s");
ptn->set_type(cast_new_prim_type(CAST_PRIM_CHAR, 0));
ptn->set_mapping(direct_map);
ptc->add_type("default", ptn);
prim_collections[PRIM_COLLECTION_CHAR] = ptc;
/* Define the presented type corresponding to `signed char'. */
ptc = new p_type_collection;
ptc->set_name("schar");
psn = new p_scope_node;
psn->set_name("default");
ptc->add_scope(psn);
ptn = new p_type_node;
ptn->set_name("definition");
ptn->set_format("%s");
ptn->set_type(cast_new_prim_type(CAST_PRIM_CHAR, CAST_MOD_SIGNED));
ptn->set_mapping(direct_map);
ptc->add_type("default", ptn);
prim_collections[PRIM_COLLECTION_SCHAR] = ptc;
/* Define the presented type corresponding to `unsigned char'. */
ptc = new p_type_collection;
ptc->set_name("uchar");
psn = new p_scope_node;
psn->set_name("default");
ptc->add_scope(psn);
ptn = new p_type_node;
ptn->set_name("definition");
ptn->set_format("%s");
ptn->set_type(cast_new_prim_type(CAST_PRIM_CHAR, CAST_MOD_UNSIGNED));
ptn->set_mapping(direct_map);
ptc->add_type("default", ptn);
prim_collections[PRIM_COLLECTION_UCHAR] = ptc;
/* Define the presented type corresponding to `octet'. */
ptc = new p_type_collection;
ptc->set_name("octet");
psn = new p_scope_node;
psn->set_name("default");
ptc->add_scope(psn);
ptn = new p_type_node;
ptn->set_name("definition");
ptn->set_format("%s");
ptn->set_type(cast_new_prim_type(CAST_PRIM_CHAR, CAST_MOD_UNSIGNED));
ptn->set_mapping(direct_map);
ptc->add_type("default", ptn);
prim_collections[PRIM_COLLECTION_OCTET] = ptc;
/* Define the presented type corresponding to `short'. */
ptc = new p_type_collection;
ptc->set_name("short");
psn = new p_scope_node;
psn->set_name("default");
ptc->add_scope(psn);
ptn = new p_type_node;
ptn->set_name("definition");
ptn->set_format("%s");
ptn->set_type(cast_new_prim_type(CAST_PRIM_INT,
(int_signed | CAST_MOD_SHORT)));
ptn->set_mapping(direct_map);
ptc->add_type("default", ptn);
prim_collections[PRIM_COLLECTION_SHORT] = ptc;
/* Define the presented type corresponding to `unsigned short'. */
ptc = new p_type_collection;
ptc->set_name("ushort");
psn = new p_scope_node;
psn->set_name("default");
ptc->add_scope(psn);
ptn = new p_type_node;
ptn->set_name("definition");
ptn->set_format("%s");
ptn->set_type(cast_new_prim_type(CAST_PRIM_INT,
(CAST_MOD_UNSIGNED | CAST_MOD_SHORT))
);
ptn->set_mapping(direct_map);
ptc->add_type("default", ptn);
prim_collections[PRIM_COLLECTION_USHORT] = ptc;
/* Define the presented type corresponding to `long'. */
ptc = new p_type_collection;
ptc->set_name("long");
psn = new p_scope_node;
psn->set_name("default");
ptc->add_scope(psn);
ptn = new p_type_node;
ptn->set_name("definition");
ptn->set_format("%s");
ptn->set_type(cast_new_prim_type(CAST_PRIM_INT,
(int_signed | int_long)));
ptn->set_mapping(direct_map);
ptc->add_type("default", ptn);
prim_collections[PRIM_COLLECTION_LONG] = ptc;
/* Define the presented type corresponding to `unsigned long'. */
ptc = new p_type_collection;
ptc->set_name("ulong");
psn = new p_scope_node;
psn->set_name("default");
ptc->add_scope(psn);
ptn = new p_type_node;
ptn->set_name("definition");
ptn->set_format("%s");
ptn->set_type(cast_new_prim_type(CAST_PRIM_INT,
(CAST_MOD_UNSIGNED | int_long)));
ptn->set_mapping(direct_map);
ptc->add_type("default", ptn);
prim_collections[PRIM_COLLECTION_ULONG] = ptc;
/* Define the presented type corresponding to `long long'. */
ptc = new p_type_collection;
ptc->set_name("longlong");
psn = new p_scope_node;
psn->set_name("default");
ptc->add_scope(psn);
ptn = new p_type_node;
ptn->set_name("definition");
ptn->set_format("%s");
ptn->set_type(cast_new_prim_type(CAST_PRIM_INT,
(int_signed | CAST_MOD_LONG_LONG))
);
ptn->set_mapping(direct_map);
ptc->add_type("default", ptn);
prim_collections[PRIM_COLLECTION_LONGLONG] = ptc;
/* Define the presented type corresponding to `unsigned long long'. */
ptc = new p_type_collection;
ptc->set_name("ulonglong");
psn = new p_scope_node;
psn->set_name("default");
ptc->add_scope(psn);
ptn = new p_type_node;
ptn->set_name("definition");
ptn->set_format("%s");
ptn->set_type(cast_new_prim_type(CAST_PRIM_INT,
(CAST_MOD_UNSIGNED
| CAST_MOD_LONG_LONG))
);
ptn->set_mapping(direct_map);
ptc->add_type("default", ptn);
prim_collections[PRIM_COLLECTION_ULONGLONG] = ptc;
/* Define the presented type corresponding to `float'. */
ptc = new p_type_collection;
ptc->set_name("float");
psn = new p_scope_node;
psn->set_name("default");
ptc->add_scope(psn);
ptn = new p_type_node;
ptn->set_name("definition");
ptn->set_format("%s");
ptn->set_type(cast_new_prim_type(CAST_PRIM_FLOAT, 0));
ptn->set_mapping(direct_map);
ptc->add_type("default", ptn);
prim_collections[PRIM_COLLECTION_FLOAT] = ptc;
/* Define the presented type corresponding to `double'. */
ptc = new p_type_collection;
ptc->set_name("double");
psn = new p_scope_node;
psn->set_name("default");
ptc->add_scope(psn);
ptn = new p_type_node;
ptn->set_name("definition");
ptn->set_format("%s");
ptn->set_type(cast_new_prim_type(CAST_PRIM_DOUBLE, 0));
ptn->set_mapping(direct_map);
ptc->add_type("default", ptn);
prim_collections[PRIM_COLLECTION_DOUBLE] = ptc;
/*
* XXX --- No standard presentations for these ``primitive'' types:
*
* PRIM_COLLECTION_ENUM
* PRIM_COLLECTION_STRING
* PRIM_COLLECTION_TYPE_TAG
* PRIM_COLLECTION_TYPED_ANY
*/
/*********************************************************************/
/*
* At this point, some presentation generators create additional
* presentations of the typed listed above (e.g., ``out_pointer''
* versions of the types). But we don't need to do so.
*/
}
/* End of file. */
syntax highlighted by Code2HTML, v. 0.9.1