Call to virtual method ... during construction bypasses virtual dispatch (scan-build / clang analyzer)
This commit is contained in:
parent
a28b575fb7
commit
6d7f3d9512
14 changed files with 55 additions and 12 deletions
|
@ -305,13 +305,19 @@ void setup() {
|
|||
cnsl = new console_esp32(&stop_event, serial_ports, 80, 25);
|
||||
#endif
|
||||
cnsl->set_bus(b);
|
||||
cnsl->begin();
|
||||
|
||||
running = cnsl->get_running_flag();
|
||||
|
||||
Serial.println(F("Connect RK05 and RL02 to BUS"));
|
||||
b->add_rk05(new rk05(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag()));
|
||||
Serial.println(F("Connect RK05 and RL02 devices to BUS"));
|
||||
auto rk05_dev = new rk05(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag());
|
||||
rk05_dev->begin();
|
||||
b->add_rk05(rk05_dev);
|
||||
|
||||
auto rl02_dev = new rl02(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag());
|
||||
rl02_dev->begin();
|
||||
b->add_rl02(rl02_dev);
|
||||
|
||||
b->add_rl02(new rl02(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag()));
|
||||
|
||||
Serial.println(F("Init TTY"));
|
||||
tty_ = new tty(cnsl, b);
|
||||
|
|
1
bus.cpp
1
bus.cpp
|
@ -24,6 +24,7 @@
|
|||
bus::bus()
|
||||
{
|
||||
mmu_ = new mmu();
|
||||
mmu_->begin();
|
||||
|
||||
kw11_l_ = new kw11_l(this);
|
||||
|
||||
|
|
|
@ -46,6 +46,10 @@ console::~console()
|
|||
delete [] screen_buffer;
|
||||
}
|
||||
|
||||
void console::begin()
|
||||
{
|
||||
}
|
||||
|
||||
void console::start_thread()
|
||||
{
|
||||
assert(b);
|
||||
|
|
|
@ -61,6 +61,8 @@ public:
|
|||
console(std::atomic_uint32_t *const stop_event, const int t_width = 80, const int t_height = 25);
|
||||
virtual ~console();
|
||||
|
||||
virtual void begin();
|
||||
|
||||
void set_bus(bus *const b) { this->b = b; }
|
||||
|
||||
void start_thread();
|
||||
|
|
|
@ -16,10 +16,6 @@
|
|||
console_ncurses::console_ncurses(std::atomic_uint32_t *const stop_event): console(stop_event)
|
||||
{
|
||||
init_ncurses(true);
|
||||
|
||||
resize_terminal();
|
||||
|
||||
th_panel = new std::thread(&console_ncurses::panel_update_thread, this);
|
||||
}
|
||||
|
||||
console_ncurses::~console_ncurses()
|
||||
|
@ -51,6 +47,13 @@ console_ncurses::~console_ncurses()
|
|||
endwin();
|
||||
}
|
||||
|
||||
void console_ncurses::begin()
|
||||
{
|
||||
resize_terminal();
|
||||
|
||||
th_panel = new std::thread(&console_ncurses::panel_update_thread, this);
|
||||
}
|
||||
|
||||
int console_ncurses::wait_for_char_ll(const short timeout)
|
||||
{
|
||||
struct pollfd fds[] = { { STDIN_FILENO, POLLIN, 0 } };
|
||||
|
|
|
@ -32,6 +32,8 @@ public:
|
|||
console_ncurses(std::atomic_uint32_t *const stop_event);
|
||||
virtual ~console_ncurses();
|
||||
|
||||
void begin() override;
|
||||
|
||||
void put_string_lf(const std::string & what) override;
|
||||
|
||||
void resize_terminal() override;
|
||||
|
|
|
@ -18,5 +18,7 @@ public:
|
|||
virtual ~disk_device() {
|
||||
}
|
||||
|
||||
virtual void begin() = 0;
|
||||
|
||||
std::vector<disk_backend *> * access_disk_backends() { return &fhs; }
|
||||
};
|
||||
|
|
9
main.cpp
9
main.cpp
|
@ -534,9 +534,13 @@ int main(int argc, char *argv[])
|
|||
if (enable_bootloader)
|
||||
set_boot_loader(b, bootloader);
|
||||
|
||||
b->add_rk05(new rk05(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag()));
|
||||
auto rk05_dev = new rk05(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag());
|
||||
rk05_dev->begin();
|
||||
b->add_rk05(rk05_dev);
|
||||
|
||||
b->add_rl02(new rl02(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag()));
|
||||
auto rl02_dev = new rl02(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag());
|
||||
rl02_dev->begin();
|
||||
b->add_rl02(rl02_dev);
|
||||
}
|
||||
else {
|
||||
FILE *fh = fopen(deserialize.c_str(), "r");
|
||||
|
@ -566,6 +570,7 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
cnsl->set_bus(b);
|
||||
cnsl->begin();
|
||||
|
||||
running = cnsl->get_running_flag();
|
||||
|
||||
|
|
7
mmu.cpp
7
mmu.cpp
|
@ -9,13 +9,17 @@
|
|||
|
||||
mmu::mmu()
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
mmu::~mmu()
|
||||
{
|
||||
}
|
||||
|
||||
void mmu::begin()
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
void mmu::reset()
|
||||
{
|
||||
memset(pages, 0x00, sizeof pages);
|
||||
|
@ -265,6 +269,7 @@ void mmu::set_par_pdr(const json_t *const j_in, const int run_mode, const bool i
|
|||
mmu *mmu::deserialize(const json_t *const j)
|
||||
{
|
||||
mmu *m = new mmu();
|
||||
m->begin();
|
||||
|
||||
for(int run_mode=0; run_mode<4; run_mode++) {
|
||||
if (run_mode == 2)
|
||||
|
|
2
mmu.h
2
mmu.h
|
@ -50,6 +50,8 @@ public:
|
|||
mmu();
|
||||
virtual ~mmu();
|
||||
|
||||
void begin();
|
||||
|
||||
#if IS_POSIX
|
||||
json_t *serialize() const;
|
||||
static mmu *deserialize(const json_t *const j);
|
||||
|
|
6
rk05.cpp
6
rk05.cpp
|
@ -28,7 +28,6 @@ rk05::rk05(bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomi
|
|||
disk_read_acitivity(disk_read_acitivity),
|
||||
disk_write_acitivity(disk_write_acitivity)
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
rk05::~rk05()
|
||||
|
@ -37,6 +36,11 @@ rk05::~rk05()
|
|||
delete fh;
|
||||
}
|
||||
|
||||
void rk05::begin()
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
void rk05::reset()
|
||||
{
|
||||
memset(registers, 0x00, sizeof registers);
|
||||
|
|
1
rk05.h
1
rk05.h
|
@ -42,6 +42,7 @@ public:
|
|||
rk05(bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomic_bool *const disk_write_acitivity);
|
||||
virtual ~rk05();
|
||||
|
||||
void begin() override;
|
||||
void reset() override;
|
||||
|
||||
uint8_t readByte(const uint16_t addr) override;
|
||||
|
|
7
rl02.cpp
7
rl02.cpp
|
@ -36,7 +36,6 @@ rl02::rl02(bus *const b, std::atomic_bool *const disk_read_activity, std::atomic
|
|||
disk_read_activity (disk_read_activity ),
|
||||
disk_write_activity(disk_write_activity)
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
rl02::~rl02()
|
||||
|
@ -45,6 +44,11 @@ rl02::~rl02()
|
|||
delete fh;
|
||||
}
|
||||
|
||||
void rl02::begin()
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
void rl02::reset()
|
||||
{
|
||||
memset(registers, 0x00, sizeof registers );
|
||||
|
@ -85,6 +89,7 @@ rl02 *rl02::deserialize(const json_t *const j, bus *const b)
|
|||
std::vector<disk_backend *> backends;
|
||||
|
||||
rl02 *r = new rl02(b, nullptr, nullptr);
|
||||
r->begin();
|
||||
|
||||
json_t *j_backends = json_object_get(j, "backends");
|
||||
for(size_t i=0; i<json_array_size(j_backends); i++)
|
||||
|
|
1
rl02.h
1
rl02.h
|
@ -50,6 +50,7 @@ public:
|
|||
rl02(bus *const b, std::atomic_bool *const disk_read_activity, std::atomic_bool *const disk_write_activity);
|
||||
virtual ~rl02();
|
||||
|
||||
void begin() override;
|
||||
void reset() override;
|
||||
|
||||
#if IS_POSIX
|
||||
|
|
Loading…
Add table
Reference in a new issue