Write() public method

public Write ( TextWriter text ) : void
text System.IO.TextWriter
return void
示例#1
0
 public void Write(bool emitFrame, bool showEdges, TextWriter writer)
 {
     writer.WriteLine("// {0}", QualifiedName());
     writer.WriteLine("// Return size: {0}", this.Signature.ReturnAddressOnStack);
     if (emitFrame)
     {
         Frame.Write(writer);
     }
     Signature.Emit(QualifiedName(), FunctionType.EmitFlags.None, new TextFormatter(writer));
     writer.WriteLine();
     WriteBody(showEdges, writer);
 }
示例#2
0
		public void FrGrfTest()
		{
			IntelArchitecture arch = new IntelArchitecture(ProcessorMode.Real);
			Frame f = new Frame(PrimitiveType.Word16);
			uint iSz = (uint) (FlagM.ZF|FlagM.SF);
			Identifier grfSz = f.EnsureFlagGroup(Registers.eflags, iSz, arch.GrfToString(iSz), PrimitiveType.Byte);
			using (FileUnitTester fut = new FileUnitTester("Core/FrGrfTest.txt"))
			{
				f.Write(fut.TextWriter);
				fut.AssertFilesEqual();
			}
		}
示例#3
0
        public void Write(bool emitFrame, BlockDecorator decorator, TextWriter writer)
        {
            writer.WriteLine("// {0}", Name);
            if (emitFrame)
            {
                Frame.Write(writer);
            }
            var formatter = new TextFormatter(writer);

            Signature.Emit(Name, FunctionType.EmitFlags.None, new TextFormatter(writer));
            writer.WriteLine();
            var codeFormatter = CreateCodeFormatter(formatter);

            new ProcedureFormatter(this, decorator, codeFormatter).WriteProcedureBlocks();
        }
示例#4
0
        public void Write(bool emitFrame, bool showEdges, TextWriter writer)
        {
            writer.WriteLine("// {0}", Name);
            writer.WriteLine("// Return size: {0}", this.Signature.ReturnAddressOnStack);
            if (emitFrame)
            {
                Frame.Write(writer);
            }
            Signature.Emit(Name, ProcedureSignature.EmitFlags.None, new TextFormatter(writer));
            writer.WriteLine();
            var formatter = new CodeFormatter(new TextFormatter(writer));

            new ProcedureFormatter(this, new BlockDecorator {
                ShowEdges = showEdges
            }, formatter).WriteProcedureBlocks();
        }
示例#5
0
		public void SequenceTest()
		{
			IntelArchitecture arch = new IntelArchitecture(ProcessorMode.Real);
			Frame f = new Frame(PrimitiveType.Word16);
			Identifier ax = f.EnsureRegister(Registers.ax);
			Identifier dx = f.EnsureRegister(Registers.dx);
			Identifier dxax = f.EnsureSequence(dx, ax, PrimitiveType.Word32);

			using (FileUnitTester fut = new FileUnitTester("Core/SequenceTest.txt"))
			{
				f.Write(fut.TextWriter);
				fut.AssertFilesEqual();
			}

			Identifier dxax2 = f.EnsureSequence(dx,ax, PrimitiveType.Word32);
			Assert.IsTrue(dxax2 == dxax);
		}
示例#6
0
 public void Write(
     bool emitFrame, bool showEdges, bool lowLevelInfo, TextWriter writer)
 {
     writer.WriteLine("// {0}", QualifiedName());
     writer.WriteLine("// Return size: {0}", this.Signature.ReturnAddressOnStack);
     if (emitFrame)
     {
         Frame.Write(writer);
     }
     FunctionType.EmitFlags flags;
     if (lowLevelInfo)
     {
         flags = FunctionType.EmitFlags.LowLevelInfo;
     }
     else
     {
         flags = FunctionType.EmitFlags.None;
     }
     Signature.Emit(QualifiedName(), flags, new TextFormatter(writer));
     writer.WriteLine();
     WriteBody(showEdges, writer);
 }
示例#7
0
        public void FrBindMixedParameters()
        {
            Frame f = new Frame(PrimitiveType.Word16);
            Identifier ax = f.EnsureRegister(Registers.ax);
            Identifier cx = f.EnsureRegister(Registers.cx);
            int stack = PrimitiveType.Word16.Size;
            Identifier arg1 = f.EnsureStackLocal(-stack, PrimitiveType.Word16);

            ProcedureSignature sig = new ProcedureSignature(
                ax,
                cx,
                new Identifier("arg0", PrimitiveType.Word16, new StackArgumentStorage(0, PrimitiveType.Word16)));

            var cs = new CallSite(stack, 0);
            ProcedureConstant fn = new ProcedureConstant(PrimitiveType.Pointer32, new PseudoProcedure("bar", sig));
            ApplicationBuilder ab = new ApplicationBuilder(arch, f, cs, fn, sig, true);
            Instruction instr = ab.CreateInstruction();
            using (FileUnitTester fut = new FileUnitTester("Core/FrBindMixedParameters.txt"))
            {
                f.Write(fut.TextWriter);
                fut.TextWriter.WriteLine(instr.ToString());
                fut.AssertFilesEqual();
            }
        }
示例#8
0
		public void FrLocals()
		{
			Frame f = new Frame(PrimitiveType.Word16);
			f.EnsureStackLocal(2, PrimitiveType.Word16);
			f.EnsureStackLocal(4, PrimitiveType.Word32);
			using (FileUnitTester fut = new FileUnitTester("Core/FrLocals.txt"))
			{
				f.Write(fut.TextWriter);
				fut.AssertFilesEqual();
			}
			Assert.IsNotNull((StackLocalStorage) f.Identifiers[2].Storage);
		}
示例#9
0
		public void FrFpuStack()
		{
			Frame f = new Frame(PrimitiveType.Word16);
			f.EnsureFpuStackVariable(-1, PrimitiveType.Real64);
			f.EnsureFpuStackVariable(-2, PrimitiveType.Real64);
			f.EnsureFpuStackVariable(0, PrimitiveType.Real64);
			
			using (FileUnitTester fut = new FileUnitTester("Core/FrFpuStack.txt"))
			{
				f.Write(fut.TextWriter);
				fut.AssertFilesEqual();
			}
		}
示例#10
0
		public void FrBindStackParameters()
		{
			Frame f = new Frame(PrimitiveType.Word16);
			f.ReturnAddressSize = 4;						// far call.
			int stack = 2;
			Identifier loc02 = f.EnsureStackLocal(-stack, PrimitiveType.Word16, "wLoc02");
			stack += loc02.DataType.Size;
			Identifier loc04 = f.EnsureStackLocal(-stack, PrimitiveType.Word16, "wLoc04");

			ProcedureSignature sig = new ProcedureSignature(
				null, new Identifier[] {
					new Identifier("arg0", PrimitiveType.Word16, new StackArgumentStorage(4, PrimitiveType.Word16)),
					new Identifier("arg1", PrimitiveType.Word16, new StackArgumentStorage(6, PrimitiveType.Word16)) });

			var cs = new CallSite(f.ReturnAddressSize + 2 * 4, 0);
			var fn = new ProcedureConstant(PrimitiveType.Pointer32, new PseudoProcedure("foo", sig));
			ApplicationBuilder ab = new ApplicationBuilder(arch, f, cs, fn, sig, true);
            Instruction instr = ab.CreateInstruction(); 
			using (FileUnitTester fut = new FileUnitTester("Core/FrBindStackParameters.txt"))
			{
				f.Write(fut.TextWriter);
				fut.TextWriter.WriteLine(instr.ToString());
				fut.AssertFilesEqual();
			}
		}
示例#11
0
		public void FrSequenceAccess()
		{
			Frame f = new Frame(PrimitiveType.Word16);
			Identifier ax = f.EnsureRegister(Registers.ax);
			Identifier dx = f.EnsureRegister(Registers.dx);
			Identifier dx_ax = f.EnsureSequence(dx, ax, PrimitiveType.Word32);
			SequenceStorage vDx_ax = (SequenceStorage) dx_ax.Storage;
			using (FileUnitTester fut = new FileUnitTester("Core/FrSequenceAccess.txt"))
			{
				f.Write(fut.TextWriter);
				fut.TextWriter.WriteLine("Head({0}) = {1}", dx_ax.Name, vDx_ax.Head.Name);
				fut.TextWriter.WriteLine("Tail({0}) = {1}", dx_ax.Name, vDx_ax.Tail.Name);

				fut.AssertFilesEqual();
			}
		}