source: dev/BasicCompiler_Common/common.h@ 14

Last change on this file since 14 was 14, checked in by dai_9181, 17 years ago

LexicalAnalysisのベース部分を用意。

File size: 14.6 KB
Line 
1//#define _CRT_SECURE_NO_DEPRECATE
2#pragma warning(disable : 4996)
3
4#include <windows.h>
5#include <stdio.h>
6#include <string.h>
7#include <math.h>
8#include <commctrl.h>
9#include <time.h>
10#include <limits.h>
11#include <shlobj.h>
12#include <vector>
13
14#ifdef _AMD64_
15#include "../BasicCompiler64/resource.h"
16#include "../BasicCompiler64/CommandValue.h"
17#include "../BasicCompiler64/FunctionValue.h"
18#define OPCODE_H_PATH "../BasicCompiler64/opcode.h"
19#else
20#include "../BasicCompiler32/resource.h"
21#include "../BasicCompiler32/CommandValue.h"
22#include "../BasicCompiler32/FunctionValue.h"
23#define OPCODE_H_PATH "../BasicCompiler32/opcode.h"
24#endif
25
26#include "../BasicCompiler_Common/BasicFixed.h"
27#include "../BasicCompiler_Common/NonVolatile.h"
28#include "../BasicCompiler_Common/TypeDef.h"
29#include "../BasicCompiler_Common/psapi.h"
30#include "../BasicCompiler_Common/BreakPoint.h"
31#include "../BasicCompiler_Common/LexicalAnalysis.h"
32
33
34
35//バージョン
36#define MAJOR_VER 5
37#define MINOR_VER 00
38#define REVISION_VER 00
39
40#ifdef _AMD64_
41#define VER_INFO "β8 (x64)"
42#else
43#define VER_INFO "β8"
44#endif
45
46#if defined(JPN)
47//日本語
48#include "common_msg_jpn.h"
49#else
50//英語
51#include "common_msg_eng.h"
52#endif
53
54
55#pragma comment(lib, "psapi.lib")
56
57
58#define PTR_SIZE sizeof(LONG_PTR)
59
60#define MAX_LEN 65535
61#define VN_SIZE 512
62#define DIGIT_SIZE 128
63#define MAX_PARMS 64
64#define MAX_ARRAYDIM 16
65#define MAX_HASH 32761
66
67
68#ifdef _AMD64_
69#define PLATFORM 64
70#else
71#define PLATFORM 32
72typedef long LONG_PTR;
73typedef DWORD ULONG_PTR;
74#endif
75
76
77//未定義の定数情報
78#define IMAGE_FILE_MACHINE_AMD64 0x8664
79
80
81
82extern HWND hOwnerEditor;
83extern HANDLE hHeap;
84extern char BasicSystemDir[MAX_PATH];
85extern int cp;
86
87
88
89//////////////////////////////////////////
90// BasicCompiler、ProjectEditor共通の定数
91//////////////////////////////////////////
92
93//サイズ変更枠の太さ
94#define LEVER_THICK 5
95
96#define WM_SHOWERROR WM_USER+70 //エラー表示メッセージ
97
98#define WM_SETCOMPILEVIEW WM_USER+71 //コンパイラウィンドウが表示されたとき
99#define WM_DESTROYCOMPILEVIEW WM_USER+72 //コンパイラウィンドウが破棄されたとき
100
101#define WM_SETDEBUGGERBASE WM_USER+73 //デバッガベースウィンドウが表示されたとき
102#define WM_DESTROYDEBUGGERBASE WM_USER+74 //デバッガベースウィンドウが破棄されたとき
103
104#define WM_SETDEBUGGERVIEW WM_USER+75 //デバッガウィンドウが表示されたとき
105#define WM_DESTROYDEBUGGERVIEW WM_USER+76 //デバッガウィンドウが表示されたとき
106
107///////////////////////////////////////////
108
109
110#define WM_SHOWVARLIST WM_USER+80
111#define WM_VARLIST_CLOSE WM_USER+81 //変数リストの終了メッセージ(破棄のみ、解放なし)
112
113
114
115///////////////////////////////////////////
116// デバッグ コマンド
117
118#define WM_DEBUG_CONTINUE WM_USER+200
119#define WM_STEP_IN WM_USER+201
120#define WM_STEP_OVER WM_USER+202
121#define WM_STEP_CURSOR WM_USER+203
122#define WM_DEBUG_STOP WM_USER+204
123#define WM_DEBUG_PAUSE WM_USER+205
124#define WM_CLOSE_DEBUGGER WM_USER+206
125
126///////////////////////////////////////////
127
128
129
130
131#define FILE_ALIGNMENT 0x1000
132#define MEM_ALIGNMENT 0x1000
133#define EXE_HEADER_SIZE 0x1000
134
135
136//クラス管理用のクラス
137#include "Class.h"
138
139//列挙体管理用のクラス
140#include "Enum.h"
141
142//定数管理用のクラス
143#include "Const.h"
144
145
146struct ERRORINFO{
147 char *FileName;
148 int line;
149};
150struct INCLUDEFILEINFO{
151 char **ppFileNames;
152 int FilesNum;
153 int LineOfFile[MAX_LEN];
154};
155
156//#define情報
157class CDefine{
158 int num;
159 char **ppNames;
160public:
161 CDefine();
162 ~CDefine();
163
164 BOOL add(char *name);
165 BOOL undef(char *name);
166 BOOL check(char *name);
167};
168
169//変数
170#define REF_PARAMETER 1
171#define OBJECT_PARAMETER 2
172struct VARIABLE{
173 char name[255];
174 int type;
175 union{
176 LONG_PTR index;
177 CClass *pobj_c;
178 }u;
179
180 DWORD fRef;
181
182 //定数変数かどうか
183 bool bConst;
184
185 BOOL bArray;
186 int SubScripts[MAX_ARRAYDIM];
187
188 //コンストラクタ用パラメータ
189 char *ConstractParameter;
190
191 /* --- オフセット ---
192
193 ※グローバル変数で初期バッファがない場合は最上位ビットに1がセットされ、
194 初期バッファの有無が識別される。
195 (その後、スケジュール実行により、実際の配置に並び替えられる)*/
196 int offset;
197
198
199 //レキシカルスコープ用
200 int ScopeStartAddress;
201 int ScopeEndAddress;
202 int ScopeLevel;
203 BOOL bLiving;
204
205
206 int source_code_address;
207};
208
209//変数の相対情報
210struct RELATIVE_VAR{
211 DWORD dwKind;
212 LONG_PTR offset;
213 BOOL bOffsetOffset;
214};
215
216//パラメータ
217struct PARAMETER_INFO{
218 char *name;
219 int type;
220 union{
221 LONG_PTR index;
222 CClass *pobj_c;
223 }u;
224
225 BOOL bByVal;
226 BOOL bArray;
227 int SubScripts[MAX_ARRAYDIM];
228};
229
230#define SUBTYPE_SUB 1
231#define SUBTYPE_FUNCTION 2
232#define SUBTYPE_MACRO 3
233struct SUBINFO{
234 DWORD dwType;
235
236 //クラス情報
237 CClass *pobj_ParentClass;
238
239 long id;
240
241 char *name;
242 long address;
243
244 //パラメータ
245 PARAMETER_INFO *pParmInfo;
246 int ParmNum;
247 int SecondParmNum;
248 PARAMETER_INFO *pRealParmInfo;
249 int RealParmNum;
250 int RealSecondParmNum;
251
252 //戻り値
253 int ReturnType;
254 union{
255 LONG_PTR ReturnIndex;
256 CClass *Return_pobj_c;
257 }u;
258
259 DWORD CompileAddress;
260 DWORD EndOpAddr;
261 VARIABLE *pVar;
262 int VarNum;
263
264 BOOL bExport;
265 BOOL bCdecl;
266 BOOL bVirtual;
267 BOOL bUse;
268 BOOL bCompile;
269 BOOL bSystem;
270
271 SUBINFO *pNextData;
272};
273#define DECLARE_DYNAMIC 1
274#define DECLARE_STATIC 2
275struct DECLAREINFO{
276 DWORD dwType;
277
278 char *file;
279 char *name;
280 char *alias;
281 BOOL bCdecl;
282
283 //パラメータ
284 PARAMETER_INFO *pParmInfo;
285 int ParmNum;
286
287 //戻り値
288 int ReturnType;
289 union{
290 LONG_PTR ReturnIndex;
291 CClass *Return_pobj_c;
292 }u;
293
294 union{
295 int LookupAddress;
296 int StaticProc_CodeAddress;
297 };
298
299 BOOL bUse;
300
301 int pos;
302
303 DECLAREINFO *pNextData;
304};
305struct PROCPTRINFO{
306 PARAMETER_INFO *pParmInfo;
307 int ParmNum;
308
309 int ReturnType;
310 union{
311 LONG_PTR ReturnIndex;
312 CClass *Return_pobj_c;
313 }u;
314};
315struct CONSTINFO{
316 char *name;
317 char *StrValue;
318
319 double DblValue;
320 _int64 i64Value;
321 int type;
322 LONG_PTR lpIndex;
323
324 int ParmNum;
325 char **ppParm;
326
327 CONSTINFO *pNextData;
328};
329
330
331#define CODETYPE_SYSTEMPROC 0x0001
332#define CODETYPE_DEBUGPROC 0x0002
333struct LINEINFO{
334 int TopCp;
335 int TopObp;
336 DWORD dwCodeType;
337};
338struct RESOURCEDATAINFO{
339 DWORD dwId;
340 char FileName[MAX_PATH];
341};
342
343
344//////////////////////////////////////////
345// リソース ヘッダ(アイコン、カーソル用)
346typedef struct{
347 WORD idReserved;
348 WORD idType;
349 WORD idCount;
350}ICONDIR,CURSORDIR;
351
352
353/////////////////////////////
354// .curファイルのヘッダ情報
355struct CURSORDIRENTRY{
356 BYTE bWidth;
357 BYTE bHeight;
358 BYTE bColorCount;
359 BYTE bReserved;
360 WORD wXHotspot;
361 WORD wYHotspot;
362 DWORD dwBytesInRes;
363 DWORD dwImageOffset;
364};
365struct CURSORDIRENTRY_RES{
366 WORD wWidth;
367 WORD wHeight;
368 WORD wXHotspot;
369 WORD wYHotspot;
370 DWORD dwBytesInRes;
371 WORD wCursorNum;
372};
373
374
375////////////////////////////
376//.icoファイルのヘッダ情報
377struct ICONDIRENTRY{
378 BYTE bWidth;
379 BYTE bHeight;
380 BYTE bColorCount;
381 BYTE bReserved;
382 WORD wPlanes;
383 WORD wBitCount;
384 DWORD dwBytesInRes;
385 DWORD dwImageOffset;
386};
387struct ICONDIRENTRY_RES{
388 BYTE bWidth;
389 BYTE bHeight;
390 BYTE bColorCount;
391 BYTE bReserved;
392 WORD wPlanes;
393 WORD wBitCount;
394 DWORD dwBytesInRes;
395 WORD wIconNum;
396};
397
398
399
400#include "../BasicCompiler_Common/schedule.h"
401#include "../BasicCompiler_Common/DebugSection.h"
402#include "../BasicCompiler_Common/LexicalScoping.h"
403#include "../BasicCompiler_Common/Variable.h"
404
405
406
407int StaticCalculation(bool enableerror, char *Command,int BaseType,_int64 *pi64data,LONG_PTR *plpIndex,BOOL bDebuggingWatchList=0);
408
409
410//BasicCompiler.cpp
411void HeapDefaultFree(LPVOID lpMem);
412void ts(int i);
413void ts(int i,int i2);
414void ts(char *msg);
415void ts(char *msg,char *title);
416void epi_check();
417void GetRelationalPath(char *path,char *dir);
418void GetFullPath(char *path,char *dir);
419void ShowErrorLine(int LineNum,char *FileName);
420BOOL GetFilePathDialog(HWND hwnd,char *filename,LPSTR Filter,LPSTR Title,BOOL bOpen);
421void MakeMessageText(char *buffer,char *msg,int flag);
422
423//hash.cpp
424int hash_default(char *name);
425CONSTINFO *GetConstHash(char *name);
426DECLAREINFO *GetDeclareHash(char *name);
427SUBINFO *GetSubHash(char *name,BOOL bError=0);
428SUBINFO *GetMethodHash(char *ObjectName,char *MethodName,char *Parameter,BOOL bError=0);
429SUBINFO **GetOverloadObjectSubHash(char *name,CClass *pobj_c, int *pNum);
430SUBINFO **GetOverloadSubHash(char *name,int *pNum);
431
432//Object.cpp
433int GetSizeOfClassMember(CClass *pobj_c,char *pMemberName,int *pMemberNum);
434int GetSizeOfClass(CClass *pobj_c);
435void AddClassName(char *Parameter,int NowLine);
436void CallConstractor(char *VarName,int *SubScripts,TYPEINFO &TypeInfo,char *Parameter);
437void CallDestrouctorsOfScope(void);
438
439//Overload.sbp
440SUBINFO *OverloadSolutionWithStrParam(char *name,SUBINFO **ppsi,int num,char *Parameter,char *ObjectName,TYPEINFO *pReturnTypeInfo);
441SUBINFO *OverloadSolution(char *name,SUBINFO **ppsi,int num,PARAMETER_INFO *ppi,int ParmNum,TYPEINFO *pReturnTypeInfo);
442
443//Debug.cpp
444void Debugger_StepIn(void);
445void Debugger_StepOver(void);
446void Debugger_StepCursor(void);
447void Debugger_Stop(void);
448void Debugger_Pause(void);
449ULONG_PTR rva_to_real(DWORD p);
450SUBINFO *GetSubFromObp(ULONG_PTR pos);
451void ReadOpBuffer();
452void DebugProgram(void);
453
454//VarList.cpp
455void InitVarList(DWORD dwThreadId);
456BOOL CALLBACK DlgDebugger(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
457BOOL CALLBACK DlgVarList(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
458
459//WatchList.cpp
460ULONG_PTR Debugging_GetVarPtr(RELATIVE_VAR *pRelativeVar);
461ULONG_PTR Debugging_GetThisPtrOffset(LONG_PTR obp_Rip);
462int Debugging_GetVarOffset(char *variable,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss);
463
464//MakeExe.cpp
465void StepCompileProgress(void);
466void DeleteConstInfo(CONSTINFO **ppConstHash);
467void DeleteDeclareInfo(void);
468void OutputExe(void);
469int MainThread(DWORD dummy);
470
471//Intermediate_Step1.cpp
472void ChangeReturnCode(char *buffer);
473void DeleteComment(char *buffer);
474void KillReturnCode(char *buffer);
475void CheckParenthesis(char *buffer);
476BOOL CheckParenthesis2(char *buffer);
477void DirectiveCheck(void);
478void NextCommandFormat(char *buffer);
479void SetEscapeSequenceFormat(char *buffer);
480void DefCommandFormat(char *buffer);
481void IfCommandFormat(char *buffer);
482void CheckPareCommand(void);
483
484//Intermediate_Step2.cpp
485void GetConstInfo(void);
486void ChangeCommandToCode(char *buffer);
487
488//preprocessor.cpp
489void DirectiveIfdef(char *buffer);
490char *IncludeFiles(char *base);
491
492//Resource.cpp
493void GetResourceData(char *FileName);
494
495//CommandFormat.cpp
496void ComOpen(char *Parameter,char *buffer,int NowLine);
497void ComClose(char *Parameter,char *buffer);
498void ComField(char *Parameter,char *buffer);
499void ComLine(char *Parameter,char *buffer,int NowLine);
500void ComCircle(char *Parameter,char *buffer,int NowLine);
501void ComPSet(char *Parameter,char *buffer,int NowLine);
502void ComPaint(char *Parameter,char *buffer,int NowLine);
503
504// StrOperation.cpp
505void KillSpaces(char *str1,char *str2);
506void KillStringSpaces(char *str);
507BOOL RemoveStringQuotes(char *str);
508void RemoveStringPare(char *str);
509void RemoveStringBracket(char *str);
510void SetStringQuotes(char *str);
511int FormatString_EscapeSequence(char *buffer);
512void SlideString(char *str,int slide);
513void SlideBuffer(char *buffer,int length,int slide);
514_int8 IsCommandDelimitation(char c);
515BOOL IsBlank(char c);
516int GetOneParameter(char *Parameter,int pos,char *retAns);
517int JumpOneParameter(char *Parameter,int i);
518int GetStringInQuotation(char *buffer,char *ReadBuffer);
519int GetStringInPare(char *buffer,char *ReadBuffer);
520int GetStringInPare_RemovePare(char *buffer,char *ReadBuffer);
521int GetStringInBracket(char *buffer,char *ReadBuffer);
522int JumpStringInPare(char *buffer,int pos);
523int JumpStringInBracket(char *buffer,int pos);
524int GetCpFromLine(int LineNum);
525BOOL GetLineNum(int pos,int *pLine,char *FileName);
526char GetEndXXXCommand(char es);
527void GetDefaultNameFromES(char es,char *name);
528void GetCalcName(int idCalc,char *name);
529BOOL IsFile(char *path);
530BOOL GetFolder(HWND hWnd,char *folder,char *OpenFolderTitle);
531
532//calculation.cpp
533bool IsNumberTopChar(char *buffer);
534bool IsNumberChar(char c);
535BOOL IsNumCalcMark(char *Command,int p);
536BOOL IsNumCalcMark_Back(char *Command,int p);
537BOOL IsStrCalcMark(char c);
538BOOL IsExponent(char *Command,int p);
539int GetLiteralIndex(_int64 i64data);
540int NeutralizationType(int type1,LONG_PTR index1,int type2,LONG_PTR index2);
541DWORD GetLiteralValue(char *value,_int64 *pi64,int BaseType);
542BOOL GetConstCalcBuffer(char *name,char *Parameter,char *pCalcBuffer);
543DWORD GetConstValue(char *name,double *dbl,char *buffer,LONG_PTR *plpIndex);
544BOOL IsStringObjectType(TYPEINFO *pTypeInfo);
545BOOL IsStringSubsituation(CClass *pobj_c);
546int IsStrCalculation(char *Command);
547BYTE GetCalcId(char *Command,int *pi);
548BOOL GetNumOpeElements(char *Command,int *pnum,
549 char *values[255],long calc[255],long stack[255]);
550
551//NumOpe_GetType.cpp
552int AutoBigCast(int BaseType,int CalcType);
553BOOL CheckCalcType(int idCalc,int *type,int sp);
554int NumOpe_GetType(char *Command,TYPEINFO *pBaseType,LONG_PTR *plpIndex);
555
556//Subroutine.cpp
557int GetCallProcName(char *buffer,char *name);
558int GetProc(char *name,void **ppInfo);
559void GetObjectName(char *name,char *ObjectName,int *pRefType);
560int GetReturnTypeOfProc(int idProc,void *pInfo,char *name,char *Parameter,LONG_PTR *plpRetIndex);
561BOOL GetReturnTypeOfPropertyMethod(char *variable,char *RightSide,TYPEINFO *pRetTypeInfo);
562BOOL CompareParameter(PARAMETER_INFO *ppi1,int pi_num1,PARAMETER_INFO *ppi2,int pi_num2);
563SUBINFO *AddSubData(char *buffer,int NowLine,BOOL bVirtual,CClass *pobj_c,BOOL bStatic=0);
564void GetSubInfo(void);
565void DeleteSubInfo(SUBINFO **ppSubHash,char **ppMacroNames,int MacroNum);
566void DeleteDeclareInfo(void);
567int AddProcPtrInfo(char *buffer,DWORD dwProcType);
568void DeleteProcPtrInfo(void);
569
570//LoopRefCheck.cpp
571class CLoopRefCheck{
572 char **names;
573 int num;
574 void init();
575public:
576 CLoopRefCheck();
577 ~CLoopRefCheck();
578 void add(char *lpszInheritsClass);
579 void del(char *lpszInheritsClass);
580 BOOL check(char *lpszInheritsClass);
581};
582extern CLoopRefCheck *pobj_LoopRefCheck;
583
584//error.cpp
585void SetError(int ErrorNum,char *KeyWord,int pos);
586void CompileMessage(char *buffer);
587void CheckDifferentType(int VarType,LONG_PTR lpVarIndex,int CalcType,LONG_PTR lpCalcIndex,char *pszFuncName,int ParmNum);
588
589//Compile.cpp
590void DebugVariable(void);
591void Compile(void);
592
593//gc.cpp
594void InitGCVariables(void);
595void PerformedGcVarSchedule(void);
596
597
598
599#ifdef _DEBUG
600/*Debug*/
601/*
602#define HeapAlloc CheckHeapAlloc
603#define HeapReAlloc CheckHeapReAlloc
604LPVOID CheckHeapAlloc(HANDLE hHeap,DWORD dwFlags,DWORD dwBytes);
605LPVOID CheckHeapReAlloc(HANDLE hHeap,DWORD dwFlags,LPVOID lpMem,DWORD dwBytes);
606*/
607#endif
Note: See TracBrowser for help on using the repository browser.