source: dev/BasicCompiler_Common/MakeExe.cpp@ 92

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

列挙型クラスの自動生成コードを修正した(派生クラスでのToStringメソッドを廃止し、サイズを軽減した)。

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