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

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