|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T n
Length: 2635 (0xa4b)
Types: TextFile
Names: »nodes.h«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦3f75c1919⟧ »EurOpenD3/utils/decomp.tar.Z«
└─⟦510c4d5ee⟧
└─⟦this⟧ »decomp/nodes.h«
/*
* Module: nodes.h
*
* Author: J. Reuter
*
* This module defines the structures and constants used to build
* nodes of basic blocks and structured blocks. These are used
* by the structuring code.
*/
/* basic block node types */
#define N_UNREACH 0
#define N_FLOW 1
#define N_BRANCH 2
#define N_CASE 3
#define N_END 4
#define N_IF 5
/* structuring node types */
#define N_LOOP 6
#define N_ITER 7
#define N_ANDIF 8
#define N_ORIF 9
#define N_SWITCH 10
#define N_GOTO 11
#define N_BREAK 12
#define N_CONTINUE 13
#define N_CASELAB 14
#define N_WHILE 15
#define N_UNTIL 16
#define MAX_TYPES 17
#define MAX_CHILD 2
#define MAX_VAR 4
/*
* Static information describing the node information
*/
struct node_info {
int num_children; /* number of children in tree structure */
char *name; /* symbolic name of node type */
};
/*
* The node structure is constructed to hold the basic blocks.
* It is then munged by the structuring code to hold the program
* heirarchy.
*/
struct node {
int node_type; /* see note types above */
address start_address; /* beginning code address of this block */
address end_address; /* end code address ... */
int num_arcs; /* number of node exit arcs */
address *arcs; /* pointer to array of node exit arcs */
union { /* a scratch area, used many ways */
int scratch;
struct node *pscratch;
} node_un;
int right_sibling; /* right sibling of node in hier. */
int reach;
int child[MAX_CHILD]; /* children of node in hier. */
int varpart[MAX_VAR]; /* variant use fields */
};
#define node_scratch node_un.scratch
#define node_pscratch node_un.pscratch
#define NONE -1 /* empty arc (0 is a legal address) */
#define DEFINED( N ) ( N >= 0 )
/* N_ITER variant parts */
#define V_NEXT 0 /* N_THEN condition for iteration for WHILE or UNTIL */
#define V_FATHER 1 /* father of v */
/* N_WHILE, N_UNTIL variant parts */
#define V_LOOP_PRED 2 /* loop predicate */
/* N_IF, N_THEN parts */
#define V_NEGATE 0 /* TRUE if predicate negated */
#define V_PRED1 1 /* predicate 1 for N_ANDIF, N_ORIF */
#define V_PRED2 2 /* predicate 2 for N_ANDIF, N_ORIF */
#define THEN_ARC 1 /* arc number of true branch */
#define ELSE_ARC 0 /* arc number of false branch */
/* N_CASELAB parts */
#define V_CASESLOT 0 /* branch slot in case instruction */
/* N_CASE parts */
#define V_BASE 0 /* case instruction base operand */
#define V_LIMIT 1 /* case instruction limit operand */
extern int node_count;
extern int node_max;
extern struct node **node_array;
extern struct node_info node_info[MAX_TYPES];
extern struct node *get_node();