Several small changes

This commit is contained in:
mterwoord_cp 2008-05-15 12:39:06 +00:00
parent 486983c8fe
commit 71197e000a
4 changed files with 110 additions and 69 deletions

View file

@ -153,35 +153,48 @@ namespace Cosmos.Build.Windows {
byte mComport; byte mComport;
protected void DoBuild() { protected void DoBuild() {
try
{
SaveSettingsToRegistry(); SaveSettingsToRegistry();
mComport = (byte)cmboDebugPort.SelectedIndex; mComport = (byte)cmboDebugPort.SelectedIndex;
if (mComport > 3) { if (mComport > 3)
{
throw new Exception("Debug port not supported yet!"); throw new Exception("Debug port not supported yet!");
} }
mComport++; mComport++;
string xDebugMode = (string)cmboDebugMode.SelectedValue; string xDebugMode = (string)cmboDebugMode.SelectedValue;
mDebugMode = DebugModeEnum.None; mDebugMode = DebugModeEnum.None;
if (xDebugMode == "IL") { if (xDebugMode == "IL")
{
mDebugMode = DebugModeEnum.IL; mDebugMode = DebugModeEnum.IL;
} else if (xDebugMode == "Source") { }
else if (xDebugMode == "Source")
{
mDebugMode = DebugModeEnum.Source; mDebugMode = DebugModeEnum.Source;
mComport = 1; mComport = 1;
} else if (xDebugMode == "None") { }
else if (xDebugMode == "None")
{
mDebugMode = DebugModeEnum.None; mDebugMode = DebugModeEnum.None;
} else { }
else
{
throw new Exception("Selected debug mode not supported!"); throw new Exception("Selected debug mode not supported!");
} }
if (chckCompileIL.IsChecked.Value) { if (chckCompileIL.IsChecked.Value)
{
Console.WriteLine("Compiling..."); Console.WriteLine("Compiling...");
var xBuildWindow = new BuildWindow(); var xBuildWindow = new BuildWindow();
mBuilder.DebugLog += xBuildWindow.DoDebugMessage; mBuilder.DebugLog += xBuildWindow.DoDebugMessage;
mBuilder.ProgressChanged += delegate(int aMax, int aCurrent) { mBuilder.ProgressChanged += delegate(int aMax, int aCurrent)
{
xBuildWindow.ProgressMax = aMax; xBuildWindow.ProgressMax = aMax;
xBuildWindow.ProgressCurrent = aCurrent; xBuildWindow.ProgressCurrent = aCurrent;
var xFrame = new DispatcherFrame(); var xFrame = new DispatcherFrame();
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Input, new DispatcherOperationCallback(delegate(object aParam) { Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Input, new DispatcherOperationCallback(delegate(object aParam)
{
xFrame.Continue = false; xFrame.Continue = false;
return null; return null;
}), null); }), null);
@ -194,17 +207,20 @@ namespace Cosmos.Build.Windows {
where item.Severity != LogSeverityEnum.Informational where item.Severity != LogSeverityEnum.Informational
select item); select item);
xBuildWindow.Close(); xBuildWindow.Close();
if (xMessages.Count() > 0) { if (xMessages.Count() > 0)
{
xBuildWindow = new BuildWindow(); xBuildWindow = new BuildWindow();
xBuildWindow.Messages.Clear(); xBuildWindow.Messages.Clear();
foreach (var item in xMessages) { foreach (var item in xMessages)
{
xBuildWindow.Messages.Add(item); xBuildWindow.Messages.Add(item);
} }
xBuildWindow.ShowDialog(); xBuildWindow.ShowDialog();
return; return;
} }
} }
}
catch (Exception E) { System.Diagnostics.Debugger.Break(); }
if (rdioQEMU.IsChecked.Value) { if (rdioQEMU.IsChecked.Value) {
mBuilder.MakeQEMU(chckQEMUUseHD.IsChecked.Value, chckQEMUUseGDB.IsChecked.Value, mDebugMode != DebugModeEnum.None, mDebugMode != DebugModeEnum.None); mBuilder.MakeQEMU(chckQEMUUseHD.IsChecked.Value, chckQEMUUseGDB.IsChecked.Value, mDebugMode != DebugModeEnum.None, mDebugMode != DebugModeEnum.None);
} else if (rdioVMWare.IsChecked.Value) { } else if (rdioVMWare.IsChecked.Value) {

View file

@ -24,7 +24,12 @@ namespace Indy.IL2CPU.IL.X86 {
var right = Assembler.StackContents.Pop(); var right = Assembler.StackContents.Pop();
var left = Assembler.StackContents.Pop(); var left = Assembler.StackContents.Pop();
if (right.Size != left.Size) if (right.Size != left.Size)
throw new NotImplementedException("mixed size operations are not implemented"); {
if (right.Size > 4 || left.Size > 4)
{
throw new NotImplementedException("mixed size operations are not implemented! (" + left.Size + "/" + right.Size + ")");
}
}
int xSize = right.Size; int xSize = right.Size;

View file

@ -206,6 +206,15 @@ namespace Indy.IL2CPU.IL {
{ {
MethodBase xMethod = xEmittedMethods.Keys[j]; MethodBase xMethod = xEmittedMethods.Keys[j];
var xMethodId = GetMethodIdentifier(xMethod); var xMethodId = GetMethodIdentifier(xMethod);
if (mDebugMode)
{
xDebug.WriteStartElement("Method");
xDebug.WriteAttributeString("Id", xMethodId.ToString("X"));
xDebug.WriteAttributeString("Name", xMethod.GetFullName());
xDebug.WriteEndElement();
}
if (!xType.IsInterface)
{
if (xEmittedMethods.Values[j]) if (xEmittedMethods.Values[j])
{ {
var xNewMethod = xType.GetMethod(xMethod.DeclaringType.FullName + "." + xMethod.Name, var xNewMethod = xType.GetMethod(xMethod.DeclaringType.FullName + "." + xMethod.Name,
@ -219,19 +228,25 @@ namespace Indy.IL2CPU.IL {
(from xParam in xMethod.GetParameters() (from xParam in xMethod.GetParameters()
select xParam.ParameterType).ToArray()); select xParam.ParameterType).ToArray());
} }
if (xNewMethod == null)
{
try
{
var xMap = xType.GetInterfaceMap(xMethod.DeclaringType);
for (int k = 0; k < xMap.InterfaceMethods.Length; k++)
{
if (xMap.InterfaceMethods[k] == xMethod)
{
xNewMethod = xMap.TargetMethods[k];
break;
}
}
}
catch { }
}
if (xNewMethod == null) { System.Diagnostics.Debugger.Break(); } if (xNewMethod == null) { System.Diagnostics.Debugger.Break(); }
xMethod = xNewMethod; xMethod = xNewMethod;
} }
if (mDebugMode)
{
xDebug.WriteStartElement("Method");
xDebug.WriteAttributeString("Id", xMethodId.ToString("X"));
xDebug.WriteAttributeString("Name", xMethod.GetFullName());
xDebug.WriteEndElement();
}
if (!xType.IsInterface)
{
Pushd("0" + i.ToString("X") + "h"); Pushd("0" + i.ToString("X") + "h");
Pushd("0" + j.ToString("X") + "h"); Pushd("0" + j.ToString("X") + "h");

View file

@ -331,7 +331,11 @@ namespace Indy.IL2CPU {
GenerateVMT(mDebugMode != DebugModeEnum.None); GenerateVMT(mDebugMode != DebugModeEnum.None);
} }
mMap.PostProcess(mAssembler); mMap.PostProcess(mAssembler);
try
{
ProcessAllStaticFields(); ProcessAllStaticFields();
}
catch (Exception E) { mDebugLog(LogSeverityEnum.Error, E.Message); }
if (mSymbols != null) { if (mSymbols != null) {
string xOutputFile = Path.Combine(mOutputDir, string xOutputFile = Path.Combine(mOutputDir,
"debug.cxdb"); "debug.cxdb");
@ -858,6 +862,7 @@ namespace Indy.IL2CPU {
string xFileName = Path.Combine(mOutputDir, (xCurrentField.DeclaringType.Assembly.FullName + "__" + xManifestResourceName).Replace(",", "_") + ".res"); string xFileName = Path.Combine(mOutputDir, (xCurrentField.DeclaringType.Assembly.FullName + "__" + xManifestResourceName).Replace(",", "_") + ".res");
using (var xStream = xCurrentField.DeclaringType.Assembly.GetManifestResourceStream(xManifestResourceName)) using (var xStream = xCurrentField.DeclaringType.Assembly.GetManifestResourceStream(xManifestResourceName))
{ {
if (xStream == null) { throw new Exception("Resource '" + xManifestResourceName + "' not found!"); }
using (var xTarget = File.Create(xFileName)) using (var xTarget = File.Create(xFileName))
{ {
// todo: abstract this array code out. // todo: abstract this array code out.