1 // Copyright 2017 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "banjo/source_manager.h"
6 
7 #include <utility>
8 
9 namespace banjo {
10 
CreateSource(StringView filename)11 bool SourceManager::CreateSource(StringView filename) {
12     FILE* file = fopen(filename.data(), "rb");
13     if (!file)
14         return false;
15 
16     // The lexer requires zero terminated data.
17     std::string data;
18     fseek(file, 0, SEEK_END);
19     auto filesize = ftell(file);
20     data.resize(filesize + 1);
21     rewind(file);
22     fread(&data[0], 1, filesize, file);
23     data[filesize] = 0;
24     fclose(file);
25 
26     AddSourceFile(std::make_unique<SourceFile>(filename, std::move(data)));
27     return true;
28 }
29 
AddSourceFile(std::unique_ptr<SourceFile> file)30 void SourceManager::AddSourceFile(std::unique_ptr<SourceFile> file) {
31     sources_.push_back(std::move(file));
32 }
33 
34 } // namespace banjo
35