using System; using System.Linq; using System.Reflection; using System.Security.Cryptography; using System.Text; namespace Cosmos.Compiler.Assembler { public class Label : Instruction { public static string GetFullName( MethodBase aMethod ) { return MethodInfoLabelGenerator.GenerateLabelName( aMethod ); } public static string FilterStringForIncorrectChars( string aName ) { return String.Intern( DataMember.FilterStringForIncorrectChars( aName.Replace( ".", "__DOT__" ) ) ); } public Label( MethodBase aMethod ) : this( MethodInfoLabelGenerator.GenerateLabelName( aMethod ) ) { } public Label( string aName ) { mName = aName; if( !aName.StartsWith( "." ) ) { LastFullLabel = aName; QualifiedName = aName; } else { QualifiedName = LastFullLabel + aName; } } public static string GetLabel( object aObject ) { Label xLabel = aObject as Label; if( xLabel == null ) return ""; return xLabel.Name; } public static string LastFullLabel { get; set; } public string QualifiedName { get; private set; } public bool IsGlobal { get; set; } public string Name { get { return mName; } } private string mName; public override void WriteText( Assembler aAssembler, System.IO.TextWriter aOutput ) { if( IsGlobal ) { aOutput.Write( "global " ); aOutput.WriteLine( FilterStringForIncorrectChars( QualifiedName ) ); } aOutput.Write( FilterStringForIncorrectChars( QualifiedName ) ); aOutput.Write( ":" ); } public override bool IsComplete( Assembler aAssembler ) { return true; } public override void UpdateAddress( Assembler aAssembler, ref ulong aAddress ) { base.UpdateAddress( aAssembler, ref aAddress ); } public override void WriteData( Assembler aAssembler, System.IO.Stream aOutput ) { } } }