source: dev/trunk/abdev/BasicCompiler32/Opcode.h@ 253

Last change on this file since 253 was 253, checked in by dai_9181, 17 years ago
File size: 9.0 KB
Line 
1#pragma once
2
3#include <Type.h>
4#include <Procedure.h>
5#include "MachineFixed.h"
6
7
8//変数の種類
9#define NON_VAR 0
10#define VAR_GLOBAL 1 // Global Variable
11#define VAR_REFGLOBAL 2 // Global Refference Variable
12#define VAR_LOCAL 3 // Local Variable
13#define VAR_REFLOCAL 4 // Local Refference Variable
14#define VAR_DIRECTMEM 5 // Direct memory
15
16
17extern int cp;
18
19#define breakpoint compiler.codeGenerator.PutOld( (char)0xCC );
20
21
22//ラベルアドレス
23struct LABEL{
24 char *pName;
25 int line;
26 DWORD address;
27};
28
29//プロシージャの種類
30#define PROC_DEFAULT 1 //ユーザー定義関数
31#define PROC_DLL 2 //DLL関数
32#define PROC_BUILTIN 3 //コンパイラ埋め込み型
33#define PROC_PTR 4 //関数ポインタ
34
35//プロシージャ
36struct PROCEDURE{
37 char name[255];
38 int address;
39 int types[MAX_PARMS];
40 _int8 ByVal[MAX_PARMS];
41 BOOL ReturnType;
42};
43
44//With情報
45struct WITHINFO{
46 char **ppName;
47 int *pWithCp;
48 int num;
49};
50
51
52//RSrcSection.cpp
53char *GetRSrcSectionBuffer(int *pLen);
54
55//Compile.cpp
56void ChangeOpcode(char *Command);
57void GetGlobalDataForDll(void);
58DWORD CompileBuffer(char Return_Sequence,WORD Return_Command);
59
60//Compile_Calc.cpp
61void ChangeTypeToDouble_ToFpuReg(int OldType);
62void ChangeTypeToDouble(int OldType);
63void ChangeTypeToSingle(int OldType);
64void ChangeTypeToInt64(int OldType);
65void ChangeTypeToLong(int OldType);
66void ChangeTypeToInteger(int OldType);
67void ChangeTypeToByte(int OldType);
68void SetVariableFromEax(int VarType,int CalcType,RELATIVE_VAR *pRelativeVar);
69void OpcodeCalc( const char *Command );
70
71//NumOpe.cpp
72void PushReturnValue(int type);
73bool TermOpe(
74 const char *term,
75 const Type &baseType,
76 Type &resultType,
77 bool &isLiteral,
78 BOOL *pbUseHeap,
79 bool isWantObject = false,
80 bool *pIsClassName = NULL,
81 bool isProcedureCallOnly = false );
82bool NumOpe( int reg,
83 const char *expression,
84 const Type &baseType,
85 Type &resultType,
86 BOOL *pbUseHeap = NULL );
87bool NumOpe( const char *Command,
88 const Type &baseType,
89 Type &resultType,
90 BOOL *pbUseHeap = NULL );
91
92//NumOpe_Arithmetic.cpp
93void GetStackData_ToRegister(int *type,int sp);
94BOOL CalcTwoTerm_Arithmetic(int idCalc,int *type,LONG_PTR *index_stack,int *pStackPointer);
95BOOL Calc_Mod(int *type,int *pStackPointer);
96BOOL Calc_Divide(int *type,int *pStackPointer,int BaseType);
97BOOL Calc_IntDivide(int *type,LONG_PTR *index_stack,int *pStackPointer);
98BOOL Calc_MinusMark(int *type,int sp);
99BOOL Calc_Power(int *type,int *pStackPointer);
100BOOL Calc_Cast(int *type,LONG_PTR *index_stack,int *pStackPointer);
101BOOL Calc_SHL(int *type,int *pStackPointer);
102BOOL Calc_SHR(int *type,int *pStackPointer);
103
104//NumOpe_Logical.cpp
105BOOL Calc_Xor(int *type,LONG_PTR *index_stack,int *pStackPointer);
106BOOL Calc_Or(int *type,LONG_PTR *index_stack,int *pStackPointer);
107BOOL Calc_And(int *type,LONG_PTR *index_stack,int *pStackPointer);
108BOOL Calc_Not(int *type,int sp);
109
110//NumOpe_Relation.cpp
111BOOL Calc_Relation_PE(int *type_stack,LONG_PTR *index_stack,int *pStackPointer);
112BOOL Calc_Relation_QE(int *type_stack,LONG_PTR *index_stack,int *pStackPointer);
113BOOL Calc_Relation_P(int *type_stack,LONG_PTR *index_stack,int *pStackPointer);
114BOOL Calc_Relation_Q(int *type_stack,LONG_PTR *index_stack,int *pStackPointer);
115BOOL Calc_Relation_NotEqual(int *type,int *pStackPointer);
116BOOL Calc_Relation_Equal(int *type,int *pStackPointer);
117
118//NumOpe_TypeOperation.cpp
119void ExtendStackTo64(int type);
120void ChangeTypeToWhole(int OldType,int NewType);
121
122//Compile_Set_Var.cpp
123BOOL IsUse_ecx(RELATIVE_VAR *pRelativeVar);
124void SetStructVariable( const Type &varType, const Type &calcType, BOOL bUseHeap);
125void SetRealVariable(int VarType, int CalcType, RELATIVE_VAR *pRelativeVar);
126void SetWholeVariable( int varSize,int calcType, RELATIVE_VAR *pRelative );
127
128void SetDoubleVariable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset);
129void SetSingleVariable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset);
130void SetInt64Variable(int type,RELATIVE_VAR *pRelative);
131void SetDWordVariable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset);
132void SetLongVariable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset);
133void Set16Variable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset);
134void Set8Variable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset);
135void SetBooleanVariable(int type,RELATIVE_VAR *pRelative);
136void ExtendTypeTo64(int type);
137void ExtendTypeTo32(int type,int reg);
138void ExtendTypeTo16(int type,int reg);
139
140//increment.cpp
141void IncDec(int idCalc, const char *lpszLeft, const char *lpszRight);
142
143//calc2.cpp
144#define EXP_TYPE_NUMBER 1
145#define EXP_TYPE_EAX 2
146#define EXP_TYPE_FPU 3
147#define EXP_TYPE_VAR 4
148int NumOpEx(char *Command,double *pDbl,DWORD *pdwType,RELATIVE_VAR *pRelativeVar);
149
150//SetVar.cpp
151BOOL SetVariable(DWORD dwVarType,RELATIVE_VAR *pVarRelativeVar,
152 DWORD dwExpType,DWORD dwType,void *data);
153
154//Compile_Calc_PushVar.cpp
155void SetReg_RealVariable(int type,RELATIVE_VAR *pRelativeVar);
156void SetReg_WholeVariable(int type,RELATIVE_VAR *pRelativeVar,int reg, bool is64Head = false);
157void PushLongVariable(RELATIVE_VAR *pRelativeVar);
158
159//Compile_Object.cpp
160void Operator_New( const CClass &classObj, const char *objectSizeStr, const char *parameter, const Type &baseType );
161void OpcodeDelete(const char *Parameter, bool isSweeping);
162
163//Compile_Var.cpp
164void SetRelativeOffset( RELATIVE_VAR &relativeVar );
165bool _member_offset(bool isErrorEnabled, bool isWriteAccess, const CClass &objClass, const char *member, RELATIVE_VAR *pRelativeVar, Type &resultType, BOOL bPrivateAccess);
166void SetThisPtrToReg(int reg);
167bool GetVarOffset(bool isErrorEnabled,bool isWriteAccess,const char *NameBuffer,RELATIVE_VAR *pRelativeVar,Type &resultType, Subscripts *pResultSubscripts = NULL );
168bool SetInitGlobalData(int offset,const Type &type,const Subscripts &subscripts,const char *InitBuf);
169#define DIMFLAG_INITDEBUGVAR 1
170#define DIMFLAG_NONCALL_CONSTRACTOR 2
171#define DIMFLAG_STATIC 4
172#define DIMFLAG_CONST 8
173void dim( char *VarName, const Subscripts &subscripts, Type &type, const char *InitBuf,const char *ConstractParameter,DWORD dwFlags);
174void SetVarPtrToEax(RELATIVE_VAR *pRelativeVar);
175void SetVarPtrToReg(int reg,RELATIVE_VAR *pRelativeVar);
176bool Compile_AddGlobalRootsForGc();
177
178//ParamImpl.cpp
179class ParamImpl{
180 char *Parms[255];
181 vector<Type> types;
182 int ParmsNum;
183
184 Type returnType;
185
186 //一時オブジェクト管理用
187 bool useTempObject;
188 bool useTempParameters[255];
189 int nCountOfTempObjects;
190
191public:
192 ParamImpl(const char *buffer);
193 ParamImpl(const Parameters &params);
194 ~ParamImpl();
195 void SetReturnType( const Type &returnType );
196
197private:
198 bool EvaluateOverloadScore( int level, const Parameters &targetParms, const Type &targetResultType );
199public:
200 const UserProc *_OverloadSolution( const char *name, std::vector<const UserProc *> &subs, bool isEnabledReturnType = false );
201 const UserProc *OverloadSolution( const char *name, std::vector<const UserProc *> &subs, bool isEnabledReturnType = false );
202
203 void ApplyDefaultParameters( const Parameters &params );
204 bool ErrorCheck( const string &procName, const Parameters &params, int SecondParmNum = -1 );
205 void MacroParameterSupport( const Parameters &params );
206 void SetStructParameter( const Type &baseType, const char *expression );
207 int SetParameter( const string &procName, const Parameters &params, int SecondParmNum = -1 );
208
209 //一時オブジェクトパラメータの生成と破棄
210 int NewTempParameters( const string &procName, const Parameters &params, int SecondParmNum = -1 );
211 void DeleteTempParameters();
212};
213
214//Compile_CallProc.cpp
215#define PROCFLAG_NEW 1
216bool Opcode_CallProcPtr( const char *variable, const char *lpszParms,ProcPointer *pProcPointer);
217bool Opcode_CallProc(const char *Parameter,const UserProc *pUserProc,DWORD dwFlags,const char *ObjectName,int RefType);
218bool Opcode_CallDllProc( const char *lpszParms, const DllProc *pDllProc );
219
220//Compile_ProcOp.cpp
221void CompileLocal();
222
223//Compile_Func.cpp
224int GetFunctionFromName(char *FuncName);
225bool Opcode_CallFunc( const char *Parameter, const int FuncNum, Type &resultType, bool isCallOn = true );
226
227//OperatorProc.cpp
228void FreeTempObject(int reg,const CClass *pobj_c);
229int CallOperatorProc(int idCalc, const Type &baseType, int *type_stack,LONG_PTR *index_stack,BOOL *bUseHeap,int &sp);
230void CallCastOperatorProc(Type &calcType,BOOL bCalcUseHeap,const Type &toType);
231void CallIndexerGetterProc(const CClass *pobj_Class,char *ObjectName,char *Parameter,Type &resultType);
232
233//Compile_Statement.cpp
234void OpcodeOthers( const char *Command );
235void OpcodeIf(char *Parameter);
236void OpcodeGoto(char *Parameter);
237void OpcodeWhile(char *Parameter);
238void OpcodeFor(char *Parameter);
239void OpcodeDo(char *Parameter);
240void OpcodeContinue(void);
241void OpcodeExitSub(void);
242void OpcodeSelect(const char *lpszParms);
243void OpcodeCase(char *Parameter);
244void OpcodeGosub(char *Parameter);
245void OpcodeReturn(char *Parameter);
246void OpcodeSetPtrData(char *Parameter,int type);
247
248
249
250
251//op32_main.cpp
252BOOL IsSafeReg(int reg);
Note: See TracBrowser for help on using the repository browser.