public override bool IsComplete(AsmContext ec) { if (RawAsm != null) { return(true); } if (UntypedDefaultValue != null && UntypedDefaultValue.LongLength > 0) { foreach (var xReference in (from item in UntypedDefaultValue let xRef = item as NCAsm.ElementReference where xRef != null select xRef)) { var xRef = ec.TryResolveReference(xReference); if (xRef == null) { return(false); } else if (!xRef.IsComplete(ec)) { return(false); } } } return(true); }
public override void WriteData(AsmContext ec, Stream aOutput) { if (UntypedDefaultValue != null && UntypedDefaultValue.LongLength > 0) { //var xBuff = (byte[])Array.CreateInstance(typeof(byte), UntypedDefaultValue.LongLength * 4); for (int i = 0; i < UntypedDefaultValue.Length; i++) { var xRef = UntypedDefaultValue[i] as ElementReference; //byte[] xTemp; if (xRef != null) { var xTheRef = ec.TryResolveReference(xRef); if (xTheRef == null) { throw new Exception("Reference not found!"); } if (!xTheRef.ActualAddress.HasValue) { Console.Write(""); } aOutput.Write(BitConverter.GetBytes(xTheRef.ActualAddress.Value), 0, 4); //xTemp = BitConverter.GetBytes(); } else { if (UntypedDefaultValue[i] is int) { aOutput.Write(BitConverter.GetBytes((int)UntypedDefaultValue[i]), 0, 4); //xTemp = BitConverter.GetBytes((int)UntypedDefaultValue[i]); } else { if (UntypedDefaultValue[i] is uint) { aOutput.Write(BitConverter.GetBytes((uint)UntypedDefaultValue[i]), 0, 4); //xTemp = BitConverter.GetBytes((uint)UntypedDefaultValue[i]); } else { throw new Exception("Invalid value inside UntypedDefaultValue"); } } } //Array.Copy(xTemp, 0, xBuff, i * 4, 4); } } else { aOutput.Write(RawDefaultValue, 0, RawDefaultValue.Length); } }