From 9d514e65f00dde0e309f33591f31fbf7f132a005 Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Wed, 12 Jun 2019 09:05:40 -0400 Subject: Runtime execution of Visual Studio Compiler (#978) * Work in progress to be able to invoke VS from within code. * First pass at windows version of refactor of OSProcessSpawner * Closer to getting VS path lookup working. * Make OSString assignable/ctor able * Work out program files directory directly, so don't have to expand %%. * WIP: Improve handling of process spawning. * Add support for splitting input by line. * * Correctly locates visual studio install * Added functionality to invoke vs via cmd * Add option to execute the command line. * Handle in ProcessUtil for windows -> WinHandle. * Rename files slang-win-visual-studio-util.cpp/.h and slang-process-util.h * First pass at unix/linux version of ProcessUtil. * Fix reading Visual Studio path from the registry. * Get compiling on linux with. * Fix vcvarsall.bat name * Use ProcessUtil to execute external code. * Remove OSProcessSpawner. * Remove includes for "os.h" where no longer needed. * Fix tabbing issue in premake5.lua Remove test code from slang-test-main.cpp * Fix premake4.lua tabbing issue. * Small fixes to slang-process-util.h Init ExecuteResult on Win execute. * Improve comments. * Fix bug in StringUtil::calcLines - with oddly terminated source input being able to read past end. Make slang-generate use StringUtil over it's own impl. * Fix off by one bug in working out Visual Studio version. * Fix bug in calculating Visual Studio Version * Fix compilation on linux with string parameter being passed to messageFormat. * Remove erroneous use of kOSError codes - use Result. --- source/core/slang-string.h | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) (limited to 'source/core/slang-string.h') diff --git a/source/core/slang-string.h b/source/core/slang-string.h index 1cd9e5413..4975e9ec6 100644 --- a/source/core/slang-string.h +++ b/source/core/slang-string.h @@ -292,9 +292,43 @@ namespace Slang class OSString { public: + /// Default OSString(); + /// NOTE! This assumes that begin is a new wchar_t[] buffer, and it will + /// now be owned by the OSString OSString(wchar_t* begin, wchar_t* end); - ~OSString(); + /// Move Ctor + OSString(OSString&& rhs): + m_begin(rhs.m_begin), + m_end(rhs.m_end) + { + rhs.m_begin = nullptr; + rhs.m_end = nullptr; + } + // Copy Ctor + OSString(const OSString& rhs) : + m_begin(nullptr), + m_end(nullptr) + { + set(rhs.m_begin, rhs.m_end); + } + + /// = + void operator=(const OSString& rhs) { set(rhs.m_begin, rhs.m_end); } + void operator=(OSString&& rhs) + { + auto begin = m_begin; + auto end = m_end; + m_begin = rhs.m_begin; + m_end = rhs.m_end; + rhs.m_begin = begin; + rhs.m_end = end; + } + + ~OSString() { _releaseBuffer(); } + + size_t getLength() const { return (m_end - m_begin); } + void set(const wchar_t* begin, const wchar_t* end); operator wchar_t const*() const { @@ -305,8 +339,11 @@ namespace Slang wchar_t const* end() const; private: - wchar_t* m_begin; - wchar_t* m_end; + + void _releaseBuffer(); + + wchar_t* m_begin; ///< First character. This is a new wchar_t[] buffer + wchar_t* m_end; ///< Points to terminating 0 }; /*! -- cgit v1.2.3