summaryrefslogtreecommitdiff
path: root/gcc/d/dmd/file_manager.d
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/d/dmd/file_manager.d')
-rw-r--r--gcc/d/dmd/file_manager.d33
1 files changed, 18 insertions, 15 deletions
diff --git a/gcc/d/dmd/file_manager.d b/gcc/d/dmd/file_manager.d
index b86c7995562..9fe40bf0603 100644
--- a/gcc/d/dmd/file_manager.d
+++ b/gcc/d/dmd/file_manager.d
@@ -11,7 +11,7 @@
module dmd.file_manager;
import dmd.root.stringtable : StringTable;
-import dmd.root.file : File, FileBuffer;
+import dmd.root.file : File, Buffer;
import dmd.root.filename : FileName;
import dmd.root.string : toDString;
import dmd.globals;
@@ -22,7 +22,7 @@ enum package_di = "package." ~ hdr_ext;
final class FileManager
{
- private StringTable!(FileBuffer*) files;
+ private StringTable!(const(ubyte)[]) files;
///
public this () nothrow
@@ -146,7 +146,7 @@ nothrow:
* Returns: the loaded source file if it was found in memory,
* otherwise `null`
*/
- const(FileBuffer)* lookup(FileName filename)
+ const(ubyte)[] lookup(FileName filename)
{
const name = filename.toString;
if (auto val = files.lookup(name))
@@ -154,7 +154,7 @@ nothrow:
if (name == "__stdin.d")
{
- auto buffer = new FileBuffer(readFromStdin().extractSlice());
+ auto buffer = readFromStdin().extractSlice();
if (this.files.insert(name, buffer) is null)
assert(0, "stdin: Insert after lookup failure should never return `null`");
return buffer;
@@ -167,7 +167,7 @@ nothrow:
if (!readResult.success)
return null;
- FileBuffer* fb = new FileBuffer(readResult.extractSlice());
+ auto fb = readResult.extractSlice();
if (files.insert(name, fb) is null)
assert(0, "Insert after lookup failure should never return `null`");
@@ -187,17 +187,17 @@ nothrow:
const(char)[][] lines;
if (const buffer = lookup(file))
{
- const slice = buffer.data[0 .. buffer.data.length];
+ const slice = buffer;
size_t start, end;
- ubyte c;
for (auto i = 0; i < slice.length; i++)
{
- c = slice[i];
+ const c = slice[i];
if (c == '\n' || c == '\r')
{
if (i != 0)
{
end = i;
+ // Appending lines one at a time will certainly be slow
lines ~= cast(const(char)[])slice[start .. end];
}
// Check for Windows-style CRLF newlines
@@ -234,18 +234,21 @@ nothrow:
}
/**
- * Adds a FileBuffer to the table.
- *
- * Returns: The FileBuffer added, or null
+ * Adds the contents of a file to the table.
+ * Params:
+ * filename = name of the file
+ * buffer = contents of the file
+ * Returns:
+ * the buffer added, or null
*/
- FileBuffer* add(FileName filename, FileBuffer* filebuffer)
+ const(ubyte)[] add(FileName filename, const(ubyte)[] buffer)
{
- auto val = files.insert(filename.toString, filebuffer);
+ auto val = files.insert(filename.toString, buffer);
return val == null ? null : val.value;
}
}
-private FileBuffer readFromStdin() nothrow
+private Buffer readFromStdin() nothrow
{
import core.stdc.stdio;
import dmd.errors;
@@ -277,7 +280,7 @@ private FileBuffer readFromStdin() nothrow
// We're done
assert(pos < sz + 2);
buffer[pos .. pos + 4] = '\0';
- return FileBuffer(buffer[0 .. pos]);
+ return Buffer(buffer[0 .. pos]);
}
} while (pos < sz);