123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- #pragma once
- /*$Log: locident.h,v $
- * Revision 1.6 94/02/22 15:20:23 cifuente
- * Code generation is done.
- *
- * Revision 1.5 93/12/10 09:38:20 cifuente
- * New high-level types
- *
- * Revision 1.4 93/11/10 17:30:51 cifuente
- * Procedure header, locals
- *
- * Revision 1.3 93/11/08 12:06:35 cifuente
- * du1 analysis finished. Instantiates procedure arguments for user
- * declared procedures.
- *
- * Revision 1.2 93/10/25 11:01:00 cifuente
- * New SYNTHETIC instructions for d/u analysis
- *
- * Revision 1.1 93/10/11 11:47:39 cifuente
- * Initial revision
- *
- * File: locIdent.h
- * Purpose: High-level local identifier definitions
- * Date: October 1993
- */
- /* Type definition */
- typedef struct {
- Int csym; /* # symbols used */
- Int alloc; /* # symbols allocated */
- Int *idx; /* Array of integer indexes */
- } IDX_ARRAY;
- /* Type definitions used in the decompiled program */
- typedef enum {
- TYPE_UNKNOWN = 0, /* unknown so far */
- TYPE_BYTE_SIGN, /* signed byte (8 bits) */
- TYPE_BYTE_UNSIGN, /* unsigned byte */
- TYPE_WORD_SIGN, /* signed word (16 bits) */
- TYPE_WORD_UNSIGN, /* unsigned word (16 bits) */
- TYPE_LONG_SIGN, /* signed long (32 bits) */
- TYPE_LONG_UNSIGN, /* unsigned long (32 bits) */
- TYPE_RECORD, /* record structure */
- TYPE_PTR, /* pointer (32 bit ptr) */
- TYPE_STR, /* string */
- TYPE_CONST, /* constant (any type) */
- TYPE_FLOAT, /* floating point */
- TYPE_DOUBLE, /* double precision float */
- } hlType;
- static char *hlTypes[13] = {"", "char", "unsigned char", "int", "unsigned int",
- "long", "unsigned long", "record", "int *", "char *",
- "", "float", "double"};
- typedef enum {
- STK_FRAME, /* For stack vars */
- REG_FRAME, /* For register variables */
- GLB_FRAME, /* For globals */
- } frameType;
- /* Enumeration to determine whether pIcode points to the high or low part
- * of a long number */
- typedef enum {
- HIGH_FIRST, /* High value is first */
- LOW_FIRST, /* Low value is first */
- } hlFirst;
- /* LOCAL_ID */
- typedef struct {
- hlType type; /* Probable type */
- boolT illegal;/* Boolean: not a valid field any more */
- IDX_ARRAY idx; /* Index into icode array (REG_FRAME only) */
- frameType loc; /* Frame location */
- boolT hasMacro;/* Identifier requires a macro */
- char macro[10];/* Macro for this identifier */
- char name[20];/* Identifier's name */
- union { /* Different types of identifiers */
- byte regi; /* For TYPE_BYTE(WORD)_(UN)SIGN registers */
- struct { /* For TYPE_BYTE(WORD)_(UN)SIGN on the stack */
- byte regOff; /* register offset (if any) */
- Int off; /* offset from BP */
- } bwId;
- struct _bwGlb { /* For TYPE_BYTE(WORD)_(UN)SIGN globals */
- int16 seg; /* segment value */
- int16 off; /* offset */
- byte regi; /* optional indexed register */
- } bwGlb;
- struct _longId{ /* For TYPE_LONG_(UN)SIGN registers */
- byte h; /* high register */
- byte l; /* low register */
- } longId;
- struct _longStkId { /* For TYPE_LONG_(UN)SIGN on the stack */
- Int offH; /* high offset from BP */
- Int offL; /* low offset from BP */
- } longStkId;
- struct { /* For TYPE_LONG_(UN)SIGN globals */
- int16 seg; /* segment value */
- int16 offH; /* offset high */
- int16 offL; /* offset low */
- byte regi; /* optional indexed register */
- } longGlb;
- struct { /* For TYPE_LONG_(UN)SIGN constants */
- dword h; /* high word */
- dword l; /* low word */
- } longKte;
- } id;
- } ID;
- typedef struct {
- Int csym; /* No. of symbols in the table */
- Int alloc; /* No. of symbols allocated */
- ID *id; /* Identifier */
- } LOCAL_ID;
|