source: dev/trunk/abdev/BasicCompiler_Common/MakeExe.cpp@ 163

Last change on this file since 163 was 100, checked in by dai_9181, 18 years ago

名前空間機能をグローバル関数に適用。

File size: 6.2 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 CheckParenthesis(basbuf);
105
106 if(bError||bStopCompile) goto EndCompile;
107
108 //コンパイルダイアログのプログレスバーを上げる
109 StepCompileProgress();
110
111 //ディレクティブ
112 DirectiveCheck();
113
114 //Next命令語を正規表現に変換
115 //NextCommandFormat(basbuf);
116
117 //エスケープシーケンス設定
118 SetEscapeSequenceFormat(basbuf);
119
120 //Def命令語をFunction命令語に変換
121 DefCommandFormat(basbuf);
122
123 //すべてのIf命令語をブロック形式に変換
124 IfCommandFormat(basbuf);
125
126 //対になる命令語を相互チェック
127 //CheckPareCommand();
128
129 if(bError||bStopCompile) goto EndCompile;
130
131 /*未完成
132 //定数に関する情報
133 extern CONSTINFO **ppConstHash;
134 ppConstHash=(CONSTINFO **)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,MAX_HASH*sizeof(CONSTINFO *));
135 */
136
137 //コンパイルダイアログのプログレスバーを上げる
138 StepCompileProgress();
139
140 //重複エラー情報管理のメモリを確保
141 extern char **SynonymErrorWords;
142 extern int SynonymErrorNum;
143 SynonymErrorNum=0;
144 SynonymErrorWords=(char **)HeapAlloc(hHeap,0,1);
145
146 ChangeCommandToCode(basbuf);
147
148 //重複エラー情報管理のメモリを解放
149 for(i3=0;i3<SynonymErrorNum;i3++) HeapDefaultFree(SynonymErrorWords[i3]);
150 HeapDefaultFree(SynonymErrorWords);
151 SynonymErrorWords=0;
152
153 if(bError||bStopCompile){
154 //定数に関する情報を解放
155 goto EndCompile;
156 }
157
158 StepCompileProgress();
159
160
161 ///////////////////////
162 // コンパイル開始
163
164 //"コンパイル中..."
165 CompileMessage(STRING_COMPILE_COMPILING);
166
167 //グローバル変数に関する情報
168 extern int AllGlobalVarSize;
169 extern int AllInitGlobalVarSize;
170 globalVars.clear();
171 AllGlobalVarSize=0;
172 AllInitGlobalVarSize=0;
173
174
175 /*
176 int t,t2;
177 t=GetTickCount();
178 Compile();
179 t2=GetTickCount();
180 t2-=t;
181 char s[100];
182 sprintf(s,"%d",t2);
183 MessageBox(0,s,"test",0);*/
184 Compile();
185
186 //リソース情報を解放
187 extern RESOURCEDATAINFO *pCursorResourceInfo;
188 extern RESOURCEDATAINFO *pIconResourceInfo;
189 extern RESOURCEDATAINFO *pBitmapResourceInfo;
190 HeapDefaultFree(pCursorResourceInfo);
191 HeapDefaultFree(pBitmapResourceInfo);
192 HeapDefaultFree(pIconResourceInfo);
193
194 //コードと行番号の関係情報を解放
195 extern LINEINFO *pLineInfo;
196 HeapDefaultFree(pLineInfo);
197
198 //サブルーチン(ユーザー定義)情報のメモリ解放
199 extern GlobalProc **ppSubHash;
200 extern char **ppMacroNames;
201 extern int MacroNum;
202 DeleteSubInfo(ppSubHash,ppMacroNames,MacroNum);
203
204 //Declare(DLL関数)情報のメモリ解放
205 DeleteDeclareInfo();
206
207 //関数ポインタ情報のメモリ解放
208 DeleteProcPtrInfo();
209
210 //定数に関する情報を解放
211 extern CONSTINFO **ppConstHash;
212 DeleteConstInfo(ppConstHash);
213
214 //コンパイルダイアログのプログレスバーを上げる
215 StepCompileProgress();
216
217
218 //////////////////////////
219 // 終了処理
220EndCompile:
221 if(bStopCompile){
222 PostMessage(GetDlgItem(hMainDlg,IDC_PROGRESS),PBM_SETPOS,0,0);
223
224 //"コンパイルはユーザーにより中断されました。"
225 CompileMessage(STRING_COMPILE_STOP);
226 }
227 else{
228 extern int CompileMsgNum;
229 extern int WarningNum;
230 if(bError==0){
231 //"コンパイルは正常に完了しました(エラー:%d、警告:%d)"
232 sprintf(temp2,STRING_COMPILE_SUCCESS,ErrorNum-CompileMsgNum-WarningNum,WarningNum);
233 }
234 else{
235 //"コンパイルは中断されました(エラー:%d、警告:%d)"
236 sprintf(temp2,STRING_COMPILE_ERROR,ErrorNum-CompileMsgNum-WarningNum,WarningNum);
237 }
238
239 CompileMessage("");
240 CompileMessage("-----------------------------------------------------");
241 CompileMessage(temp2);
242 }
243
244 //"閉じる"
245 SetDlgItemText(hMainDlg,IDOK,STRING_CLOSE);
246
247#ifdef _DEBUG
248 // デバッグモードのときはダイアログが隠れている
249 ShowWindow(hMainDlg,SW_SHOW);
250#endif
251
252 //#include情報を解放
253 extern INCLUDEFILEINFO IncludeFileInfo;
254 for(i2=0;i2<IncludeFileInfo.FilesNum;i2++)
255 HeapDefaultFree(IncludeFileInfo.ppFileNames[i2]);
256 HeapDefaultFree(IncludeFileInfo.ppFileNames);
257}
258int MainThread(DWORD dummy){
259 extern BOOL bDebugCompile;
260 extern BOOL bDebugRun;
261 extern int bError;
262
263 if(bDebugRun){
264 if(bDebugCompile){
265 bDebugRun=0;
266
267 //デバッグコンパイル
268 OutputExe();
269
270 bDebugRun=1;
271 }
272
273 //デバッグ実行
274 if(bError==0) DebugProgram();
275 }
276 else{
277 //リリースコンパイル
278 OutputExe();
279 }
280
281 return 0;
282}
Note: See TracBrowser for help on using the repository browser.