diff options
Diffstat (limited to 'MultiSource/Applications/hbd/decomp.h')
-rw-r--r-- | MultiSource/Applications/hbd/decomp.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/MultiSource/Applications/hbd/decomp.h b/MultiSource/Applications/hbd/decomp.h new file mode 100644 index 00000000..aa5c01c9 --- /dev/null +++ b/MultiSource/Applications/hbd/decomp.h @@ -0,0 +1,85 @@ +/* decomp.h */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#ifndef DECOMP_H +#define DECOMP_H + +#include "general.h" + +/* These all need to be global for various reasons */ +extern int ch; +extern char actions[]; +extern int (*actiontable[])(Classfile *c); +extern unsigned char *inbuff; +extern int bufflength; +extern unsigned currpc; + +/* Various macros to read the bytecodes and keep track of + where we are in the code */ +#define JDNEXT8S() (i8)(currpc++,bufflength--,*inbuff++) +#define JDNEXT8U() (u8)(currpc++,bufflength--,*inbuff++) +#define JDNEXT16S() (i16)(currpc+=2,bufflength-=2,inbuff+=2, \ + (((u16)*(inbuff-2))<<8)+((u16)*(inbuff-1))) +#define JDNEXT16U() (u16)(currpc+=2,bufflength-=2,inbuff+=2, \ + (((u16)*(inbuff-2))<<8)+((u16)*(inbuff-1))) +#define JDNEXT32S() (i32)(currpc+=4,bufflength-=4,inbuff+=4, \ + (((u32)*(inbuff-4))<<24)+(((u32)*(inbuff-3))<<16) \ + +(((u32)*(inbuff-2))<<8)+((u32)*(inbuff-1))) +#define JDNEXT32U() (u32)(currpc+=4,bufflength-=4,inbuff+=4, \ + (((u32)*(inbuff-4))<<24)+(((u32)*(inbuff-3))<<16) \ + +(((u32)*(inbuff-2))<<8)+((u32)*(inbuff-1))) +//#define JDLAST(num) (*(inbuff-(num)-1)) +#define JDLAST8S() (i8)(*(inbuff-1)) +#define JDLAST8U() (u8)(*(inbuff-1)) +#define JDPEEK8S() (i8)(*inbuff) +#define JDPEEK8U() (u8)(*inbuff) + +/* These are all the prototypes for the actions that are used + by the decompiler */ +int pushimp(Classfile *c); +int pushimm(Classfile *c); +int pushconst(Classfile *c); +int pushlocal(Classfile *c); +int storelocal(Classfile *c); +int pushbinop(Classfile *c); +int pushunop(Classfile *c); +int finishconditional(Classfile *c); +int doget(Classfile *c); +int doput(Classfile *c); +int doreturn(Classfile *c); +int invokefunc(Classfile *c); +int doif1(Classfile *c); +int dodup(Classfile *c); +int doarraylength(Classfile *c); +int doarrayget(Classfile *c); +int iinclocal(Classfile *c); +int docheckcast(Classfile *c); +int doarrayput(Classfile *c); +int anewarray(Classfile *c); +int multianewarray(Classfile *c); +int dopop(Classfile *c); +int docmp(Classfile *c); +int doif2(Classfile *c); +int doluswitch(Classfile *c); +int dodup_x1(Classfile *c); +int doinstanceof(Classfile *c); +int dotableswitch(Classfile *c); + +/* These are the globals which contain the + various stacks used by the decompiler. */ +extern Exp *stack[]; +extern Exp **stkptr; +extern Exp *donestack[]; +extern Exp **donestkptr; +extern int lastaction; +extern int cond_pcend; +extern Exp *cond_e1; +extern Exp *cond_e1; +extern Exp **cond_donestkptr; + +#endif |