Moved compilation steps to their own functions

This commit is contained in:
arookas 2016-02-01 15:06:35 -05:00
parent 37280f45d2
commit f76c5126b9

View file

@ -43,23 +43,11 @@ namespace arookas {
mResolver = resolver;
mContext.Clear();
using (mBinary = new sunBinary(output)) {
var result = Import(name);
if (result != sunImportResult.Loaded) {
throw new sunImportException(name, result);
}
mBinary.WriteEND(); // NOTETOSELF: don't do this via sunNode.Compile because imported files will add this as well
foreach (var callable in mContext.SymbolTable.Callables) {
callable.Compile(this);
}
foreach (var symbol in mContext.SymbolTable) {
symbol.CloseRelocations(this);
}
foreach (var data in mContext.DataTable) {
mBinary.WriteData(data);
}
foreach (var symbol in mContext.SymbolTable) {
mBinary.WriteSymbol(symbol.Type, symbol.Name, symbol.Data);
}
CompileBody(name);
CompileFunctions();
CompileRelocations();
CompileData();
CompileSymbols();
}
results.DataCount = mContext.DataTable.Count;
results.SymbolCount = mContext.SymbolTable.Count;
@ -75,6 +63,34 @@ namespace arookas {
return results;
}
void CompileBody(string name) {
var result = Import(name);
if (result != sunImportResult.Loaded) {
throw new sunImportException(name, result);
}
mBinary.WriteEND();
}
void CompileFunctions() {
foreach (var callable in mContext.SymbolTable.Callables) {
callable.Compile(this);
}
}
void CompileRelocations() {
foreach (var symbol in mContext.SymbolTable) {
symbol.CloseRelocations(this);
}
}
void CompileData() {
foreach (var data in mContext.DataTable) {
mBinary.WriteData(data);
}
}
void CompileSymbols() {
foreach (var symbol in mContext.SymbolTable) {
mBinary.WriteSymbol(symbol.Type, symbol.Name, symbol.Data);
}
}
internal sunImportResult Import(string name) {
if (name == null) {
throw new ArgumentNullException("name");