source: dev/BasicCompiler_Common/common.h@ 77

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

デフォルトパラメータに対応。

File size: 13.9 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#include <string>
14#include <fstream>
15
16//boost libraries
17#include <boost/foreach.hpp>
18
19#define foreach BOOST_FOREACH
20
21using namespace std;
22
23#ifdef _AMD64_
24#include "../BasicCompiler64/resource.h"
25#include "../BasicCompiler64/CommandValue.h"
26#include "../BasicCompiler64/FunctionValue.h"
27#define OPCODE_H_PATH "../BasicCompiler64/opcode.h"
28#else
29#include "../BasicCompiler32/resource.h"
30#include "../BasicCompiler32/CommandValue.h"
31#include "../BasicCompiler32/FunctionValue.h"
32#define OPCODE_H_PATH "../BasicCompiler32/opcode.h"
33#endif
34
35#include "../BasicCompiler_Common/BasicFixed.h"
36#include "../BasicCompiler_Common/NonVolatile.h"
37#include "../BasicCompiler_Common/TypeDef.h"
38#include "../BasicCompiler_Common/psapi.h"
39#include "../BasicCompiler_Common/BreakPoint.h"
40#include "../BasicCompiler_Common/LexicalScoping.h"
41
42
43
44//バージョン
45#define MAJOR_VER 5
46#define MINOR_VER 00
47#define REVISION_VER 00
48
49#ifdef _AMD64_
50#define VER_INFO "β16 (x64)"
51#else
52#define VER_INFO "β16"
53#endif
54
55#if defined(JPN)
56//日本語
57#include "common_msg_jpn.h"
58#else
59//英語
60#include "common_msg_eng.h"
61#endif
62
63
64#pragma comment(lib, "psapi.lib")
65
66
67#define PTR_SIZE sizeof(LONG_PTR)
68
69#define MAX_LEN 65535
70#define VN_SIZE 512
71#define DIGIT_SIZE 128
72#define MAX_PARMS 64
73#define MAX_ARRAYDIM 16
74#define MAX_HASH 32761
75
76
77#ifdef _AMD64_
78#define PLATFORM 64
79#else
80#define PLATFORM 32
81typedef long LONG_PTR;
82typedef DWORD ULONG_PTR;
83#endif
84
85
86//未定義の定数情報
87#define IMAGE_FILE_MACHINE_AMD64 0x8664
88
89
90
91extern HWND hOwnerEditor;
92extern HANDLE hHeap;
93extern char BasicSystemDir[MAX_PATH];
94extern int cp;
95extern bool isUnicode;
96extern int typeOfPtrChar;
97
98
99
100//////////////////////////////////////////
101// BasicCompiler、ProjectEditor共通の定数
102//////////////////////////////////////////
103
104//サイズ変更枠の太さ
105#define LEVER_THICK 5
106
107#define WM_SHOWERROR WM_USER+70 //エラー表示メッセージ
108
109#define WM_SETCOMPILEVIEW WM_USER+71 //コンパイラウィンドウが表示されたとき
110#define WM_DESTROYCOMPILEVIEW WM_USER+72 //コンパイラウィンドウが破棄されたとき
111
112#define WM_SETDEBUGGERBASE WM_USER+73 //デバッガベースウィンドウが表示されたとき
113#define WM_DESTROYDEBUGGERBASE WM_USER+74 //デバッガベースウィンドウが破棄されたとき
114
115#define WM_SETDEBUGGERVIEW WM_USER+75 //デバッガウィンドウが表示されたとき
116#define WM_DESTROYDEBUGGERVIEW WM_USER+76 //デバッガウィンドウが表示されたとき
117
118///////////////////////////////////////////
119
120
121#define WM_SHOWVARLIST WM_USER+80
122#define WM_VARLIST_CLOSE WM_USER+81 //変数リストの終了メッセージ(破棄のみ、解放なし)
123
124
125
126///////////////////////////////////////////
127// デバッグ コマンド
128
129#define WM_DEBUG_CONTINUE WM_USER+200
130#define WM_STEP_IN WM_USER+201
131#define WM_STEP_OVER WM_USER+202
132#define WM_STEP_CURSOR WM_USER+203
133#define WM_DEBUG_STOP WM_USER+204
134#define WM_DEBUG_PAUSE WM_USER+205
135#define WM_CLOSE_DEBUGGER WM_USER+206
136
137///////////////////////////////////////////
138
139
140
141
142#define FILE_ALIGNMENT 0x1000
143#define MEM_ALIGNMENT 0x1000
144#define EXE_HEADER_SIZE 0x1000
145
146
147// クラス管理用のクラス
148#include "Class.h"
149
150// 列挙体管理用のクラス
151#include "Enum.h"
152
153// 定数管理用のクラス
154#include "Const.h"
155
156// 変数管理用のクラス
157#include "Variable.h"
158
159// パラメータ管理用のクラス
160#include "Parameter.h"
161
162// プロシージャ管理用のクラス
163#include "Procedure.h"
164
165
166
167struct ERRORINFO{
168 char *FileName;
169 int line;
170};
171struct INCLUDEFILEINFO{
172 char **ppFileNames;
173 int FilesNum;
174 int LineOfFile[MAX_LEN];
175};
176
177//変数の相対情報
178struct RELATIVE_VAR{
179 DWORD dwKind;
180 LONG_PTR offset;
181 BOOL bOffsetOffset;
182};
183
184struct CONSTINFO{
185 char *name;
186 char *StrValue;
187
188 double DblValue;
189 _int64 i64Value;
190 int type;
191 LONG_PTR lpIndex;
192
193 int ParmNum;
194 char **ppParm;
195
196 CONSTINFO *pNextData;
197};
198
199
200#define CODETYPE_SYSTEMPROC 0x0001
201#define CODETYPE_DEBUGPROC 0x0002
202struct LINEINFO{
203 int TopCp;
204 int TopObp;
205 DWORD dwCodeType;
206};
207struct RESOURCEDATAINFO{
208 DWORD dwId;
209 char FileName[MAX_PATH];
210};
211
212
213//////////////////////////////////////////
214// リソース ヘッダ(アイコン、カーソル用)
215typedef struct{
216 WORD idReserved;
217 WORD idType;
218 WORD idCount;
219}ICONDIR,CURSORDIR;
220
221
222/////////////////////////////
223// .curファイルのヘッダ情報
224struct CURSORDIRENTRY{
225 BYTE bWidth;
226 BYTE bHeight;
227 BYTE bColorCount;
228 BYTE bReserved;
229 WORD wXHotspot;
230 WORD wYHotspot;
231 DWORD dwBytesInRes;
232 DWORD dwImageOffset;
233};
234struct CURSORDIRENTRY_RES{
235 WORD wWidth;
236 WORD wHeight;
237 WORD wXHotspot;
238 WORD wYHotspot;
239 DWORD dwBytesInRes;
240 WORD wCursorNum;
241};
242
243
244////////////////////////////
245//.icoファイルのヘッダ情報
246struct ICONDIRENTRY{
247 BYTE bWidth;
248 BYTE bHeight;
249 BYTE bColorCount;
250 BYTE bReserved;
251 WORD wPlanes;
252 WORD wBitCount;
253 DWORD dwBytesInRes;
254 DWORD dwImageOffset;
255};
256struct ICONDIRENTRY_RES{
257 BYTE bWidth;
258 BYTE bHeight;
259 BYTE bColorCount;
260 BYTE bReserved;
261 WORD wPlanes;
262 WORD wBitCount;
263 DWORD dwBytesInRes;
264 WORD wIconNum;
265};
266
267
268
269#include "../BasicCompiler_Common/PESchedule.h"
270#include "../BasicCompiler_Common/DebugSection.h"
271#include "../BasicCompiler_Common/VariableOpe.h"
272#include "../BasicCompiler_Common/Exception.h"
273
274
275
276bool StaticCalculation(bool enableerror, const char *Command,int BaseType,_int64 *pi64data,Type &resultType,BOOL bDebuggingWatchList=0, bool *pIsMemoryAccessError=NULL);
277
278
279//BasicCompiler.cpp
280void HeapDefaultFree(LPVOID lpMem);
281void ts(int i);
282void ts(int i,int i2);
283void ts(char *msg);
284void ts(char *msg,char *title);
285void epi_check();
286void GetRelationalPath(char *path,char *dir);
287void GetFullPath(char *path,char *dir);
288void ShowErrorLine(int LineNum,char *FileName);
289BOOL GetFilePathDialog(HWND hwnd,char *filename,LPSTR Filter,LPSTR Title,BOOL bOpen);
290void MakeMessageText(char *buffer,char *msg,int flag);
291
292//hash.cpp
293int hash_default(const char *name);
294CONSTINFO *GetConstHash(char *name);
295DllProc *GetDeclareHash(char *name);
296UserProc *GetSubHash(const char *name,BOOL bError=0);
297UserProc *GetMethodHash(const char *ObjectName,const char *MethodName,const char *Parameter,BOOL bError=0);
298void GetOverloadSubHash( const char *lpszName, std::vector<UserProc *> &subs );
299
300//Object.cpp
301void CallConstructor( const char *ObjectName,const int *SubScripts, const Type &type,const char *Parameter);
302bool Operator_New( const char *expression, const Type &baseType, Type &resultType );
303
304//Overload.sbp
305UserProc *OverloadSolutionWithStrParam(
306 const char *name,
307 std::vector<UserProc *> &subs,
308 const char *Parameter,
309 const char *ObjectName);
310UserProc *OverloadSolution(
311 const char *name,
312 std::vector<UserProc *> &subs,
313 const Parameters &params,
314 const Type &returnType );
315
316//Debug.cpp
317void Debugger_StepIn(void);
318void Debugger_StepOver(void);
319void Debugger_StepCursor(void);
320void Debugger_Stop(void);
321void Debugger_Pause(void);
322ULONG_PTR rva_to_real(DWORD p);
323UserProc *GetSubFromObp(ULONG_PTR pos);
324void ReadOpBuffer();
325void DebugProgram(void);
326
327//VarList.cpp
328void InitVarList(DWORD dwThreadId);
329BOOL CALLBACK DlgDebugger(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
330BOOL CALLBACK DlgVarList(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
331
332//WatchList.cpp
333ULONG_PTR Debugging_GetVarPtr(RELATIVE_VAR *pRelativeVar);
334ULONG_PTR Debugging_GetThisPtrOffset(LONG_PTR obp_Rip);
335int Debugging_GetVarOffset( char *variable,RELATIVE_VAR *pRelativeVar, Type &resultType, int *pss);
336
337//MakeExe.cpp
338void StepCompileProgress(void);
339void DeleteConstInfo(CONSTINFO **ppConstHash);
340void DeleteDeclareInfo(void);
341void AddSourceCode(char *buffer);
342void OutputExe(void);
343int MainThread(DWORD dummy);
344
345//Intermediate_Step1.cpp
346void ChangeReturnCode(char *buffer);
347void DeleteComment(char *buffer);
348void KillReturnCode(char *buffer);
349void CheckParenthesis(char *buffer);
350BOOL CheckParenthesis2(char *buffer);
351void DirectiveCheck(void);
352void NextCommandFormat(char *buffer);
353void SetEscapeSequenceFormat(char *buffer);
354void DefCommandFormat(char *buffer);
355void IfCommandFormat(char *buffer);
356void CheckPareCommand(void);
357
358//Intermediate_Step2.cpp
359bool GetConstInfo(void);
360void ChangeCommandToCode(char *buffer);
361
362//preprocessor.cpp
363char *OpenBasicFile(char *FileName);
364
365//Resource.cpp
366void GetResourceData(char *FileName);
367
368//CommandFormat.cpp
369void ComOpen(char *Parameter,char *buffer,int nowLine);
370void ComClose(char *Parameter,char *buffer);
371void ComField(char *Parameter,char *buffer);
372void ComLine(char *Parameter,char *buffer,int nowLine);
373void ComCircle(char *Parameter,char *buffer,int nowLine);
374void ComPSet(char *Parameter,char *buffer,int nowLine);
375void ComPaint(char *Parameter,char *buffer,int nowLine);
376
377// StrOperation.cpp
378void KillSpaces(char *str1,char *str2);
379void KillStringSpaces(char *str);
380BOOL RemoveStringQuotes(char *str);
381void RemoveStringPare(char *str);
382void RemoveStringBracket(char *str);
383void SetStringQuotes(char *str);
384int FormatString_EscapeSequence(char *buffer);
385void SlideString(char *str,int slide);
386void SlideBuffer(char *buffer,int length,int slide);
387_int8 IsCommandDelimitation(char c);
388BOOL IsBlank(char c);
389int GetOneParameter(const char *Parameter,int pos,char *retAns);
390int JumpOneParameter(char *Parameter,int i);
391int GetStringInQuotation(char *buffer,char *ReadBuffer);
392int GetStringInPare(char *buffer,const char *ReadBuffer);
393int GetStringInPare_RemovePare(char *buffer,char *ReadBuffer);
394int GetStringInBracket(char *buffer,const char *ReadBuffer);
395int JumpStringInPare(const char *buffer,int pos);
396int JumpStringInBracket(const char *buffer,int pos);
397int GetCpFromLine(int LineNum);
398BOOL GetLineNum(int pos,int *pLine,char *FileName);
399char GetEndXXXCommand(char es);
400void GetDefaultNameFromES(char es,char *name);
401void GetCalcName(int idCalc,char *name);
402BOOL IsFile(char *path);
403BOOL ShortPathToLongPath(char ShortPath[MAX_PATH],char *LongPath);
404BOOL GetFolder(HWND hWnd,char *folder,char *OpenFolderTitle);
405void ShortPathToLongPath(const char *ShortPath,char *LongPath);
406
407//calculation.cpp
408bool IsNumberTopChar(const char *buffer);
409bool IsNumberChar(const char c);
410BOOL IsNumCalcMark(const char *Command,int p);
411BOOL IsNumCalcMark_Back(const char *Command,int p);
412BOOL IsStrCalcMark(const char c);
413BOOL IsExponent(const char *Command,int p);
414int GetLiteralIndex(_int64 i64data);
415int NeutralizationType(int type1,LONG_PTR index1,int type2,LONG_PTR index2);
416DWORD GetLiteralValue(char *value,_int64 *pi64,int BaseType);
417BOOL GetConstCalcBuffer(char *name,char *Parameter,char *pCalcBuffer);
418DWORD GetConstValue(char *name,double *dbl,char *buffer,LONG_PTR *plpIndex);
419bool IsStringObjectType(const Type &TypeInfo);
420int IsStrCalculation(char *Command);
421BYTE GetCalcId(const char *Command,int *pi);
422BOOL GetNumOpeElements(const char *Command,int *pnum,
423 char *values[255],long calc[255],long stack[255]);
424
425//NumOpe_GetType.cpp
426int AutoBigCast(int BaseType,int CalcType);
427BOOL CheckCalcType(int idCalc,int *type,int sp);
428bool NumOpe_GetType( const char *expression, const Type &baseType, Type &resultType );
429
430//Subroutine.cpp
431int GetCallProcName(char *buffer,char *name);
432int GetProc(char *name,void **ppInfo);
433void SplitObjectName(const char *name,char *ObjectName,int *pRefType);
434bool SplitMemberName( const char *desc, char *object, char *member );
435bool CallProc( int kind, const void *pProc, const char *fullCallName, const char *lpszParms, Type &resultType, bool isCallOn = true );
436bool CallPropertyMethod( const char *variable, const char *rightSide, Type &resultType);
437bool GetReturnTypeOfPropertyMethod( const char *variable, const char *rightSide, Type &resultType );
438bool GetReturnTypeOfIndexerGetterProc( const CClass &objClass, Type &resultType );
439UserProc *AddSubData(char *buffer,int nowLine,BOOL bVirtual,CClass *pobj_c, bool isStatic = false );
440void GetSubInfo(void);
441void DeleteSubInfo(UserProc **ppSubHash,char **ppMacroNames,int MacroNum);
442void DeleteDeclareInfo(void);
443int AddProcPtrInfo( char *buffer, DWORD dwProcType, int nowLine );
444void DeleteProcPtrInfo(void);
445
446//OldStatement.cpp
447void Opcode_Input(const char *Parameter);
448void Opcode_Print(const char *Parameter,BOOL bWrite);
449
450//LoopRefCheck.cpp
451class CLoopRefCheck{
452 char **names;
453 int num;
454 void init();
455public:
456 CLoopRefCheck();
457 ~CLoopRefCheck();
458 void add(char *lpszInheritsClass);
459 void del(char *lpszInheritsClass);
460 BOOL check(char *lpszInheritsClass);
461};
462extern CLoopRefCheck *pobj_LoopRefCheck;
463
464//DataTable.cpp
465class DataTable{
466 void *pdata;
467 int size;
468
469public:
470 DataTable();
471 ~DataTable();
472 void Init();
473
474 int AddBinary( const void *pdata, int size );
475 int Add( _int64 i64data );
476 int Add( int i32data );
477 int Add( double dbl );
478 int Add( float flt );
479 int AddString( const char *str, int length );
480 int AddString( const char *str );
481
482 const void *GetPtr() const;
483 int GetSize() const;
484};
485extern DataTable dataTable;
486
487//error.cpp
488void SetError(int ErrorNum,const char *KeyWord,int pos);
489void SetError(int ErrorNum,const string &keyWord,int pos);
490void SetError();
491void CompileMessage(char *buffer);
492bool CheckDifferentType(const int VarType,const LONG_PTR lpVarIndex,const int CalcType,const LONG_PTR lpCalcIndex,const char *pszFuncName,const int ParmNum);
493bool CheckDifferentType( const Type &varType,const Type &calcType,const char *pszFuncName,const int ParmNum);
494
495//Compile.cpp
496void GetIdentifierToken( char *token, const char *source, int &pos );
497int JumpStatement(const char *source, int &pos);
498void DebugVariable(void);
499void Compile(void);
500
501//gc.cpp
502void InitGCVariables(void);
503void PerformedGcVarSchedule(void);
504
505
506
507#ifdef _DEBUG
508/*Debug*/
509/*
510#define HeapAlloc CheckHeapAlloc
511#define HeapReAlloc CheckHeapReAlloc
512LPVOID CheckHeapAlloc(HANDLE hHeap,DWORD dwFlags,DWORD dwBytes);
513LPVOID CheckHeapReAlloc(HANDLE hHeap,DWORD dwFlags,LPVOID lpMem,DWORD dwBytes);
514*/
515#endif
Note: See TracBrowser for help on using the repository browser.