summaryrefslogtreecommitdiff
path: root/src/source.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/source.cc')
-rw-r--r--src/source.cc39
1 files changed, 38 insertions, 1 deletions
diff --git a/src/source.cc b/src/source.cc
index 9234ea9..d714f29 100644
--- a/src/source.cc
+++ b/src/source.cc
@@ -4,9 +4,46 @@
#include "common.cc"
#include "memory.cc"
+typedef u32 Source_Id;
+
+struct Span {
+ Source_Id id;
+ usize start, end;
+
+ Span(Source_Id id, usize start, usize end) : id(id), start(start), end(end) {}
+};
+
struct Buffer {
- String content;
String file;
+ String content;
+ Link link;
+};
+
+bool buffer_init(Buffer* buffer, const Allocator* allocator, const String* content_in, const String* file_in) {
+ String content, file;
+ bool ret = slice_copy(allocator, content_in, &content);
+ if(unlikely(ret == false)) return false;
+
+ ret = slice_copy(allocator, file_in, &file);
+ if(unlikely(ret == false)) {
+ slice_deallocate(allocator, &content);
+ return false;
+ }
+
+ buffer->file = file;
+ buffer->content = content;
+ buffer->link = {};
+ return true;
+}
+
+void buffer_deinit(Buffer* buffer, const Allocator* allocator) {
+ slice_deallocate(allocator, &buffer->file);
+ slice_deallocate(allocator, &buffer->content);
+}
+
+struct Buffer_Stack {
+ Link* buffers;
+ usize nbuffers;
};
#endif