source: dev/branches/egtra/ab5.0/abdev/BasicCompiler_Common/common.h@ 806

Last change on this file since 806 was 806, checked in by イグトランス (egtra), 13 years ago

コンパイラのstdafx.h, .cppを32/64ビットで共通化。Windows SDKに含まれるライブラリ・ヘッダの除去。VC++ 2010 Express with WDKのATL環境で_SECURE_ATLがエラーを起こす問題の修正。4996警告の抑制pragmaを削除。ほか。

File size: 11.4 KB
RevLine 
[206]1#pragma once
2
[5]3
[806]4#include <psapi.h>
5
[165]6#include <option.h>
7
[4]8#ifdef _AMD64_
[485]9#include "../compiler_x64/resource.h"
10#include "../compiler_x64/CommandValue.h"
11#define OPCODE_H_PATH "../compiler_x64/opcode.h"
[4]12#else
[484]13#include "../compiler_x86/resource.h"
14#include "../compiler_x86/CommandValue.h"
15#define OPCODE_H_PATH "../compiler_x86/opcode.h"
[4]16#endif
17
18#include "../BasicCompiler_Common/NonVolatile.h"
19
20
21
22#if defined(JPN)
23//日本語
24#include "common_msg_jpn.h"
25#else
26//英語
27#include "common_msg_eng.h"
28#endif
29
30
[123]31#define OBJECT_HEAD_SIZE PTR_SIZE*4
[4]32
33#define MAX_LEN 65535
34#define DIGIT_SIZE 128
35#define MAX_PARMS 64
36#define MAX_ARRAYDIM 16
37#define MAX_HASH 32761
38
39
40#ifdef _AMD64_
[288]41 #define PLATFORM 64
[4]42#else
[806]43 #define PLATFORM 32
[4]44#endif
45
46
47//未定義の定数情報
[107]48#ifndef IMAGE_FILE_MACHINE_AMD64
49 #define IMAGE_FILE_MACHINE_AMD64 0x8664
50#endif
[4]51
[107]52#ifdef _AMD64_
53 #ifndef IMAGE_SIZEOF_NT_OPTIONAL64_HEADER
54 #define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240
55 #endif
56#else
57 #ifndef IMAGE_SIZEOF_NT_OPTIONAL32_HEADER
58 #define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224
59 #endif
60#endif
[4]61
62
63extern HWND hOwnerEditor;
64extern HANDLE hHeap;
65extern int cp;
[69]66extern int typeOfPtrChar;
[97]67extern int typeOfPtrUChar;
[4]68
69
70
71//////////////////////////////////////////
72// BasicCompiler、ProjectEditor共通の定数
73//////////////////////////////////////////
74
75//サイズ変更枠の太さ
76#define LEVER_THICK 5
77
78#define WM_SHOWERROR WM_USER+70 //エラー表示メッセージ
79
80#define WM_SETCOMPILEVIEW WM_USER+71 //コンパイラウィンドウが表示されたとき
81#define WM_DESTROYCOMPILEVIEW WM_USER+72 //コンパイラウィンドウが破棄されたとき
82
83#define WM_SETDEBUGGERBASE WM_USER+73 //デバッガベースウィンドウが表示されたとき
84#define WM_DESTROYDEBUGGERBASE WM_USER+74 //デバッガベースウィンドウが破棄されたとき
85
86#define WM_SETDEBUGGERVIEW WM_USER+75 //デバッガウィンドウが表示されたとき
87#define WM_DESTROYDEBUGGERVIEW WM_USER+76 //デバッガウィンドウが表示されたとき
88
89///////////////////////////////////////////
90
91
92#define WM_SHOWVARLIST WM_USER+80
93#define WM_VARLIST_CLOSE WM_USER+81 //変数リストの終了メッセージ(破棄のみ、解放なし)
94
95
96
97///////////////////////////////////////////
98// デバッグ コマンド
99
100#define WM_DEBUG_CONTINUE WM_USER+200
101#define WM_STEP_IN WM_USER+201
102#define WM_STEP_OVER WM_USER+202
103#define WM_STEP_CURSOR WM_USER+203
104#define WM_DEBUG_STOP WM_USER+204
105#define WM_DEBUG_PAUSE WM_USER+205
106#define WM_CLOSE_DEBUGGER WM_USER+206
107
108///////////////////////////////////////////
109
110
111
112
113#define FILE_ALIGNMENT 0x1000
114#define MEM_ALIGNMENT 0x1000
115#define EXE_HEADER_SIZE 0x1000
116
117
118
119struct ERRORINFO{
120 char *FileName;
121 int line;
122};
123
124//変数の相対情報
125struct RELATIVE_VAR{
126 DWORD dwKind;
127 LONG_PTR offset;
128 BOOL bOffsetOffset;
129};
130
131
132struct RESOURCEDATAINFO{
133 DWORD dwId;
134 char FileName[MAX_PATH];
135};
136
137
138//////////////////////////////////////////
139// リソース ヘッダ(アイコン、カーソル用)
140typedef struct{
141 WORD idReserved;
142 WORD idType;
143 WORD idCount;
144}ICONDIR,CURSORDIR;
145
146
147/////////////////////////////
148// .curファイルのヘッダ情報
149struct CURSORDIRENTRY{
150 BYTE bWidth;
151 BYTE bHeight;
152 BYTE bColorCount;
153 BYTE bReserved;
154 WORD wXHotspot;
155 WORD wYHotspot;
156 DWORD dwBytesInRes;
157 DWORD dwImageOffset;
158};
159struct CURSORDIRENTRY_RES{
160 WORD wWidth;
161 WORD wHeight;
162 WORD wXHotspot;
163 WORD wYHotspot;
164 DWORD dwBytesInRes;
165 WORD wCursorNum;
166};
167
168
169////////////////////////////
170//.icoファイルのヘッダ情報
171struct ICONDIRENTRY{
172 BYTE bWidth;
173 BYTE bHeight;
174 BYTE bColorCount;
175 BYTE bReserved;
176 WORD wPlanes;
177 WORD wBitCount;
178 DWORD dwBytesInRes;
179 DWORD dwImageOffset;
180};
181struct ICONDIRENTRY_RES{
182 BYTE bWidth;
183 BYTE bHeight;
184 BYTE bColorCount;
185 BYTE bReserved;
186 WORD wPlanes;
187 WORD wBitCount;
188 DWORD dwBytesInRes;
189 WORD wIconNum;
190};
191
192
193
[34]194#include "../BasicCompiler_Common/PESchedule.h"
[400]195#include "../BasicCompiler_Common/StrOperation.h"
[75]196#include "../BasicCompiler_Common/VariableOpe.h"
[4]197
198
199
[75]200bool StaticCalculation(bool enableerror, const char *Command,int BaseType,_int64 *pi64data,Type &resultType,BOOL bDebuggingWatchList=0, bool *pIsMemoryAccessError=NULL);
[4]201
202
203//BasicCompiler.cpp
204void HeapDefaultFree(LPVOID lpMem);
[393]205void ts(int i = 0);
[4]206void ts(int i,int i2);
[322]207void ts(const char *msg);
208void ts(const char *msg,const char *title);
[477]209void ts(const std::string msg);
[4]210void epi_check();
211void GetRelationalPath(char *path,char *dir);
[523]212void GetFullPath( char *path, const std::string &baseDirPath );
[279]213void ShowErrorLine(int LineNum,const char *FileName);
[4]214BOOL GetFilePathDialog(HWND hwnd,char *filename,LPSTR Filter,LPSTR Title,BOOL bOpen);
215void MakeMessageText(char *buffer,char *msg,int flag);
216
217//hash.cpp
[209]218DllProc *GetDeclareHash(const char *name);
[206]219void GetOverloadSubHash( const char *lpszName, std::vector<const UserProc *> &subs );
220const UserProc *GetSubHash(const char *name,BOOL bError=0);
221const UserProc *GetMethodHash(const char *ObjectName,const char *MethodName,const char *Parameter,BOOL bError=0);
222const UserProc *GetClassMethod( const char *className, const char *methodName );
[4]223
224//Object.cpp
[206]225void CallConstructor( const char *ObjectName,const Subscripts &subscripts, const Type &type,const char *Parameter);
[75]226bool Operator_New( const char *expression, const Type &baseType, Type &resultType );
[4]227
228//Overload.sbp
[206]229class Parameters;
230const UserProc *OverloadSolutionWithStrParam(
[50]231 const char *name,
[206]232 std::vector<const UserProc *> &subs,
[50]233 const char *Parameter,
[75]234 const char *ObjectName);
[206]235const UserProc *OverloadSolution(
[50]236 const char *name,
[206]237 std::vector<const UserProc *> &subs,
[75]238 const Parameters &params,
[424]239 const Type &returnType,
240 const Type &leftType );
[4]241
242//Debug.cpp
243void Debugger_StepIn(void);
244void Debugger_StepOver(void);
245void Debugger_StepCursor(void);
246void Debugger_Stop(void);
247void Debugger_Pause(void);
248ULONG_PTR rva_to_real(DWORD p);
[206]249UserProc *GetSubFromObp(ULONG_PTR pos);
[4]250void ReadOpBuffer();
251void DebugProgram(void);
252
253//VarList.cpp
254void InitVarList(DWORD dwThreadId);
[764]255INT_PTR CALLBACK DlgDebugger(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
256INT_PTR CALLBACK DlgVarList(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
[4]257
258//WatchList.cpp
259ULONG_PTR Debugging_GetVarPtr(RELATIVE_VAR *pRelativeVar);
260ULONG_PTR Debugging_GetThisPtrOffset(LONG_PTR obp_Rip);
[206]261int Debugging_GetVarOffset( char *variable,RELATIVE_VAR *pRelativeVar, Type &resultType, Subscripts *pResultSubscripts = NULL );
[4]262
263//MakeExe.cpp
264void StepCompileProgress(void);
[350]265void MakeMiddleCode( char *buffer );
[322]266void AddSourceCode(const char *buffer);
[605]267void Build();
[467]268void MainThread(void *dummy);
[4]269
270//Intermediate_Step1.cpp
271void ChangeReturnCode(char *buffer);
272void DeleteComment(char *buffer);
273void KillReturnCode(char *buffer);
274void CheckParenthesis(char *buffer);
275BOOL CheckParenthesis2(char *buffer);
276void DirectiveCheck(void);
277void NextCommandFormat(char *buffer);
278void SetEscapeSequenceFormat(char *buffer);
279void DefCommandFormat(char *buffer);
280void IfCommandFormat(char *buffer);
281void CheckPareCommand(void);
282
283//Intermediate_Step2.cpp
284void ChangeCommandToCode(char *buffer);
285
286//preprocessor.cpp
[15]287char *OpenBasicFile(char *FileName);
[4]288
289//CommandFormat.cpp
[75]290void ComOpen(char *Parameter,char *buffer,int nowLine);
[4]291void ComClose(char *Parameter,char *buffer);
292void ComField(char *Parameter,char *buffer);
[75]293void ComLine(char *Parameter,char *buffer,int nowLine);
294void ComCircle(char *Parameter,char *buffer,int nowLine);
295void ComPSet(char *Parameter,char *buffer,int nowLine);
296void ComPaint(char *Parameter,char *buffer,int nowLine);
[4]297
298// StrOperation.cpp
299void KillSpaces(char *str1,char *str2);
300void KillStringSpaces(char *str);
301BOOL RemoveStringQuotes(char *str);
[387]302bool RemoveStringQuotes( std::string &str );
[4]303void RemoveStringPare(char *str);
304void RemoveStringBracket(char *str);
305void SetStringQuotes(char *str);
306int FormatString_EscapeSequence(char *buffer);
307void SlideString(char *str,int slide);
308void SlideBuffer(char *buffer,int length,int slide);
[313]309int GetSourceCodeIndexFromLine( const char *source, int LineNum );
[4]310char GetEndXXXCommand(char es);
311void GetDefaultNameFromES(char es,char *name);
[206]312const std::string &FormatEscapeSequenceStringToDefaultString( const std::string &source );
[279]313bool IsFileExist(const char *path);
[31]314BOOL ShortPathToLongPath(char ShortPath[MAX_PATH],char *LongPath);
[4]315BOOL GetFolder(HWND hWnd,char *folder,char *OpenFolderTitle);
[31]316void ShortPathToLongPath(const char *ShortPath,char *LongPath);
[4]317
318//calculation.cpp
[15]319bool IsNumberTopChar(const char *buffer);
320bool IsNumberChar(const char c);
321BOOL IsNumCalcMark(const char *Command,int p);
322BOOL IsNumCalcMark_Back(const char *Command,int p);
323BOOL IsStrCalcMark(const char c);
324BOOL IsExponent(const char *Command,int p);
[4]325int GetLiteralIndex(_int64 i64data);
326int NeutralizationType(int type1,LONG_PTR index1,int type2,LONG_PTR index2);
[254]327DWORD GetLiteralValue(char *value,_int64 *pi64,int BaseType, bool isNotifyError = true );
328int IsStrCalculation(const char *Command);
[15]329BYTE GetCalcId(const char *Command,int *pi);
330BOOL GetNumOpeElements(const char *Command,int *pnum,
[4]331 char *values[255],long calc[255],long stack[255]);
332
[75]333//NumOpe_GetType.cpp
[4]334int AutoBigCast(int BaseType,int CalcType);
335BOOL CheckCalcType(int idCalc,int *type,int sp);
[415]336bool GetTermType( const char *term, const Type &baseType, Type &resultType, bool &isLiteral, bool *pIsClassName = NULL, bool *pIsVariable = NULL );
337bool GetTermType( const char *term, Type &resultType );
338bool GetTermTypeOnlyVariable( const char *term, Type &resultType );
[254]339bool NumOpe_GetType( const char *expression, const Type &baseType, Type &resultType, bool *pIsLiteralCalculation = NULL );
[4]340
341//Subroutine.cpp
[699]342int GetCallProcName(const char *buffer,char *name);
[4]343int GetProc(char *name,void **ppInfo);
[290]344void SplitObjectName(const char *name,char *ObjectName, ReferenceKind &referenceFind );
[702]345bool CallProc( int kind, const void *pProc, const char *fullCallName, const char *lpszParms, const Type &baseType, Type &resultType, bool isCallOn = true, int dwCallProcFlags = 0 );
[75]346bool CallPropertyMethod( const char *variable, const char *rightSide, Type &resultType);
347bool GetReturnTypeOfPropertyMethod( const char *variable, const char *rightSide, Type &resultType );
[292]348bool GetReturnTypeOfIndexerGetterProc( const Type &classType, Type &resultType );
[523]349int AddProcPtrInfo( const std::string &typeExpression, int nowLine );
[94]350bool IsNeedProcCompile();
[316]351void CompileLocal();
[4]352
[76]353//OldStatement.cpp
354void Opcode_Input(const char *Parameter);
355void Opcode_Print(const char *Parameter,BOOL bWrite);
356
[4]357//error.cpp
[75]358bool CheckDifferentType( const Type &varType,const Type &calcType,const char *pszFuncName,const int ParmNum);
[4]359
360//Compile.cpp
[17]361void GetIdentifierToken( char *token, const char *source, int &pos );
[296]362void GetCommandToken( char *token, const char *source, int &pos );
[381]363void GetCustomToken( char *token, const char *source, int &pos, char delimitation, bool isEscapeSequence );
[424]364void SplitGenericClassInstance( const char *fullName, char *className, Jenga::Common::Strings &typeParameters, bool isDefiningClass = false, Jenga::Common::Strings *pTypeParameterBaseClassNames = NULL );
[16]365int JumpStatement(const char *source, int &pos);
[605]366void MakeExe();
[4]367
[91]368//Diagnose.cpp
369void Diagnose();
370
[4]371//gc.cpp
372void InitGCVariables(void);
373
374
375
376#ifdef _DEBUG
377/*Debug*/
378/*
379#define HeapAlloc CheckHeapAlloc
380#define HeapReAlloc CheckHeapReAlloc
381LPVOID CheckHeapAlloc(HANDLE hHeap,DWORD dwFlags,DWORD dwBytes);
382LPVOID CheckHeapReAlloc(HANDLE hHeap,DWORD dwFlags,LPVOID lpMem,DWORD dwBytes);
383*/
384#endif
Note: See TracBrowser for help on using the repository browser.