polserver/pol-core/bscript/compiler/Report.h
Kevin Eady 686090d950
Introduce DAP Debugger (#608)
* Add cppdap debugger library and simple server (#508)

* Add cppdap library

* Add cppdap server

* fixup cmake scripts for windows

* Enable caching of cppdap on GitHub actions

* Fix CMake for cppdap target

* Wait 1s for session close before thread ends

* Address review comments
- Remove unnecessary use of wait_for
- Fix wait_for method

* Do not use SocketClientThread for cppdap clients

* Address review comments
- Cleanup object ownership

* Add authorization and event handling (#510)

* Add authorization and event handling [WIP]

* Use std::weak_ptr; Only allow one debugger conn

* Only attach debugger if dbg file exists

* Cleanup weak_ptr; Fix listeners; Add handler stubs

* Address review comments
- PolLock on uoexec and weakptr access
- Use make_shared when creating client thread

* Add ExecutorDebugListener on_destroy callback

* Use cppdap sockets instead of clib sockets

* Update cppdap repository to 2703cf4

* Implement server address binding

* Update cppdap repository to eeca5ce

* Fix warnings

* Use weak_from_this

* Fix stalled executors on disconnect

* Fix stalled executors on re-attach

* Clear uoexec weakptr on all debugger detaches

* Move server to gamestate

* move DapDebugServer into Network namespace

* move DapDebugServer into GameState for storage

* Move DapDebugServer into NetworkManager

* Fix missing memory include

* Add more events (#513)

* Add more events

* Implement dbg_step_out

* Fix breakpoint clearing

* Add even more events (#515)

* add launch request

* Add custom `processes` command

* fixup loop

* Refactoring to move handlers to member functions

* Add VariablesRequest and ScopesRequest

* use std::varaint for Handles

* add pollocks

* refactor Handles to new file

* move custom messages to proto.h

* move clientthread

* some formatting / cleanup

* Add missing PolLock

* move dap variables creation to Handles

* appobj members

* rename ClientThread to DebugClientThread

* rename LaunchRequest args to arg

* Fix compiler error on size_t

* Add support for EvaluateRequest and SetVariableRequest (#519)

* Update grammar for evaluateUnit

* Cleanup various compiler code

* Add support for EvaluateRequest
Only supports values, variables, element access, member access

* Add report clearing to reinitialize state

* Add support for SetVariableRequest

* Fix CI build errors

* Move ExpressionEvaluator to Bscript

* Fix formatting

* Fix include

* Refactor global and frame variable references

* Encapsulate Executor debugging environment; Fix step over (#524)

* Fix step over

* Some cleanup of executor
- Remove unused debug states
- Rename members for consistency

* move debugging environment to new class

* Move instruction inspection to class

* Cleanup slashes on Windows; Add Executor state to processes response (#527)

* Fix backspaces in script names on Windows

* Fix compilation warnings with data loss

* Use boost::icontains for string comparison

* Add Executor state to processes response

* Updates for libfmt

* Fix tests; Fix cppdap build for Mac universal binary (#607)

* fix tests

* fix cppdap build for mac universal binary

* Update cppdap to 2a4c7cf

* Add tests; Modify launch behavior to not stop at entry (redo) (#609)

* Remove unused setExceptionBreakpoints handler

* Add debugger tests

* Launching a script should not set attaching state

* Add launch tests

* Do not check for connection in debugger tests

* Rename `program` to `script` in protocol structs

* Fix launch stopAtEntry; quote string var values

* Fix compilation error on Windows

* Add configfiles doc entry

* Various fixes for finishing touches; Add core-changes (#610)

* switch cmake projects

* simple docs

* cmake move make_directory

* Fix launch request with relative, absolute, package paths

* make relative paths as absolute in source request

* Add true, false, uninit to ExpressionEvaluator

* Re-add setExceptionBreakpoints to avoid unhandled message errors

* Better debug thread logging with instance numbers

* launched scripts should terminate on disconnect (according to DAP spec)

* Properly handle exited event in client thread

* Add core-changes

* Address Discord comments
- Mention vscode-escript in core-changes
- Re-add "cppdap already built" in cmake

* change cmake escriptgrammarlib visibility to public
2024-01-28 09:49:55 +01:00

93 lines
2.4 KiB
C++

#ifndef POLSERVER_REPORT_H
#define POLSERVER_REPORT_H
#include "bscript/compiler/ast/Node.h"
namespace Pol::Bscript::Compiler
{
class SourceLocation;
class Report
{
public:
explicit Report( bool display_warnings, bool display_errors = true );
Report( const Report& ) = delete;
Report& operator=( const Report& ) = delete;
template <typename Str, typename... Args>
inline void error( const SourceLocation& source_location, Str const& format, Args&&... args )
{
if ( display_errors )
{
auto msg = fmt::format( format, args... );
report_error( source_location, msg.c_str() );
}
else
{
++errors;
}
}
template <typename Str, typename... Args>
inline void error( const SourceFileIdentifier& ident, Str const& format, Args&&... args )
{
SourceLocation loc( &ident, 0, 0 );
error( loc, format, args... );
}
template <typename Str, typename... Args>
inline void error( const Node& node, Str const& format, Args&&... args )
{
error( node.source_location, format, args... );
}
// Report.fatal: use this when it's not possible to continue after a user-facing error.
//
template <typename Str, typename... Args>
[[noreturn]] inline void fatal( const SourceLocation& source_location, Str const& format,
Args&&... args )
{
auto msg = fmt::format( format, args... );
report_error( source_location, msg.c_str() );
throw std::runtime_error( msg.c_str() );
}
template <typename Str, typename... Args>
inline void warning( const SourceLocation& source_location, Str const& format, Args&&... args )
{
if ( display_warnings )
{
auto msg = fmt::format( format, args... );
report_warning( source_location, msg.c_str() );
}
else
{
++warnings;
}
}
template <typename Str, typename... Args>
inline void warning( const Node& node, Str const& format, Args&&... args )
{
warning( node.source_location, format, args... );
}
[[nodiscard]] unsigned error_count() const;
[[nodiscard]] unsigned warning_count() const;
void reset();
private:
void report_error( const SourceLocation&, const char* msg );
void report_warning( const SourceLocation&, const char* msg );
const bool display_warnings;
const bool display_errors;
unsigned errors;
unsigned warnings;
};
} // namespace Pol::Bscript::Compiler
#endif // POLSERVER_REPORT_H