From 43a812b7205214a306e5d3f2b29f7795020f0f65 Mon Sep 17 00:00:00 2001 From: Quajak Date: Wed, 27 Jan 2021 16:13:24 +0100 Subject: [PATCH] A bit of progress, now stuck on StreamReader.ReadToEnd --- .../DefaultEngineConfiguration.cs | 4 +- .../Assert.cs | 11 ++ .../Kernels/Cosmos.Kernel.Tests.Fat/Kernel.cs | 8 +- .../System.IO/FileTest.cs | 27 +++- .../System.IO/StreamWriterStreamReaderTest.cs | 2 +- build/Targets/RestoreSources.props | 1 - .../Runtime/Intrinsics/X86/Sse41Impl.cs | 21 +++ .../Runtime/Intrinsics/X86/Sse42Impl.cs | 21 +++ source/Cosmos.Core_Plugs/System/BufferImpl.cs | 1 + .../Generic/ComparerHelpersImpl.cs | 4 - source/Cosmos.Core_Plugs/System/StringImpl.cs | 7 +- source/Cosmos.HAL2/BlockDevice/BlockDevice.cs | 132 +++++++++--------- source/Cosmos.HAL2/BlockDevice/Partition.cs | 4 +- .../Cosmos.System2/FileSystem/DiskManager.cs | 2 +- .../FileSystem/FAT/FatFileSystem.cs | 8 +- .../FileSystem/FAT/FatStream.cs | 2 +- .../System/IO/CosmosFileSystem.cs | 2 +- .../System/IO/DirectoryImpl.cs | 2 +- .../System/IO/DirectoryInfoImpl.cs | 2 +- .../System/IO/FileStreamImpl.cs | 2 +- .../System/IO/StreamWriterImpl.cs | 8 +- 21 files changed, 173 insertions(+), 98 deletions(-) create mode 100644 source/Cosmos.Core_Plugs/Runtime/Intrinsics/X86/Sse41Impl.cs create mode 100644 source/Cosmos.Core_Plugs/Runtime/Intrinsics/X86/Sse42Impl.cs diff --git a/Tests/Cosmos.TestRunner.Full/DefaultEngineConfiguration.cs b/Tests/Cosmos.TestRunner.Full/DefaultEngineConfiguration.cs index bccfcc230..73fad3cff 100644 --- a/Tests/Cosmos.TestRunner.Full/DefaultEngineConfiguration.cs +++ b/Tests/Cosmos.TestRunner.Full/DefaultEngineConfiguration.cs @@ -21,8 +21,8 @@ namespace Cosmos.TestRunner.Full } } - public virtual bool RunWithGDB => false; - public virtual bool StartBochsDebugGUI => false; + public virtual bool RunWithGDB => true; + public virtual bool StartBochsDebugGUI => true; public virtual bool DebugIL2CPU => false; public virtual string KernelPkg => String.Empty; diff --git a/Tests/Cosmos.TestRunner.TestController/Assert.cs b/Tests/Cosmos.TestRunner.TestController/Assert.cs index 32abf6a87..2c7971174 100644 --- a/Tests/Cosmos.TestRunner.TestController/Assert.cs +++ b/Tests/Cosmos.TestRunner.TestController/Assert.cs @@ -58,6 +58,17 @@ namespace Cosmos.TestRunner IsTrue(xResult, message, file, line); } + public static void AreEqual(long expected, long actual, string message, [CallerFilePath] string file = null, [CallerLineNumber] int line = 0) + { + var xResult = expected == actual; + if (!xResult) + { + TestController.Debugger.Send($"Expected value: '{expected}'"); + TestController.Debugger.Send($"Actual value: '{actual}'"); + } + IsTrue(xResult, message, file, line); + } + public static void AreEqual(string[] expected, string[] actual, string message, [CallerFilePath] string file = null, [CallerLineNumber] int line = 0) { if(expected.Length != actual.Length) diff --git a/Tests/Kernels/Cosmos.Kernel.Tests.Fat/Kernel.cs b/Tests/Kernels/Cosmos.Kernel.Tests.Fat/Kernel.cs index d0a21a9e8..f3ec50dcc 100644 --- a/Tests/Kernels/Cosmos.Kernel.Tests.Fat/Kernel.cs +++ b/Tests/Kernels/Cosmos.Kernel.Tests.Fat/Kernel.cs @@ -36,10 +36,10 @@ namespace Cosmos.Kernel.Tests.Fat { mDebugger.Send("Run"); - PathTest.Execute(mDebugger); - DirectoryTest.Execute(mDebugger); - FileStreamTest.Execute(mDebugger); - DirectoryInfoTest.Execute(mDebugger); + //PathTest.Execute(mDebugger); + //DirectoryTest.Execute(mDebugger); + //FileStreamTest.Execute(mDebugger); + //DirectoryInfoTest.Execute(mDebugger); StreamWriterStreamReaderTest.Execute(mDebugger); BinaryWriterBinaryReaderTest.Execute(mDebugger); FileInfoTest.Execute(mDebugger); diff --git a/Tests/Kernels/Cosmos.Kernel.Tests.Fat/System.IO/FileTest.cs b/Tests/Kernels/Cosmos.Kernel.Tests.Fat/System.IO/FileTest.cs index 1a25e02b3..5e8dd0c1c 100644 --- a/Tests/Kernels/Cosmos.Kernel.Tests.Fat/System.IO/FileTest.cs +++ b/Tests/Kernels/Cosmos.Kernel.Tests.Fat/System.IO/FileTest.cs @@ -212,6 +212,7 @@ namespace Cosmos.Kernel.Tests.Fat.System.IO File.Delete(@"0:\test1.txt"); Assert.IsFalse(File.Exists(@"0:\test1.txt"), "test1.txt wasn't deleted!"); mDebugger.Send("END TEST"); + mDebugger.Send(""); //mDebugger.Send("START TEST: Delete a directory with File.Delete:"); //Simple test: create a directory, then try to delete it as a file. @@ -236,23 +237,45 @@ namespace Cosmos.Kernel.Tests.Fat.System.IO Assert.IsTrue(KudzuTxtContent == Kudzu2TxtContent, "File has not been copied correctly"); /* Now Try to Copy '0:\Kudzu.txt' onto an existing file with the overload of Copy that does permit this */ + mDebugger.Send(""); mDebugger.Send("START TEST: Copy a file (overwrite existing) :"); File.Copy(@"0:\Kudzu.txt", @"0:\test.dat", true); mDebugger.Send("The existing file has been overwritten, reading..."); string TestDatContent = File.ReadAllText(@"0:\test.dat"); - Assert.IsTrue(KudzuTxtContent == TestDatContent, "File has not been copied correctly"); + Assert.AreEqual(KudzuTxtContent, TestDatContent, "File has not been copied correctly"); + using (StreamReader streamReader = new StreamReader("0:\\test.dat")) + { + var t = streamReader.ReadToEnd(); + Assert.AreEqual(KudzuTxtContent, t, "Using StreamReader to read entire (short) file works"); + } mDebugger.Send("END TEST"); + mDebugger.Send(""); #region Test Writing Large Files string text = new string('o', 4000); text += new string('l', 4000); File.WriteAllText("0:\\long.txt", text); + var bytes = File.ReadAllBytes("0:\\long.txt"); + mDebugger.Send("-- Bytes --"); + mDebugger.Send(BitConverter.ToString(bytes)); + mDebugger.Send("-- Bytes --"); + + using (StreamReader streamReader = new StreamReader("0:\\long.txt")) + { + Assert.AreEqual(0, streamReader.BaseStream.Position, "Position of StreamReader is correct"); + Assert.AreEqual(8000, streamReader.BaseStream.Length, "Length of StreamReader is correct"); + Debugger.DoBochsBreak(); + var t = streamReader.ReadToEnd(); + mDebugger.Send("--------------- Check this place! --------- *************"); + Assert.AreEqual(text, t, "Using StreamReader to read entire (long) file works"); + } + string read = File.ReadAllText("0:\\long.txt"); - Assert.IsTrue(read == text, "Reading files larger than one cluster works using read all text"); + Assert.AreEqual(text, read, "Reading files larger than one cluster works using read all text"); byte[] textBytes = Encoding.ASCII.GetBytes(text); mDebugger.Send("Reading all bytes"); byte[] readBytes = File.ReadAllBytes("0:\\long.txt"); diff --git a/Tests/Kernels/Cosmos.Kernel.Tests.Fat/System.IO/StreamWriterStreamReaderTest.cs b/Tests/Kernels/Cosmos.Kernel.Tests.Fat/System.IO/StreamWriterStreamReaderTest.cs index ce89a47e1..c50c9c5c6 100644 --- a/Tests/Kernels/Cosmos.Kernel.Tests.Fat/System.IO/StreamWriterStreamReaderTest.cs +++ b/Tests/Kernels/Cosmos.Kernel.Tests.Fat/System.IO/StreamWriterStreamReaderTest.cs @@ -31,8 +31,8 @@ namespace Cosmos.Kernel.Tests.Fat.System.IO try { mDebugger.Send("Start writing"); - xSW.Write(text); + } catch { diff --git a/build/Targets/RestoreSources.props b/build/Targets/RestoreSources.props index 8e64ada25..ef7afc63a 100644 --- a/build/Targets/RestoreSources.props +++ b/build/Targets/RestoreSources.props @@ -9,7 +9,6 @@ https://ci.appveyor.com/nuget/cosmos-common; https://ci.appveyor.com/nuget/il2cpu; https://ci.appveyor.com/nuget/xsharp; - https://dotnet.myget.org/F/roslyn-tools/api/v3/index.json $(RestoreSources);$(DefaultPackageOutputPath) diff --git a/source/Cosmos.Core_Plugs/Runtime/Intrinsics/X86/Sse41Impl.cs b/source/Cosmos.Core_Plugs/Runtime/Intrinsics/X86/Sse41Impl.cs new file mode 100644 index 000000000..0d96fb8b9 --- /dev/null +++ b/source/Cosmos.Core_Plugs/Runtime/Intrinsics/X86/Sse41Impl.cs @@ -0,0 +1,21 @@ +using IL2CPU.API.Attribs; + +namespace Cosmos.Core_Plugs.Runtime.Intrinsics.X86 +{ + [Plug("System.Runtime.Intrinsics.X86.Sse41, System.Private.CoreLib")] + class Sse41Impl + { + public static bool get_IsSupported() + { + return false; + } + } + [Plug("System.Runtime.Intrinsics.X86.Sse41+X64, System.Private.CoreLib")] + class Sse41X86Impl + { + public static bool get_IsSupported() + { + return false; + } + } +} diff --git a/source/Cosmos.Core_Plugs/Runtime/Intrinsics/X86/Sse42Impl.cs b/source/Cosmos.Core_Plugs/Runtime/Intrinsics/X86/Sse42Impl.cs new file mode 100644 index 000000000..932825fc0 --- /dev/null +++ b/source/Cosmos.Core_Plugs/Runtime/Intrinsics/X86/Sse42Impl.cs @@ -0,0 +1,21 @@ +using IL2CPU.API.Attribs; + +namespace Cosmos.Core_Plugs.Runtime.Intrinsics.X86 +{ + [Plug("System.Runtime.Intrinsics.X86.Sse42, System.Private.CoreLib")] + class Sse42Impl + { + public static bool get_IsSupported() + { + return false; + } + } + [Plug("System.Runtime.Intrinsics.X86.Sse42+X64, System.Private.CoreLib")] + class Sse42X86Impl + { + public static bool get_IsSupported() + { + return false; + } + } +} diff --git a/source/Cosmos.Core_Plugs/System/BufferImpl.cs b/source/Cosmos.Core_Plugs/System/BufferImpl.cs index 6946a4d82..a48bd1bf9 100644 --- a/source/Cosmos.Core_Plugs/System/BufferImpl.cs +++ b/source/Cosmos.Core_Plugs/System/BufferImpl.cs @@ -1,4 +1,5 @@ using System; +using Cosmos.Debug.Kernel; using IL2CPU.API.Attribs; namespace Cosmos.Core_Plugs.System diff --git a/source/Cosmos.Core_Plugs/System/Collections/Generic/ComparerHelpersImpl.cs b/source/Cosmos.Core_Plugs/System/Collections/Generic/ComparerHelpersImpl.cs index c58d333b8..6d55fedaa 100644 --- a/source/Cosmos.Core_Plugs/System/Collections/Generic/ComparerHelpersImpl.cs +++ b/source/Cosmos.Core_Plugs/System/Collections/Generic/ComparerHelpersImpl.cs @@ -12,8 +12,6 @@ namespace Cosmos.Core_Plugs.System.Collections.Generic public static object CreateDefaultComparer(Type aType) { - Debugger.DoBochsBreak(); - //TODO: Do application level testing to determine the most frequent comparisons and do those type checks first. if (aType == typeof(Byte)) @@ -153,8 +151,6 @@ namespace Cosmos.Core_Plugs.System.Collections.Generic public static object CreateDefaultEqualityComparer(Type aType) { - Debugger.DoBochsBreak(); - //TODO: Do application level testing to determine the most frequent comparisons and do those type checks first. if (aType == typeof(Byte)) diff --git a/source/Cosmos.Core_Plugs/System/StringImpl.cs b/source/Cosmos.Core_Plugs/System/StringImpl.cs index 1ab5c8dfa..852dca46a 100644 --- a/source/Cosmos.Core_Plugs/System/StringImpl.cs +++ b/source/Cosmos.Core_Plugs/System/StringImpl.cs @@ -1,4 +1,4 @@ -#define COSMOSDEBUG +//#define COSMOSDEBUG using System; using System.Globalization; using Cosmos.Common; @@ -113,11 +113,6 @@ namespace Cosmos.Core_Plugs.System [ObjectPointerAccess] uint* aThis, [FieldAccess(Name = "System.Int32 System.String._stringLength")] ref int aLength) { - if(aLength < 0 || aLength > 1000) - { - mDebugger.Send("Length is: " + aLength); - Debugger.DoBochsBreak(); - } return aLength; } diff --git a/source/Cosmos.HAL2/BlockDevice/BlockDevice.cs b/source/Cosmos.HAL2/BlockDevice/BlockDevice.cs index 3b70153a4..5b8e52d80 100644 --- a/source/Cosmos.HAL2/BlockDevice/BlockDevice.cs +++ b/source/Cosmos.HAL2/BlockDevice/BlockDevice.cs @@ -3,94 +3,94 @@ using System.Collections.Generic; namespace Cosmos.HAL.BlockDevice { - // This class should not support selecting a device or sub device. - // Each instance must control exactly one device. For example with ATA - // master/slave, each one needs its own device instance. For ATA - // this complicates things a bit because they share IO ports, but this - // is an intentional decision. - /// - /// BlockDevice abstract class. See also: . - /// - public abstract class BlockDevice : Device + // This class should not support selecting a device or sub device. + // Each instance must control exactly one device. For example with ATA + // master/slave, each one needs its own device instance. For ATA + // this complicates things a bit because they share IO ports, but this + // is an intentional decision. + /// + /// BlockDevice abstract class. See also: . + /// + public abstract class BlockDevice : Device { // TODO: Need to protect this from changes except by Hardware ring - /// - /// Devices list. - /// + /// + /// Devices list. + /// static public List Devices = new List(); - /// - /// Create new block array. - /// - /// Number of blocks to alloc. - /// byte array. + /// + /// Create new block array. + /// + /// Number of blocks to alloc. + /// byte array. public byte[] NewBlockArray(UInt32 aBlockCount) { return new byte[aBlockCount * mBlockSize]; } - /// - /// Block count. - /// + /// + /// Block count. + /// protected UInt64 mBlockCount = 0; - /// - /// Get block count. - /// - public UInt64 BlockCount => mBlockCount; + /// + /// Get block count. + /// + public UInt64 BlockCount => mBlockCount; - /// - /// Block size. - /// - protected UInt64 mBlockSize = 0; - /// - /// Get block size. - /// - public UInt64 BlockSize => mBlockSize; + /// + /// Block size. + /// + protected UInt64 mBlockSize = 0; + /// + /// Get block size. + /// + public UInt64 BlockSize => mBlockSize; - // Only allow reading and writing whole blocks because many of the hardware - // command work that way and we dont want to add complexity at the BlockDevice level. - // public abstract void ReadBlock(UInt64 aBlockNo, UInt32 aBlockCount, byte[] aData); - /// - /// Read block from partition. - /// - /// A block to read from. - /// A number of blocks in the partition. - /// A data that been read. - /// Thrown when data lenght is greater then Int32.MaxValue. - /// Thrown when data size invalid. - public abstract void ReadBlock(UInt64 aBlockNo, UInt64 aBlockCount, ref byte[] aData); + // Only allow reading and writing whole blocks because many of the hardware + // command work that way and we dont want to add complexity at the BlockDevice level. + // public abstract void ReadBlock(UInt64 aBlockNo, UInt32 aBlockCount, byte[] aData); + /// + /// Read block from partition. + /// + /// A block to read from. + /// A number of blocks in the partition. + /// A data that been read. + /// Thrown when data lenght is greater then Int32.MaxValue. + /// Thrown when data size invalid. + public abstract void ReadBlock(UInt64 aBlockNo, UInt64 aBlockCount, ref byte[] aData); - /// - /// Write block to partition. - /// - /// A block number to write to. - /// A number of blocks in the partition. - /// A data to write. - /// Thrown when data lenght is greater then Int32.MaxValue. - /// Thrown when data size invalid. + /// + /// Write block to partition. + /// + /// A block number to write to. + /// A number of blocks in the partition. + /// A data to write. + /// Thrown when data lenght is greater then Int32.MaxValue. + /// Thrown when data size invalid. public abstract void WriteBlock(UInt64 aBlockNo, UInt64 aBlockCount, ref byte[] aData); - /// - /// Check data size. - /// - /// A data to check the size of. - /// Number of blocks used to store the data. - /// Thrown when data lenght is greater then Int32.MaxValue. - /// Thrown when data size invalid. + /// + /// Check data size. + /// + /// A data to check the size of. + /// Number of blocks used to store the data. + /// Thrown when data lenght is greater then Int32.MaxValue. + /// Thrown when data size invalid. protected void CheckDataSize(byte[] aData, UInt64 aBlockCount) { - if ((ulong)aData.Length != aBlockCount * mBlockSize) + if ((ulong)aData.Length != aBlockCount * mBlockSize) { throw new Exception("Invalid data size."); } } - /// - /// Check block number. - /// Not implemented. - /// - /// A block number to be checked. - /// A block count. + /// + /// Check block number. + /// Not implemented. + /// + /// A block number to be checked. + /// A block count. protected void CheckBlockNo(UInt64 aBlockNo, UInt64 aBlockCount) { if (aBlockNo + aBlockCount >= mBlockCount) diff --git a/source/Cosmos.HAL2/BlockDevice/Partition.cs b/source/Cosmos.HAL2/BlockDevice/Partition.cs index 67e0ec1f9..d976939b4 100644 --- a/source/Cosmos.HAL2/BlockDevice/Partition.cs +++ b/source/Cosmos.HAL2/BlockDevice/Partition.cs @@ -40,11 +40,13 @@ namespace Cosmos.HAL.BlockDevice /// Thrown when data size invalid. public override void ReadBlock(UInt64 aBlockNo, UInt64 aBlockCount, ref byte[] aData) { + Global.mDebugger.Send("-- Partition.ReadBlock --"); CheckDataSize(aData, aBlockCount); UInt64 xHostBlockNo = mStartingSector + aBlockNo; CheckBlockNo(xHostBlockNo, aBlockCount); mHost.ReadBlock(xHostBlockNo, aBlockCount, ref aData); - } + Global.mDebugger.Send("Returning -- Partition.ReadBlock --"); + } /// /// Write block to partition. diff --git a/source/Cosmos.System2/FileSystem/DiskManager.cs b/source/Cosmos.System2/FileSystem/DiskManager.cs index 6f59afd5d..32e82ac11 100644 --- a/source/Cosmos.System2/FileSystem/DiskManager.cs +++ b/source/Cosmos.System2/FileSystem/DiskManager.cs @@ -1,4 +1,4 @@ -#define COSMOSDEBUG +//#define COSMOSDEBUG using System; using System.Collections.Generic; using System.Text; diff --git a/source/Cosmos.System2/FileSystem/FAT/FatFileSystem.cs b/source/Cosmos.System2/FileSystem/FAT/FatFileSystem.cs index 6f02e1881..d83f7cdc5 100644 --- a/source/Cosmos.System2/FileSystem/FAT/FatFileSystem.cs +++ b/source/Cosmos.System2/FileSystem/FAT/FatFileSystem.cs @@ -349,11 +349,12 @@ namespace Cosmos.System.FileSystem.FAT /// Thrown when data size invalid. private void ReadFatSector(ulong aSector, out byte[] aData) { + Global.mFileSystemDebugger.Send("-- FatFileSystem.ReadFatSector --"); aData = mFileSystem.NewBlockArray(); ulong xSector = mFatSector + aSector; - Global.mFileSystemDebugger.SendInternal("xSector ="); - Global.mFileSystemDebugger.SendInternal(xSector); + Global.mFileSystemDebugger.SendInternal("xSector =" + xSector); mFileSystem.Device.ReadBlock(xSector, mFileSystem.SectorsPerCluster, ref aData); + Global.mFileSystemDebugger.Send("Returning -- FatFileSystem.ReadFatSector --"); } /// @@ -452,7 +453,7 @@ namespace Cosmos.System.FileSystem.FAT ulong xEntryOffset = aEntryNumber * xEntrySize; ulong xSector = xEntryOffset / mFileSystem.BytesPerSector; - ulong xSectorOffset = (xSector * mFileSystem.BytesPerSector) - xEntryOffset; + //ulong xSectorOffset = (xSector * mFileSystem.BytesPerSector) - xEntryOffset; byte[] xData; ReadFatSector(xSector, out xData); @@ -476,6 +477,7 @@ namespace Cosmos.System.FileSystem.FAT } WriteFatSector(xSector, xData); + Global.mFileSystemDebugger.SendInternal("Returning from --- Fat.SetFatEntry ---"); } /// diff --git a/source/Cosmos.System2/FileSystem/FAT/FatStream.cs b/source/Cosmos.System2/FileSystem/FAT/FatStream.cs index 29a407f9b..9fcee0365 100644 --- a/source/Cosmos.System2/FileSystem/FAT/FatStream.cs +++ b/source/Cosmos.System2/FileSystem/FAT/FatStream.cs @@ -1,4 +1,4 @@ -#define COSMOSDEBUG +//#define COSMOSDEBUG using System; using System.IO; diff --git a/source/Cosmos.System2_Plugs/System/IO/CosmosFileSystem.cs b/source/Cosmos.System2_Plugs/System/IO/CosmosFileSystem.cs index 645dc80c7..64e4c5684 100644 --- a/source/Cosmos.System2_Plugs/System/IO/CosmosFileSystem.cs +++ b/source/Cosmos.System2_Plugs/System/IO/CosmosFileSystem.cs @@ -1,4 +1,4 @@ -#define COSMOSDEBUG +//#define COSMOSDEBUG using System; using System.IO; using System.Collections.Generic; diff --git a/source/Cosmos.System2_Plugs/System/IO/DirectoryImpl.cs b/source/Cosmos.System2_Plugs/System/IO/DirectoryImpl.cs index 840fee6b3..19a5b3eb0 100644 --- a/source/Cosmos.System2_Plugs/System/IO/DirectoryImpl.cs +++ b/source/Cosmos.System2_Plugs/System/IO/DirectoryImpl.cs @@ -1,4 +1,4 @@ -#define COSMOSDEBUG +//#define COSMOSDEBUG using System; using System.IO; using System.Collections.Generic; diff --git a/source/Cosmos.System2_Plugs/System/IO/DirectoryInfoImpl.cs b/source/Cosmos.System2_Plugs/System/IO/DirectoryInfoImpl.cs index f91fe6aa9..7bcc85cb1 100644 --- a/source/Cosmos.System2_Plugs/System/IO/DirectoryInfoImpl.cs +++ b/source/Cosmos.System2_Plugs/System/IO/DirectoryInfoImpl.cs @@ -1,4 +1,4 @@ -#define COSMOSDEBUG +//#define COSMOSDEBUG using System.IO; using IL2CPU.API.Attribs; using Cosmos.System; diff --git a/source/Cosmos.System2_Plugs/System/IO/FileStreamImpl.cs b/source/Cosmos.System2_Plugs/System/IO/FileStreamImpl.cs index 04c68b083..2a99f1926 100644 --- a/source/Cosmos.System2_Plugs/System/IO/FileStreamImpl.cs +++ b/source/Cosmos.System2_Plugs/System/IO/FileStreamImpl.cs @@ -1,4 +1,4 @@ -#define COSMOSDEBUG +//#define COSMOSDEBUG using global::System; using global::System.IO; using Cosmos.System; diff --git a/source/Cosmos.System2_Plugs/System/IO/StreamWriterImpl.cs b/source/Cosmos.System2_Plugs/System/IO/StreamWriterImpl.cs index e26eae6e7..daabe5f68 100644 --- a/source/Cosmos.System2_Plugs/System/IO/StreamWriterImpl.cs +++ b/source/Cosmos.System2_Plugs/System/IO/StreamWriterImpl.cs @@ -1,5 +1,7 @@ -using System.IO; - +using System; +using System.IO; +using System.Runtime.InteropServices; +using Cosmos.Debug.Kernel; using IL2CPU.API.Attribs; namespace Cosmos.System_Plugs.System.IO @@ -8,5 +10,7 @@ namespace Cosmos.System_Plugs.System.IO public static class StreamWriterImpl { public static void CheckAsyncTaskInProgress(StreamWriter aThis) { } + + } }