source: dev/BasicCompiler_Common/MakeExe.cpp@ 78

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

CTypeDef → TypeDef
Houseクラスを追加。
オーバーロードレベルの種類を追加(レベル1に挿入)

File size: 6.5 KB
Line 
1#include "common.h"
2
3void StepCompileProgress(void){
4 extern HWND hMainDlg;
5 PostMessage(GetDlgItem(hMainDlg,IDC_PROGRESS),PBM_STEPIT,0,0);
6}
7
8void Delete_ci(CONSTINFO *pci){
9 int i;
10
11 HeapDefaultFree(pci->name);
12 if(pci->StrValue) HeapDefaultFree(pci->StrValue);
13 if(pci->ParmNum){
14 for(i=0;i<pci->ParmNum;i++)
15 HeapDefaultFree(pci->ppParm[i]);
16 HeapDefaultFree(pci->ppParm);
17 }
18
19 if(pci->pNextData){
20 Delete_ci(pci->pNextData);
21 }
22
23 HeapDefaultFree(pci);
24}
25void DeleteConstInfo(CONSTINFO **ppConstHash){
26 int i;
27
28 for(i=0;i<MAX_HASH;i++){
29 if(ppConstHash[i]){
30 Delete_ci(ppConstHash[i]);
31 }
32 }
33 HeapDefaultFree(ppConstHash);
34}
35
36void AddSourceCode(char *buffer){
37 char *temp;
38 temp=(char *)HeapAlloc(hHeap,0,lstrlen(buffer)+8192);
39 lstrcpy(temp,buffer);
40
41 //エスケープシーケンス設定
42 SetEscapeSequenceFormat(temp);
43
44 //コマンド対応
45 ChangeCommandToCode(temp);
46
47 //新しいソースコードバッファの容量
48 extern char *basbuf;
49 int NewSize;
50 NewSize=lstrlen(basbuf)+lstrlen(temp);
51 NewSize*=2;
52 NewSize+=255;
53
54 //最後尾に貼り付け
55 extern char *pBaseBuffer;
56 pBaseBuffer=(char *)HeapReAlloc(hHeap,0,pBaseBuffer,NewSize);
57 basbuf=pBaseBuffer+2;
58 lstrcat(basbuf,temp);
59
60 HeapDefaultFree(temp);
61}
62
63void OutputExe(void){
64 extern HANDLE hHeap;
65 extern char *basbuf;
66 extern char *pBaseBuffer;
67 extern int ErrorNum;
68 extern BOOL bStopCompile;
69 extern HWND hMainDlg;
70 int i2,i3;
71 char temp2[MAX_PATH];
72
73 //プログレスバーの設定
74 PostMessage(GetDlgItem(hMainDlg,IDC_PROGRESS),PBM_SETRANGE,0,MAKELPARAM(0,6));
75 PostMessage(GetDlgItem(hMainDlg,IDC_PROGRESS),PBM_SETSTEP,1,0);
76
77 //"中断"
78 SetDlgItemText(hMainDlg,IDOK,STRING_STOP);
79
80 //中断フラグを初期化
81 bStopCompile=0;
82
83 //サブシステムのタイプ
84 extern unsigned short TypeOfSubSystem;
85 TypeOfSubSystem=IMAGE_SUBSYSTEM_WINDOWS_GUI;
86
87 //プログラムをファイルから読み込む
88 extern char SourceFileName[MAX_PATH];
89 pBaseBuffer=OpenBasicFile(SourceFileName);
90 if(!pBaseBuffer){
91 SetError(201,SourceFileName,-1);
92 goto EndCompile;
93 }
94 basbuf=pBaseBuffer+2;
95
96 //イメージベースの設定
97 extern DWORD ImageBase;
98 extern BOOL bDll;
99 if(bDll) ImageBase=0x10000000;
100 else ImageBase=0x00400000;
101
102 extern BOOL bError;
103 if(bError||bStopCompile) goto EndCompile;
104
105
106 //////////////////////////
107 // 中間コードの生成を開始
108 extern BOOL bClipCompileView;
109
110 //"最適化中..."
111 CompileMessage(STRING_COMPILE_OPTIMIZING);
112
113 //アンダーバーによる改行を正規表現に戻す
114 KillReturnCode(basbuf);
115
116 //カッコを相互チェック(ダブルクォートチェックチェックを含む)
117 CheckParenthesis(basbuf);
118
119 if(bError||bStopCompile) goto EndCompile;
120
121 //コンパイルダイアログのプログレスバーを上げる
122 StepCompileProgress();
123
124 //ディレクティブ
125 DirectiveCheck();
126
127 //Next命令語を正規表現に変換
128 //NextCommandFormat(basbuf);
129
130 //エスケープシーケンス設定
131 SetEscapeSequenceFormat(basbuf);
132
133 //Def命令語をFunction命令語に変換
134 DefCommandFormat(basbuf);
135
136 //すべてのIf命令語をブロック形式に変換
137 IfCommandFormat(basbuf);
138
139 //対になる命令語を相互チェック
140 //CheckPareCommand();
141
142 if(bError||bStopCompile) goto EndCompile;
143
144 /*未完成
145 //定数に関する情報
146 extern CONSTINFO **ppConstHash;
147 ppConstHash=(CONSTINFO **)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,MAX_HASH*sizeof(CONSTINFO *));
148 */
149
150 //コンパイルダイアログのプログレスバーを上げる
151 StepCompileProgress();
152
153 //重複エラー情報管理のメモリを確保
154 extern char **SynonymErrorWords;
155 extern int SynonymErrorNum;
156 SynonymErrorNum=0;
157 SynonymErrorWords=(char **)HeapAlloc(hHeap,0,1);
158
159 ChangeCommandToCode(basbuf);
160
161 //重複エラー情報管理のメモリを解放
162 for(i3=0;i3<SynonymErrorNum;i3++) HeapDefaultFree(SynonymErrorWords[i3]);
163 HeapDefaultFree(SynonymErrorWords);
164 SynonymErrorWords=0;
165
166 if(bError||bStopCompile){
167 //定数に関する情報を解放
168 goto EndCompile;
169 }
170
171 StepCompileProgress();
172
173
174 ///////////////////////
175 // コンパイル開始
176
177 //"コンパイル中..."
178 CompileMessage(STRING_COMPILE_COMPILING);
179
180 //グローバル変数に関する情報
181 extern int AllGlobalVarSize;
182 extern int AllInitGlobalVarSize;
183 globalVars.clear();
184 AllGlobalVarSize=0;
185 AllInitGlobalVarSize=0;
186
187
188 /*
189 int t,t2;
190 t=GetTickCount();
191 Compile();
192 t2=GetTickCount();
193 t2-=t;
194 char s[100];
195 sprintf(s,"%d",t2);
196 MessageBox(0,s,"test",0);*/
197 Compile();
198
199 //リソース情報を解放
200 extern RESOURCEDATAINFO *pCursorResourceInfo;
201 extern RESOURCEDATAINFO *pIconResourceInfo;
202 extern RESOURCEDATAINFO *pBitmapResourceInfo;
203 HeapDefaultFree(pCursorResourceInfo);
204 HeapDefaultFree(pBitmapResourceInfo);
205 HeapDefaultFree(pIconResourceInfo);
206
207 //コードと行番号の関係情報を解放
208 extern LINEINFO *pLineInfo;
209 HeapDefaultFree(pLineInfo);
210
211 //サブルーチン(ユーザー定義)情報のメモリ解放
212 extern UserProc **ppSubHash;
213 extern char **ppMacroNames;
214 extern int MacroNum;
215 DeleteSubInfo(ppSubHash,ppMacroNames,MacroNum);
216
217 //Declare(DLL関数)情報のメモリ解放
218 DeleteDeclareInfo();
219
220 //関数ポインタ情報のメモリ解放
221 DeleteProcPtrInfo();
222
223 //定数に関する情報を解放
224 extern CONSTINFO **ppConstHash;
225 DeleteConstInfo(ppConstHash);
226
227 //コンパイルダイアログのプログレスバーを上げる
228 StepCompileProgress();
229
230
231 //////////////////////////
232 // 終了処理
233EndCompile:
234 if(bStopCompile){
235 PostMessage(GetDlgItem(hMainDlg,IDC_PROGRESS),PBM_SETPOS,0,0);
236
237 //"コンパイルはユーザーにより中断されました。"
238 CompileMessage(STRING_COMPILE_STOP);
239 }
240 else{
241 extern int CompileMsgNum;
242 extern int WarningNum;
243 if(bError==0){
244 //"コンパイルは正常に完了しました(エラー:%d、警告:%d)"
245 sprintf(temp2,STRING_COMPILE_SUCCESS,ErrorNum-CompileMsgNum-WarningNum,WarningNum);
246 }
247 else{
248 //"コンパイルは中断されました(エラー:%d、警告:%d)"
249 sprintf(temp2,STRING_COMPILE_ERROR,ErrorNum-CompileMsgNum-WarningNum,WarningNum);
250 }
251
252 CompileMessage("");
253 CompileMessage("-----------------------------------------------------");
254 CompileMessage(temp2);
255 }
256
257 //"閉じる"
258 SetDlgItemText(hMainDlg,IDOK,STRING_CLOSE);
259
260 //#include情報を解放
261 extern INCLUDEFILEINFO IncludeFileInfo;
262 for(i2=0;i2<IncludeFileInfo.FilesNum;i2++)
263 HeapDefaultFree(IncludeFileInfo.ppFileNames[i2]);
264 HeapDefaultFree(IncludeFileInfo.ppFileNames);
265
266 if(pBaseBuffer) HeapDefaultFree(pBaseBuffer);
267}
268int MainThread(DWORD dummy){
269 extern BOOL bDebugCompile;
270 extern BOOL bDebugRun;
271 extern int bError;
272
273 if(bDebugRun){
274 if(bDebugCompile){
275 bDebugRun=0;
276
277 //デバッグコンパイル
278 OutputExe();
279
280 bDebugRun=1;
281 }
282
283 //デバッグ実行
284 if(bError==0) DebugProgram();
285 }
286 else{
287 //リリースコンパイル
288 OutputExe();
289 }
290
291 return 0;
292}
Note: See TracBrowser for help on using the repository browser.