-typedef union type_or_id * type_or_id_p;
-INLINE symconst_kind get_SymConst_kind (ir_node *node);
-INLINE void set_SymConst_kind (ir_node *node, symconst_kind num);
-/* Only to access SymConst of kind type_tag or size. Else assertion: */
-INLINE type *get_SymConst_type (ir_node *node);
-INLINE void set_SymConst_type (ir_node *node, type *tp);
-/* Only to access SymConst of kind linkage_ptr_info. Else assertion: */
-INLINE ident *get_SymConst_ptrinfo (ir_node *node);
-INLINE void set_SymConst_ptrinfo (ir_node *node, ident *ptrinfo);
-/* Sets both: type and ptrinfo. Needed to treat the node independent of
- its semantics. Does a memcpy for the memory tori points to. */
-INLINE type_or_id_p get_SymConst_type_or_id (ir_node *node);
-INLINE void set_SymConst_type_or_id (ir_node *node, type_or_id_p tori);
-
-INLINE ir_node *get_Sel_mem (ir_node *node);
-INLINE void set_Sel_mem (ir_node *node, ir_node *mem);
-INLINE ir_node *get_Sel_ptr (ir_node *node); /* ptr to the object to select from */
-INLINE void set_Sel_ptr (ir_node *node, ir_node *ptr);
-INLINE ir_node **get_Sel_index_arr (ir_node *node);
-INLINE int get_Sel_n_indexs (ir_node *node);
-INLINE ir_node *get_Sel_index (ir_node *node, int pos);
-INLINE void set_Sel_index (ir_node *node, int pos, ir_node *index);
-INLINE entity *get_Sel_entity (ir_node *node); /* entity to select */
-INLINE void set_Sel_entity (ir_node *node, entity *ent);
-
-/* @@@ ajacs specific node -- not supported */
-type *get_InstOf_ent (ir_node *node);
-void set_InstOf_ent (ir_node *node, type *ent);
-ir_node *get_InstOf_obj (ir_node *node);
-void set_InstOf_obj (ir_node *node, ir_node *obj);
-ir_node *get_InstOf_store (ir_node *node);
-void set_InstOf_store (ir_node *node, ir_node *obj);
-
-INLINE ir_node *get_Call_mem (ir_node *node);
-INLINE void set_Call_mem (ir_node *node, ir_node *mem);
-INLINE ir_node *get_Call_ptr (ir_node *node);
-INLINE void set_Call_ptr (ir_node *node, ir_node *ptr);
-INLINE ir_node **get_Call_param_arr (ir_node *node);
-INLINE int get_Call_n_params (ir_node *node);
-INLINE ir_node *get_Call_param (ir_node *node, int pos);
-INLINE void set_Call_param (ir_node *node, int pos, ir_node *param);
-INLINE type *get_Call_type (ir_node *node);
-INLINE void set_Call_type (ir_node *node, type *tp);
-INLINE int get_Call_arity (ir_node *node);
-
-/* Set, get and remove the callee-analysis. */
-int get_Call_n_callees(ir_node * node);
-entity * get_Call_callee(ir_node * node, int pos);
-void set_Call_callee_arr(ir_node * node, int n, entity ** arr);
-void remove_Call_callee_arr(ir_node * node);
-
-ir_node * get_CallBegin_ptr (ir_node *node);
-void set_CallBegin_ptr (ir_node *node, ir_node *ptr);
-ir_graph *get_CallBegin_irg (ir_node *node);
-ir_node *get_CallBegin_call (ir_node *node);
-void set_CallBegin_call (ir_node *node, ir_node *call);
+
+/** Returns non-zero if s symconst kind has a type attribute */
+#define SYMCONST_HAS_TYPE(kind) ((kind) <= symconst_type_align)
+
+/** Returns non-zero if s symconst kind has an ident attribute */
+#define SYMCONST_HAS_ID(kind) ((kind) == symconst_addr_name)
+
+/** Returns non-zero if s symconst kind has an entity attribute */
+#define SYMCONST_HAS_ENT(kind) ((kind) == symconst_addr_ent || (kind) == symconst_ofs_ent)
+
+/** Returns non-zero if s symconst kind has an enum_const attribute */
+#define SYMCONST_HAS_ENUM(kind) ((kind) == symconst_enum_const)
+
+/** SymConst attribute.
+ *
+ * This union contains the symbolic information represented by the node.
+ */
+typedef union symconst_symbol {
+ ir_type *type_p; /**< the type of a symconst */
+ ident *ident_p; /**< the ident of a symconst */
+ ir_entity *entity_p; /**< the entity of a symconst */
+ ir_enum_const *enum_p; /**< the enumeration constant of a symconst */
+} symconst_symbol;
+
+/** Get the kind of the SymConst. */
+symconst_kind get_SymConst_kind(const ir_node *node);
+/** Set the kind of the SymConst. */
+void set_SymConst_kind(ir_node *node, symconst_kind num);
+
+/** Only to access SymConst of kind type_tag or size. Else assertion: */
+ir_type *get_SymConst_type(ir_node *node);
+void set_SymConst_type(ir_node *node, ir_type *tp);
+
+/** Only to access SymConst of kind addr_name. Else assertion: */
+ident *get_SymConst_name(const ir_node *node);
+void set_SymConst_name(ir_node *node, ident *name);
+
+/** Only to access SymConst of kind addr_ent. Else assertion: */
+ir_entity *get_SymConst_entity(const ir_node *node);
+void set_SymConst_entity(ir_node *node, ir_entity *ent);
+
+/** Only to access SymConst of kind symconst_enum_const. Else assertion: */
+ir_enum_const *get_SymConst_enum(const ir_node *node);
+void set_SymConst_enum(ir_node *node, ir_enum_const *ec);
+
+/** Sets both: type and ptrinfo. Needed to treat the node independent of
+ its semantics. Does a memcpy for the memory sym points to. */
+/* write 'union': firmjni then does not create a method... */
+union symconst_symbol get_SymConst_symbol(const ir_node *node);
+void set_SymConst_symbol(ir_node *node,
+ union symconst_symbol sym);
+
+/** Access the type of the value represented by the SymConst.
+ *
+ * Example: primitive type int for SymConst size. */
+ir_type *get_SymConst_value_type(ir_node *node);
+void set_SymConst_value_type(ir_node *node, ir_type *tp);
+
+ir_node *get_Sel_mem(ir_node *node);
+void set_Sel_mem(ir_node *node, ir_node *mem);
+ir_node *get_Sel_ptr(ir_node *node); /* ptr to the object to select from */
+void set_Sel_ptr(ir_node *node, ir_node *ptr);
+ir_node **get_Sel_index_arr(ir_node *node);
+int get_Sel_n_indexs(ir_node *node);
+ir_node *get_Sel_index(ir_node *node, int pos);
+void set_Sel_index(ir_node *node, int pos, ir_node *index);
+ir_entity *get_Sel_entity(ir_node *node); /* entity to select */
+void set_Sel_entity (ir_node *node, ir_entity *ent);
+
+/**
+ * Projection numbers for result of Call node: use for Proj nodes!
+ */
+typedef enum {
+ pn_Call_M_regular = 0, /**< The memory result. */
+ pn_Call_T_result = 2, /**< The tuple containing all (0, 1, 2, ...) results */
+ pn_Call_P_value_res_base = 4,/**< A pointer to the memory region containing copied results
+ passed by value (for compound result types). */
+ pn_Call_X_except = 1, /**< The control flow result branching to the exception handler */
+ pn_Call_M_except = 3, /**< The memory result in case the called method terminated with
+ an exception */
+ pn_Call_max = 5 /**< number of projections from a Call */
+} pn_Call; /* Projection numbers for Call. */
+#define pn_Call_M pn_Call_M_regular
+
+ir_node *get_Call_mem(ir_node *node);
+void set_Call_mem(ir_node *node, ir_node *mem);
+ir_node *get_Call_ptr(ir_node *node);
+void set_Call_ptr(ir_node *node, ir_node *ptr);
+ir_node **get_Call_param_arr(ir_node *node);
+/** Gets the number of parameters of a call. */
+int get_Call_n_params(ir_node *node);
+/** Gets the call parameter at position pos. */
+ir_node *get_Call_param(ir_node *node, int pos);
+/** Sets the call parameter at position pos. */
+void set_Call_param(ir_node *node, int pos, ir_node *param);
+/** Gets the type of a call. */
+ir_type *get_Call_type(ir_node *node);
+/** Sets the type of a call. */
+void set_Call_type(ir_node *node, ir_type *tp);
+/** Gets the arity of a call. Identical to get_Call_n_params(). */
+int get_Call_arity(ir_node *node);
+
+/** Set, get and remove the callee information for a Call node.
+ *
+ * The callee information lists all method entities that can be called
+ * from this node. If the address expression can not be analyzed fully,
+ * e.g., as entities can be called that are not in the compilation unit,
+ * the array contains the unknown_entity. The array contains only entities
+ * with peculiarity_existent, but with all kinds of visibility. The entities
+ * not necessarily contain an irg.
+ *
+ * The array is only accessible if callee information is valid. See flag
+ * in graph.
+ *
+ * The memory allocated for the array is managed automatically, i.e., it must
+ * not be freed if the Call node is removed from the graph.
+ *
+ * @param node A Call node.
+ */
+int Call_has_callees(ir_node *node);
+int get_Call_n_callees(ir_node *node);
+ir_entity *get_Call_callee(ir_node *node, int pos);
+
+/** Set the full callee array.
+ *
+ * The passed array is copied. Assumes current_ir_graph set properly! */
+void set_Call_callee_arr(ir_node *node, const int n, ir_entity **arr);
+void remove_Call_callee_arr(ir_node *node);
+
+ir_node *get_CallBegin_ptr(ir_node *node);
+void set_CallBegin_ptr(ir_node *node, ir_node *ptr);
+ir_node *get_CallBegin_call(ir_node *node);
+void set_CallBegin_call(ir_node *node, ir_node *call);