mirror of
https://github.com/luau-lang/luau.git
synced 2025-05-04 10:33:46 +01:00
Only use stdio.h to read stdin, avoid using C++ I/O libraries
This commit is contained in:
parent
41336505c6
commit
f77d1e93c1
3 changed files with 28 additions and 11 deletions
|
@ -6,9 +6,6 @@
|
||||||
#include "Luau/TypeAttach.h"
|
#include "Luau/TypeAttach.h"
|
||||||
#include "Luau/Transpiler.h"
|
#include "Luau/Transpiler.h"
|
||||||
|
|
||||||
#include <iterator>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#include "FileUtils.h"
|
#include "FileUtils.h"
|
||||||
|
|
||||||
LUAU_FASTFLAG(DebugLuauTimeTracing)
|
LUAU_FASTFLAG(DebugLuauTimeTracing)
|
||||||
|
@ -124,22 +121,25 @@ struct CliFileResolver : Luau::FileResolver
|
||||||
{
|
{
|
||||||
std::optional<Luau::SourceCode> readSource(const Luau::ModuleName& name) override
|
std::optional<Luau::SourceCode> readSource(const Luau::ModuleName& name) override
|
||||||
{
|
{
|
||||||
|
Luau::SourceCode::Type sourceType;
|
||||||
|
std::optional<std::string> source = std::nullopt;
|
||||||
|
|
||||||
// If the module name is "-", then read source from stdin
|
// If the module name is "-", then read source from stdin
|
||||||
if (name == "-")
|
if (name == "-")
|
||||||
{
|
{
|
||||||
std::cin >> std::noskipws; // Do not skip whitespace when reading from stdin
|
source = readStdin();
|
||||||
std::string source {std::istreambuf_iterator<char>(std::cin), std::istreambuf_iterator<char>()};
|
sourceType = Luau::SourceCode::Script;
|
||||||
if (source.empty())
|
}
|
||||||
return std::nullopt;
|
else
|
||||||
|
{
|
||||||
return Luau::SourceCode{source, Luau::SourceCode::Script};
|
source = readFile(name);
|
||||||
|
sourceType = Luau::SourceCode::Module;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<std::string> source = readFile(name);
|
|
||||||
if (!source)
|
if (!source)
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
|
|
||||||
return Luau::SourceCode{*source, Luau::SourceCode::Module};
|
return Luau::SourceCode{*source, sourceType};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<Luau::ModuleInfo> resolveModule(const Luau::ModuleInfo* context, Luau::AstExpr* node) override
|
std::optional<Luau::ModuleInfo> resolveModule(const Luau::ModuleInfo* context, Luau::AstExpr* node) override
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#define READ_BUFFER_SIZE 4096
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
static std::wstring fromUtf8(const std::string& path)
|
static std::wstring fromUtf8(const std::string& path)
|
||||||
{
|
{
|
||||||
|
@ -74,6 +76,20 @@ std::optional<std::string> readFile(const std::string& name)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::optional<std::string> readStdin() {
|
||||||
|
std::string result;
|
||||||
|
char buffer[READ_BUFFER_SIZE] = { };
|
||||||
|
|
||||||
|
while (fgets(buffer, READ_BUFFER_SIZE, stdin) != nullptr)
|
||||||
|
result.append(buffer);
|
||||||
|
|
||||||
|
// If eof was not reached for stdin, then a read error occurred
|
||||||
|
if (!feof(stdin))
|
||||||
|
return std::nullopt;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename Ch>
|
template<typename Ch>
|
||||||
static void joinPaths(std::basic_string<Ch>& str, const Ch* lhs, const Ch* rhs)
|
static void joinPaths(std::basic_string<Ch>& str, const Ch* lhs, const Ch* rhs)
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
std::optional<std::string> readFile(const std::string& name);
|
std::optional<std::string> readFile(const std::string& name);
|
||||||
|
std::optional<std::string> readStdin();
|
||||||
|
|
||||||
bool isDirectory(const std::string& path);
|
bool isDirectory(const std::string& path);
|
||||||
bool traverseDirectory(const std::string& path, const std::function<void(const std::string& name)>& callback);
|
bool traverseDirectory(const std::string& path, const std::function<void(const std::string& name)>& callback);
|
||||||
|
|
Loading…
Add table
Reference in a new issue