Cosmos/source2/Compiler/Cosmos.Compiler.Assembler/Instruction.cs
blah38621_cp 1b922726f0 The first of a series of commits as I work my way down the list of things Gendarme found wrong. (a large amount is likely to be skipped, as gendarme found 13k potential issues.)
This one makes sure that constructors for abstract classes are protected, not public, as the constructor can only be called by child classes.
2011-10-22 23:19:51 +00:00

64 lines
No EOL
2 KiB
C#

using System;
using System.IO;
using System.Linq;
namespace Cosmos.Compiler.Assembler {
public abstract class Instruction : BaseAssemblerElement {
protected string mMnemonic;
public string Mnemonic {
get { return mMnemonic; }
}
protected int mMethodID;
public int MethodID {
get { return mMethodID; }
}
protected int mAsmMethodIdx;
public int AsmMethodIdx {
get { return mAsmMethodIdx; }
}
public override void WriteText(Assembler aAssembler, TextWriter aOutput) {
aOutput.Write(mMnemonic);
}
protected Instruction() : this(true) {
}
protected Instruction(bool aAddToAssembler) {
if (aAddToAssembler) {
Assembler.CurrentInstance.Add(this);
}
var xAttribs = GetType().GetCustomAttributes(typeof(OpCodeAttribute), false);
if (xAttribs != null && xAttribs.Length > 0) {
var xAttrib = (OpCodeAttribute)xAttribs[0];
mMnemonic = xAttrib.Mnemonic;
}
}
public override ulong? ActualAddress {
get {
// TODO: for now, we dont have any data alignment
return StartAddress;
}
}
public override void UpdateAddress(Assembler aAssembler, ref ulong aAddress) {
base.UpdateAddress(aAssembler, ref aAddress);
}
public override bool IsComplete(Assembler aAssembler) {
throw new NotImplementedException("Method not implemented for instruction " + this.GetType().FullName.Substring(typeof(Instruction).Namespace.Length + 1));
}
public override void WriteData(Assembler aAssembler, Stream aOutput) {
throw new NotImplementedException("Method not implemented for instruction " + this.GetType().FullName.Substring(typeof(Instruction).Namespace.Length + 1));
}
[Obsolete]
public override byte[] GetData(Assembler aAssembler) {
throw new NotImplementedException("Method not implemented for instruction " + this.GetType().FullName.Substring(typeof(Instruction).Namespace.Length + 1));
}
}
}