source: dev/BasicCompiler_Common/common.h@ 117

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

String/ObjectをSystem名前空間に依存しない特殊型として扱うようにした

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