summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/expand/proc_macro.cpp36
-rw-r--r--src/hir/hir.cpp3
2 files changed, 30 insertions, 9 deletions
diff --git a/src/expand/proc_macro.cpp b/src/expand/proc_macro.cpp
index b3750a80..01a70a96 100644
--- a/src/expand/proc_macro.cpp
+++ b/src/expand/proc_macro.cpp
@@ -14,7 +14,9 @@
#include <hir/hir.hpp> // ABI_RUST
#include "proc_macro.hpp"
#include <parse/lex.hpp>
-#ifdef WIN32
+#ifdef _WIN32
+# define NOGDI // Don't include GDI functions (defines some macros that collide with mrustc ones)
+# include <Windows.h>
#else
# include <unistd.h> // read/write/pipe
# include <spawn.h>
@@ -673,7 +675,7 @@ namespace {
ProcMacroInv::ProcMacroInv(const Span& sp, const char* executable, const char* macro_name):
m_parent_span(sp)
{
-#ifdef WIN32
+#ifdef _WIN32
#else
int stdin_pipes[2];
pipe(stdin_pipes);
@@ -708,14 +710,17 @@ ProcMacroInv::ProcMacroInv(const Span& sp, const char* executable, const char* m
}
ProcMacroInv::ProcMacroInv(ProcMacroInv&& x):
m_parent_span(x.m_parent_span),
-#ifdef WIN32
+#ifdef _WIN32
+ child_handle(x.child_handle),
+ child_stdin(x.child_stdin),
+ child_stdout(x.child_stdout)
#else
child_pid(x.child_pid),
child_stdin(x.child_stdin),
child_stdout(x.child_stdout)
#endif
{
-#ifdef WIN32
+#ifdef _WIN32
#else
x.child_pid = 0;
#endif
@@ -724,7 +729,7 @@ ProcMacroInv::ProcMacroInv(ProcMacroInv&& x):
ProcMacroInv& ProcMacroInv::operator=(ProcMacroInv&& x)
{
m_parent_span = x.m_parent_span;
-#ifdef WIN32
+#ifdef _WIN32
#else
child_pid = x.child_pid;
child_stdin = x.child_stdin;
@@ -737,7 +742,7 @@ ProcMacroInv& ProcMacroInv::operator=(ProcMacroInv&& x)
}
ProcMacroInv::~ProcMacroInv()
{
-#ifdef WIN32
+#ifdef _WIN32
#else
if( this->child_pid != 0 )
{
@@ -752,7 +757,11 @@ ProcMacroInv::~ProcMacroInv()
bool ProcMacroInv::check_good()
{
char v;
+#ifdef _WIN32
+ int rv = ReadFile(this->child_stdout, &v, 1, nullptr, nullptr);
+#else
int rv = read(this->child_stdout, &v, 1);
+#endif
if( rv == 0 )
{
DEBUG("Unexpected EOF from child");
@@ -770,7 +779,7 @@ bool ProcMacroInv::check_good()
}
void ProcMacroInv::send_u8(uint8_t v)
{
-#ifdef WIN32
+#ifdef _WIN32
#else
write(this->child_stdin, &v, 1);
#endif
@@ -778,7 +787,7 @@ void ProcMacroInv::send_u8(uint8_t v)
void ProcMacroInv::send_bytes(const void* val, size_t size)
{
this->send_v128u( static_cast<uint64_t>(size) );
-#ifdef WIN32
+#ifdef _WIN32
#else
write(this->child_stdin, val, size);
#endif
@@ -794,8 +803,14 @@ void ProcMacroInv::send_v128u(uint64_t val)
uint8_t ProcMacroInv::recv_u8()
{
uint8_t v;
+#ifdef _WIN32
+ DWORD n;
+ if( !ReadFile(this->child_stdout, &v, 1, &n, nullptr) )
+ BUG(this->m_parent_span, "Unexpected EOF while reading from child process");
+#else
if( read(this->child_stdout, &v, 1) != 1 )
BUG(this->m_parent_span, "Unexpected EOF while reading from child process");
+#endif
return v;
}
::std::string ProcMacroInv::recv_bytes()
@@ -807,7 +822,12 @@ uint8_t ProcMacroInv::recv_u8()
size_t ofs = 0, rem = len;
while( rem > 0 )
{
+#ifdef _WIN32
+ DWORD n;
+ ReadFile(this->child_stdout, &val[ofs], rem, &n, nullptr);
+#else
auto n = read(this->child_stdout, &val[ofs], rem);
+#endif
if( n == 0 ) {
BUG(this->m_parent_span, "Unexpected EOF while reading from child process");
}
diff --git a/src/hir/hir.cpp b/src/hir/hir.cpp
index 99fac517..361a40c8 100644
--- a/src/hir/hir.cpp
+++ b/src/hir/hir.cpp
@@ -85,7 +85,7 @@ namespace HIR {
}
}
-size_t ::HIR::Enum::find_variant(const ::std::string& name) const
+size_t HIR::Enum::find_variant(const ::std::string& name) const
{
if( m_data.is_Value() )
{
@@ -121,6 +121,7 @@ uint32_t HIR::Enum::get_value(size_t idx) const
else
{
assert(!"TODO: Enum::get_value on non-value enum?");
+ throw "";
}
}