Commit 70fa76e9 authored by Adam Matoušek's avatar Adam Matoušek
Browse files

tiny vm: Fix handling of tracing options.

Fixes #3.
parent 2b4a490d
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -20,8 +20,8 @@ struct runner_config

    void options( brq::cmd_options &c )
    {
        c.opt( "--[no-]trace-triggers", trace_triggers )
            << "print out trigger-based traces";
        c.flag( "--trace-triggers", trace_triggers )
            << "print out trigger-based traces (enabled by default)";
        c.opt( "--trace-steps", trace_steps )
            << "print out every performed instruction";
        c.opt( "--trace-registers", trace_regs )
@@ -29,6 +29,11 @@ struct runner_config
        c.opt( "--steps-limit", max_steps )
            << "maximal number of operations before giving up (default 2¹⁶)";
    }

    bool is_tracing() const
    {
        return trace_steps || trace_regs;
    }
};

struct runner : state
@@ -50,9 +55,6 @@ struct runner : state
        : config( std::move( conf ) )
    {
        load( prog );

        if ( config.trace_regs )
            config.trace_steps = true;
    }

    runner( const runner & ) = delete;
@@ -121,7 +123,7 @@ struct runner : state

        ++steps;

        if ( config.trace_steps || dbg.ub_detected() )
        if ( config.is_tracing() || dbg.ub_detected() )
        {
            if ( config.trace_regs )
                gen_reg_trace();
@@ -201,7 +203,7 @@ struct runner : state

    void trace( auto &&... args )
    {
        if ( !config.trace_steps )
        if ( !config.is_tracing() )
            return;

        if ( !_trace.data().empty() )
@@ -231,7 +233,7 @@ struct runner : state

    void print_trace_header()
    {
        if ( !config.trace_steps )
        if ( !config.is_tracing() )
            return;

        std::cout << "  pc | inst op_1 op_2  out |";