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

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

コード全体のリファクタリングを実施

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