History

Merged in remove_usings (pull request #15)

Remove using statements and minor GC improvement

Aaron R Robinson committed 9 years ago

Commit dd16d0c2 parents 36183b4 4697a6a32 files · +780 −480Browse files

Unified · Split

32 files
  1. src/asm/print_to_stream.cpp +0 −2
  2. src/asm/sbl_reader.cpp +32 −25
  3. src/asm/type_signature.cpp +5 −1
  4. src/exec/debugger.cpp +52 −24
  5. src/exec/main.cpp +50 −21
  6. src/include/runtime.h +15 −15
  7. src/vm/array.cpp +19 −11
  8. src/vm/builtin_module.cpp +2 −2
  9. src/vm/channel.cpp +27 −18
  10. src/vm/execution_table.cpp +13 −13
  11. src/vm/garbage_collector.cpp +78 −64
  12. src/vm/garbage_collector.h +3 −2
  13. src/vm/list.cpp +12 −5
  14. src/vm/math/Mathmod.cpp +15 −4
  15. src/vm/math/Mathmod.h +9 −2
  16. src/vm/module_reader.cpp +52 −28
  17. src/vm/module_ref.cpp +26 −12
  18. src/vm/module_resolver.cpp +10 −5
  19. src/vm/scheduler.cpp +33 −24
  20. src/vm/stack.cpp +27 −19
  21. src/vm/string.cpp +24 −19
  22. src/vm/sys/Sysmod.cpp +62 −47
  23. src/vm/sys/Sysmod.h +9 −2
  24. src/vm/sys/fd_manager.cpp +2 −1
  25. src/vm/sys/file_system.cpp +0 −2
  26. src/vm/sys/print.cpp +4 −2
  27. src/vm/thread.cpp +38 −19
  28. src/vm/tool_dispatch.cpp +36 −17
  29. src/vm/utf8.cpp +21 −20
  30. src/vm/vm.cpp +51 −26
  31. src/vm/vm_exception_handler.cpp +10 −6
  32. src/vm/vm_memory.cpp +43 −22
src/asm/print_to_stream.cpp+0−2
@@ -7,8 +7,6 @@ · 6 unmodified lines
77 #include <ostream>
88 #include <vm_asm.h>
99
10−using namespace disvm::runtime;
11−
1210 std::ostream& disvm::runtime::operator<<(std::ostream &ss, const inst_data_generic_t &m)
1311 {
1412 switch (m.mode)
src/asm/sbl_reader.cpp+32−25
@@ -13,8 +13,15 @@ · 12 unmodified lines
1313 #include <utils.h>
1414 #include <buffered_reader.h>
1515
16−using namespace disvm;
17−using namespace disvm::symbol;
16+using disvm::runtime::vm_pc_t;
17+
18+using disvm::symbol::advance_pc_t;
19+using disvm::symbol::function_data_t;
20+using disvm::symbol::function_name_format_t;
21+using disvm::symbol::source_ref_t;
22+using disvm::symbol::symbol_data_t;
23+using disvm::symbol::symbol_pc_iter_t;
24+using disvm::symbol::type_class_t;
1825
1926 namespace
2027 {
@@ -67,8 +74,8 @@ namespace · 46 unmodified lines
6774
6875 struct func_item_t
6976 {
70− runtime::vm_pc_t entry_pc;
71− runtime::vm_pc_t limit_pc;
77+ vm_pc_t entry_pc;
78+ vm_pc_t limit_pc;
7279 std::string name;
7380 id_table_t args;
7481 id_table_t locals;
@@ -195,7 +202,7 @@ namespace · 120 unmodified lines
195202
196203 // header: <magic> '\n' module '\n'
197204 // module: <string>
198− header_t read_header(util::buffered_reader_t &r)
205+ header_t read_header(disvm::util::buffered_reader_t &r)
199206 {
200207 header_t header;
201208 auto v = r.get_as_string_until('\n');
@@ -213,7 +220,7 @@ namespace · 11 unmodified lines
213220
214221 // file-table: <count> '\n' file*
215222 // file: <string> '\n'
216− file_table_t read_file_table(util::buffered_reader_t &r)
223+ file_table_t read_file_table(disvm::util::buffered_reader_t &r)
217224 {
218225 auto count_str = r.get_as_string_until('\n');
219226
@@ -236,7 +243,7 @@ namespace · 16 unmodified lines
236243 // char: <int>
237244 source_ref_t read_src_entry(const std::string &src_str, sbl_read_context_t &fc)
238245 {
239− auto src_parts = util::split(src_str, ",");
246+ auto src_parts = disvm::util::split(src_str, ",");
240247 if (src_parts.size() != 2)
241248 throw std::runtime_error{ "Invalid source item" };
242249
@@ -289,7 +296,7 @@ namespace · 46 unmodified lines
289296 // pc-table: <count> '\n' pc-item*
290297 // pc-item: src ' ' stmt '\n'
291298 // stmt: <int>
292− pc_table_t read_pc_table(util::buffered_reader_t &r, sbl_read_context_t &fc)
299+ pc_table_t read_pc_table(disvm::util::buffered_reader_t &r, sbl_read_context_t &fc)
293300 {
294301 auto count_str = r.get_as_string_until('\n');
295302
@@ -303,7 +310,7 @@ namespace · 7 unmodified lines
303310 {
304311 auto item = r.get_as_string_until('\n');
305312
306− auto pc_item_parts = util::split(item);
313+ auto pc_item_parts = disvm::util::split(item);
307314 if (pc_item_parts.size() != 2)
308315 throw std::runtime_error{ "Invalid PC item" };
309316
@@ -323,13 +330,13 @@ namespace · 13 unmodified lines
323330 }
324331
325332 // Forward declaration
326− type_t read_type(util::buffered_reader_t &, type_table_t &, sbl_read_context_t &);
333+ type_t read_type(disvm::util::buffered_reader_t &, type_table_t &, sbl_read_context_t &);
327334
328335 // id-table: <count> '\n' id-item*
329336 // id-item: id-offset ':' id-name ':' src ' ' type '\n'
330337 // id-offset: <int>
331338 // id-name: <string>
332− id_table_t read_id_table(util::buffered_reader_t &r, type_table_t &tt, sbl_read_context_t &fc)
339+ id_table_t read_id_table(disvm::util::buffered_reader_t &r, type_table_t &tt, sbl_read_context_t &fc)
333340 {
334341 auto count_str = r.get_as_string_until('\n');
335342 int32_t count = std::stoi(count_str);
@@ -376,7 +383,7 @@ namespace · 40 unmodified lines
376383 // tag-item: tag-name ':' src ' ' size '\n' id-table
377384 // | tag-name ':' src '\n'
378385 // tag-name: <string>
379− name_source_size_t create_name_source_size(std::vector<std::string> &parts, util::buffered_reader_t &r, type_table_t &tt, sbl_read_context_t &fc)
386+ name_source_size_t create_name_source_size(std::vector<std::string> &parts, disvm::util::buffered_reader_t &r, type_table_t &tt, sbl_read_context_t &fc)
380387 {
381388 assert(parts.size() == 2 || parts.size() == 3);
382389 name_source_size_t item;
@@ -411,7 +418,7 @@ namespace · 28 unmodified lines
411418 // 'f' # Real
412419 // 's' # String
413420 // type-index: <int>
414− type_t read_type(util::buffered_reader_t &r, type_table_t &tt, sbl_read_context_t &fc)
421+ type_t read_type(disvm::util::buffered_reader_t &r, type_table_t &tt, sbl_read_context_t &fc)
415422 {
416423 bool success;
417424 uint8_t tc_byte;
@@ -452,7 +459,7 @@ namespace · 34 unmodified lines
452459 case type_class_t::adt_pick:
453460 {
454461 auto adt_line = r.get_as_string_until('\n');
455− auto adt_parts = util::split(adt_line);
462+ auto adt_parts = disvm::util::split(adt_line);
456463 if (adt_parts.size() != 3)
457464 throw std::runtime_error{ "Invalid adt item" };
458465
@@ -468,7 +475,7 @@ namespace · 9 unmodified lines
468475 for (auto i = 0; i < count; ++i)
469476 {
470477 tmp = r.get_as_string_until('\n');
471− auto tag_parts = util::split(tmp, " :");
478+ auto tag_parts = disvm::util::split(tmp, " :");
472479 if (tag_parts.size() != 2 && tag_parts.size() != 3)
473480 throw std::runtime_error{ "Invalid tag item" };
474481
@@ -530,7 +537,7 @@ namespace · 55 unmodified lines
530537 }
531538
532539 // type-table: <count> '\n' type*
533− type_table_t read_type_table(util::buffered_reader_t &r, sbl_read_context_t &fc)
540+ type_table_t read_type_table(disvm::util::buffered_reader_t &r, sbl_read_context_t &fc)
534541 {
535542 auto count_str = r.get_as_string_until('\n');
536543
@@ -550,7 +557,7 @@ namespace · 13 unmodified lines
550557 // args: id-table
551558 // locals: id-table
552559 // return: type
553− func_table_t read_func_table(util::buffered_reader_t &r, type_table_t &tt, sbl_read_context_t &fc)
560+ func_table_t read_func_table(disvm::util::buffered_reader_t &r, type_table_t &tt, sbl_read_context_t &fc)
554561 {
555562 auto count_str = r.get_as_string_until('\n');
556563
@@ -582,7 +589,7 @@ namespace · 25 unmodified lines
582589 }
583590
584591 // data-table: id-table
585− id_table_t read_data_table(util::buffered_reader_t &r, type_table_t &tt, sbl_read_context_t &fc)
592+ id_table_t read_data_table(disvm::util::buffered_reader_t &r, type_table_t &tt, sbl_read_context_t &fc)
586593 {
587594 return read_id_table(r, tt, fc);
588595 }
@@ -662,11 +669,11 @@ namespace · 73 unmodified lines
662669 {
663670 std::stringstream ss;
664671
665− const auto inc_name = util::has_flag(fmt, function_name_format_t::name);
672+ const auto inc_name = disvm::util::has_flag(fmt, function_name_format_t::name);
666673 if (inc_name)
667674 ss << f.name;
668675
669− const auto inc_arguments = util::has_flag(fmt, function_name_format_t::arguments);
676+ const auto inc_arguments = disvm::util::has_flag(fmt, function_name_format_t::arguments);
670677 if (inc_arguments)
671678 {
672679 ss << '(';
@@ -685,7 +692,7 @@ namespace · 12 unmodified lines
685692 }
686693
687694 // Only add the return value if it is not 'none'
688− if (util::has_flag(fmt, function_name_format_t::return_type)
695+ if (disvm::util::has_flag(fmt, function_name_format_t::return_type)
689696 && f.return_type.type_class != type_class_t::none)
690697 {
691698 if (inc_name || inc_arguments)
@@ -714,9 +721,9 @@ namespace · 22 unmodified lines
714721 _current_pc = pc;
715722 }
716723
717− bool try_advance_pc(advance_pc_t adv, disvm::runtime::vm_pc_t *pc_after_advance) override
724+ bool try_advance_pc(advance_pc_t adv, vm_pc_t *pc_after_advance) override
718725 {
719− runtime::vm_pc_t new_pc = _current_pc;
726+ vm_pc_t new_pc = _current_pc;
720727 switch (adv)
721728 {
722729 case advance_pc_t::next_debug_statement:
@@ -738,7 +745,7 @@ namespace · 15 unmodified lines
738745 }
739746
740747 case advance_pc_t::next_pc:
741− if (new_pc + 1 >= static_cast<runtime::vm_pc_t>(_file->pc_table.size()))
748+ if (new_pc + 1 >= static_cast<vm_pc_t>(_file->pc_table.size()))
742749 return false;
743750 ++new_pc;
744751 break;
@@ -791,7 +798,7 @@ namespace · 46 unmodified lines
791798 }
792799
793800 private:
794− runtime::vm_pc_t _current_pc;
801+ vm_pc_t _current_pc;
795802 std::shared_ptr<const sbl_file_t> _file;
796803 };
797804
src/asm/type_signature.cpp+5−1
@@ -9,7 +9,11 @@ · 8 unmodified lines
99 #include "rfc1321/global.h"
1010 #include "rfc1321/md5.h"
1111
12−using namespace disvm::assembly::sigkind;
12+using disvm::assembly::sigkind::sig_stream_t;
13+using disvm::assembly::sigkind::Tadt_pick_tag;
14+using disvm::assembly::sigkind::Tfixed;
15+using disvm::assembly::sigkind::Tm;
16+using disvm::assembly::sigkind::Ttype_ref;
1317
1418 namespace
1519 {
src/exec/debugger.cpp+52−24
@@ -18,8 +18,36 @@ · 17 unmodified lines
1818 #include <exceptions.h>
1919 #include "exec.h"
2020
21−using namespace disvm;
22−using namespace disvm::runtime;
21+using disvm::vm_t;
22+using disvm::loaded_vm_module_t;
23+using disvm::opcode_t;
24+
25+using disvm::runtime::type_descriptor_t;
26+using disvm::runtime::intrinsic_type_desc;
27+using disvm::runtime::word_t;
28+using disvm::runtime::pointer_t;
29+using disvm::runtime::module_id_t;
30+using disvm::runtime::runtime_flags_t;
31+using disvm::runtime::cookie_t;
32+using disvm::runtime::vm_pc_t;
33+using disvm::runtime::vm_registers_t;
34+using disvm::runtime::vm_module_t;
35+using disvm::runtime::vm_module_ref_t;
36+using disvm::runtime::vm_alloc_t;
37+using disvm::runtime::vm_string_t;
38+using disvm::runtime::vm_array_t;
39+using disvm::runtime::vm_list_t;
40+using disvm::runtime::vm_channel_t;
41+using disvm::runtime::vm_thread_state_t;
42+using disvm::runtime::vm_trap_flags_t;
43+using disvm::runtime::vm_term_request;
44+using disvm::runtime::vm_tool_controller_t;
45+using disvm::runtime::vm_event_t;
46+using disvm::runtime::vm_event_context_t;
47+
48+using disvm::symbol::function_name_format_t;
49+using disvm::symbol::advance_pc_t;
50+using disvm::symbol::symbol_data_t;
2351
2452 namespace
2553 {
@@ -146,7 +174,7 @@ namespace · 120 unmodified lines
146174 auto msg = std::stringstream{};
147175 walk_stack(r, [&msg, &dbg](const pointer_t, const vm_pc_t pc, const vm_module_ref_t &module_ref)
148176 {
149− auto func_maybe = dbg.resolve_to_function_source_line(module_ref.module->vm_id, pc, pc, symbol::function_name_format_t::name);
177+ auto func_maybe = dbg.resolve_to_function_source_line(module_ref.module->vm_id, pc, pc, function_name_format_t::name);
150178 if (!func_maybe.empty())
151179 {
152180 assert(func_maybe.size() == 1);
@@ -507,7 +535,7 @@ namespace · 354 unmodified lines
507535 {
508536 throw debug_cmd_error_t{ "Invalid module ID" };
509537 }
510− else if (util::has_flag(module->header.runtime_flag, runtime_flags_t::builtin))
538+ else if (disvm::util::has_flag(module->header.runtime_flag, runtime_flags_t::builtin))
511539 {
512540 throw debug_cmd_error_t{ "Unable to set breakpoint in built-in module" };
513541 }
@@ -569,7 +597,7 @@ namespace · 55 unmodified lines
569597 << std::setw(16) << details.module->module_name->str()
570598 << std::setw(0);
571599
572− auto func_maybe = cxt.dbg.resolve_to_function_source_line(details.module->vm_id, details.pc, details.pc, symbol::function_name_format_t::name);
600+ auto func_maybe = cxt.dbg.resolve_to_function_source_line(details.module->vm_id, details.pc, details.pc, function_name_format_t::name);
573601 if (!func_maybe.empty())
574602 {
575603 assert(func_maybe.size() == 1);
@@ -720,7 +748,7 @@ namespace · 144 unmodified lines
720748 end_pc = std::min(end_maybe, static_cast<int32_t>(code_section.size() - 1));
721749 }
722750
723− auto resolved_pc = dbg.resolve_to_function_source_line(r.module_ref->module->vm_id, begin_pc, end_pc, symbol::function_name_format_t::name);
751+ auto resolved_pc = dbg.resolve_to_function_source_line(r.module_ref->module->vm_id, begin_pc, end_pc, function_name_format_t::name);
724752 assert(resolved_pc.empty() || resolved_pc.size() == (end_pc - begin_pc + 1) && "Resolved PCs should have failed or match the PC count");
725753
726754 auto msg = std::stringstream{};
@@ -817,7 +845,7 @@ namespace · 90 unmodified lines
817845 auto value_is_pointer = bool{ false };
818846 const auto pointer_offset1 = byte_offset1 / pointer_size;
819847 auto value_to_examine = reinterpret_cast<pointer_t>(base_pointer[pointer_offset1]);
820− if (runtime::is_offset_pointer(*base_type, pointer_offset1))
848+ if (disvm::runtime::is_offset_pointer(*base_type, pointer_offset1))
821849 {
822850 value_is_pointer = true;
823851 auto alloc_to_examine = vm_alloc_t::from_allocation(value_to_examine);
@@ -835,7 +863,7 @@ namespace · 11 unmodified lines
835863
836864 const auto pointer_offset2 = byte_offset2 / pointer_size;
837865 value_to_examine = reinterpret_cast<pointer_t>(base_pointer[pointer_offset2]);
838− value_is_pointer = runtime::is_offset_pointer(*base_type, pointer_offset2);
866+ value_is_pointer = disvm::runtime::is_offset_pointer(*base_type, pointer_offset2);
839867 }
840868 }
841869
@@ -1022,7 +1050,7 @@ namespace · 180 unmodified lines
10221050
10231051 void execute_single_command(dbg_cmd_cxt_t &cxt, std::string cmd)
10241052 {
1025− const auto cmd_tokens = util::split(cmd);
1053+ const auto cmd_tokens = disvm::util::split(cmd);
10261054 if (cmd_tokens.empty())
10271055 return;
10281056
@@ -1081,9 +1109,9 @@ namespace · 52 unmodified lines
10811109
10821110 std::ostream& operator<<(std::ostream &ss, const debugger_options o)
10831111 {
1084− ss << "Break on enter: " << std::boolalpha << util::has_flag(o, debugger_options::break_on_enter) << "\n"
1085− << "Break on module load: " << std::boolalpha << util::has_flag(o, debugger_options::break_on_module_load) << "\n"
1086− << "Break on exception: " << std::boolalpha << util::has_flag(o, debugger_options::break_on_exception) << "\n";
1112+ ss << "Break on enter: " << std::boolalpha << disvm::util::has_flag(o, debugger_options::break_on_enter) << "\n"
1113+ << "Break on module load: " << std::boolalpha << disvm::util::has_flag(o, debugger_options::break_on_module_load) << "\n"
1114+ << "Break on exception: " << std::boolalpha << disvm::util::has_flag(o, debugger_options::break_on_exception) << "\n";
10871115
10881116 return ss;
10891117 }
@@ -1096,10 +1124,10 @@ debugger::debugger(const debugger_options opt) · 6 unmodified lines
10961124 { }
10971125
10981126 std::vector<std::string> debugger::resolve_to_function_source_line(
1099− disvm::runtime::module_id_t vm_id,
1127+ module_id_t vm_id,
11001128 vm_pc_t begin_pc,
11011129 vm_pc_t end_pc,
1102− symbol::function_name_format_t fmt) const
1130+ function_name_format_t fmt) const
11031131 {
11041132 auto iter = _vm_id_to_symbol_info.find(vm_id);
11051133 if (iter == std::cend(_vm_id_to_symbol_info))
@@ -1129,18 +1157,18 @@ std::vector<std::string> debugger::resolve_to_function_source_line( · 23 unmodified lines
11291157
11301158 resolved_functions_by_pc[next_pc - begin_pc] = std::move(ss.str());
11311159
1132− } while (d.try_advance_pc(symbol::advance_pc_t::next_debug_statement, &next_pc));
1160+ } while (d.try_advance_pc(advance_pc_t::next_debug_statement, &next_pc));
11331161
11341162 return resolved_functions_by_pc;
11351163 }
11361164
1137−std::vector<std::string> debugger::get_module_functions(disvm::runtime::module_id_t vm_id, const char *match) const
1165+std::vector<std::string> debugger::get_module_functions(module_id_t vm_id, const char *match) const
11381166 {
11391167 std::vector<std::string> funcs;
11401168 auto iter = _vm_id_to_symbol_info.find(vm_id);
11411169 if (iter != std::cend(_vm_id_to_symbol_info))
11421170 {
1143− auto f_infos = iter->second.data->get_functions(symbol::function_name_format_t::declaration);
1171+ auto f_infos = iter->second.data->get_functions(function_name_format_t::declaration);
11441172 for (auto &fi : f_infos)
11451173 {
11461174 // Only return functions that match the supplied string
@@ -1163,7 +1191,7 @@ std::vector<std::string> debugger::get_module_functions(disvm::runtime::module_i · 16 unmodified lines
11631191 return funcs;
11641192 }
11651193
1166−bool debugger::symbols_exist(disvm::runtime::module_id_t vm_id) const
1194+bool debugger::symbols_exist(module_id_t vm_id) const
11671195 {
11681196 return _vm_id_to_symbol_info.find(vm_id) != std::cend(_vm_id_to_symbol_info);
11691197 }
@@ -1220,7 +1248,7 @@ void debugger::on_load(vm_tool_controller_t &controller_, std::size_t tool_id) · 50 unmodified lines
12201248
12211249 debug_print_info(ss.str());
12221250
1223− if (util::has_flag(_options, debugger_options::break_on_exception))
1251+ if (disvm::util::has_flag(_options, debugger_options::break_on_exception))
12241252 prompt(*this, *cxt.value1.registers);
12251253 }));
12261254
@@ -1250,14 +1278,14 @@ void debugger::on_load(vm_tool_controller_t &controller_, std::size_t tool_id) · 23 unmodified lines
12501278 << m->module_name->str()
12511279 << " loaded";
12521280
1253− if (util::has_flag(m->header.runtime_flag, runtime_flags_t::builtin))
1281+ if (disvm::util::has_flag(m->header.runtime_flag, runtime_flags_t::builtin))
12541282 ss << " (built-in)";
12551283
12561284 debug_print_info(ss.str());
12571285
12581286 // If the break on enter flag was set, it will be true
12591287 // and the first module load will be the user entry module.
1260− if (util::has_flag(_options, debugger_options::break_on_enter))
1288+ if (disvm::util::has_flag(_options, debugger_options::break_on_enter))
12611289 {
12621290 // Reset the break on enter flag and set a breakpoint
12631291 // on the entry PC for the module - 'break on enter'
@@ -1265,7 +1293,7 @@ void debugger::on_load(vm_tool_controller_t &controller_, std::size_t tool_id) · 1 unmodified line
12651293 breakpoint_cookies.emplace(controller->set_breakpoint(m, m->header.entry_pc));
12661294 }
12671295
1268− if (util::has_flag(_options, debugger_options::break_on_module_load))
1296+ if (disvm::util::has_flag(_options, debugger_options::break_on_module_load))
12691297 prompt(*this, *cxt.value1.registers);
12701298 }));
12711299
@@ -1334,10 +1362,10 @@ void debugger::load_symbols(const disvm::loaded_vm_module_t &loaded_mod) · 62 unmodified lines
13341362 if (!sbl_file.is_open())
13351363 return;
13361364
1337− std::unique_ptr<symbol::symbol_data_t> symbol_data;
1365+ std::unique_ptr<symbol_data_t> symbol_data;
13381366 try
13391367 {
1340− symbol_data = symbol::read(sbl_file);
1368+ symbol_data = disvm::symbol::read(sbl_file);
13411369 }
13421370 catch (const std::runtime_error &e)
13431371 {
src/exec/main.cpp+50−21
@@ -15,9 +15,38 @@ · 14 unmodified lines
1515 #include <vm_version.h>
1616 #include "exec.h"
1717
18−using namespace disvm;
19−using namespace disvm::runtime;
20−using namespace disvm::assembly::sigkind;
18+using disvm::vm_t;
19+using disvm::vm_config_t;
20+using disvm::opcode_t;
21+
22+using disvm::assembly::sigkind::sig_stream_t;
23+using disvm::assembly::sigkind::Tfunction;
24+using disvm::assembly::sigkind::Tlist;
25+using disvm::assembly::sigkind::Tstring;
26+using disvm::assembly::sigkind::Tnone;
27+
28+using disvm::debug::component_trace_t;
29+using disvm::debug::log_level_t;
30+
31+using disvm::runtime::type_descriptor_t;
32+using disvm::runtime::intrinsic_type_desc;
33+using disvm::runtime::byte_t;
34+using disvm::runtime::word_t;
35+using disvm::runtime::pointer_t;
36+using disvm::runtime::runtime_flags_t;
37+using disvm::runtime::vm_module_t;
38+using disvm::runtime::vm_alloc_t;
39+using disvm::runtime::vm_string_t;
40+using disvm::runtime::vm_list_t;
41+using disvm::runtime::vm_frame_base_alloc_t;
42+using disvm::runtime::vm_frame_constants;
43+using disvm::runtime::vm_exec_op_t;
44+using disvm::runtime::address_mode_t;
45+using disvm::runtime::address_mode_middle_t;
46+using disvm::runtime::import_function_t;
47+using disvm::runtime::import_vm_module_t;
48+using disvm::runtime::vm_user_exception;
49+using disvm::runtime::vm_system_exception;
2150
2251 namespace
2352 {
@@ -62,7 +91,7 @@ namespace · 38 unmodified lines
6291 last = new_tail;
6392 }
6493
65− pt_ref(last->value()) = curr_arg->get_allocation();
94+ disvm::runtime::pt_ref(last->value()) = curr_arg->get_allocation();
6695 }
6796
6897 if (command_module_path == nullptr)
@@ -107,7 +136,7 @@ namespace · 38 unmodified lines
107136 { vm_exec_op_t
108137 {
109138 opcode_t::load,
110− assembly::construct_address_code(address_mode_t::offset_indirect_mp, address_mode_middle_t::small_immediate, address_mode_t::offset_indirect_fp),
139+ disvm::assembly::construct_address_code(address_mode_t::offset_indirect_mp, address_mode_middle_t::small_immediate, address_mode_t::offset_indirect_fp),
111140 { address_mode_t::offset_indirect_mp, 0, 0 }, // command module path
112141 { address_mode_middle_t::small_immediate, 0 }, // import table index
113142 { address_mode_t::offset_indirect_fp, 20, 0 } // module reference
@@ -116,7 +145,7 @@ namespace · 2 unmodified lines
116145 { vm_exec_op_t
117146 {
118147 opcode_t::mframe,
119− assembly::construct_address_code(address_mode_t::offset_indirect_fp, address_mode_middle_t::small_immediate, address_mode_t::offset_indirect_fp),
148+ disvm::assembly::construct_address_code(address_mode_t::offset_indirect_fp, address_mode_middle_t::small_immediate, address_mode_t::offset_indirect_fp),
120149 { address_mode_t::offset_indirect_fp, 20, 0 }, // module reference
121150 { address_mode_middle_t::small_immediate, 0 }, // function index into module
122151 { address_mode_t::offset_indirect_fp, 24, 0 } // module call frame
@@ -125,7 +154,7 @@ namespace · 2 unmodified lines
125154 { vm_exec_op_t
126155 {
127156 opcode_t::movp,
128− assembly::construct_address_code(address_mode_t::offset_indirect_mp, address_mode_middle_t::none, address_mode_t::offset_double_indirect_fp),
157+ disvm::assembly::construct_address_code(address_mode_t::offset_indirect_mp, address_mode_middle_t::none, address_mode_t::offset_double_indirect_fp),
129158 { address_mode_t::offset_indirect_mp, 4, 0 }, // Argument list
130159 { address_mode_middle_t::none },
131160 { address_mode_t::offset_double_indirect_fp, 24, first_arg_offset } // module call frame -> argument list offset
@@ -134,7 +163,7 @@ namespace · 2 unmodified lines
134163 { vm_exec_op_t
135164 {
136165 opcode_t::mcall,
137− assembly::construct_address_code(address_mode_t::offset_indirect_fp, address_mode_middle_t::small_immediate, address_mode_t::offset_indirect_fp),
166+ disvm::assembly::construct_address_code(address_mode_t::offset_indirect_fp, address_mode_middle_t::small_immediate, address_mode_t::offset_indirect_fp),
138167 { address_mode_t::offset_indirect_fp, 24, 0 }, // module call frame
139168 { address_mode_middle_t::small_immediate, 0 }, // function index into module
140169 { address_mode_t::offset_indirect_fp, 20, 0 } // module reference
@@ -143,7 +172,7 @@ namespace · 2 unmodified lines
143172 { vm_exec_op_t
144173 {
145174 opcode_t::ret,
146− assembly::construct_address_code(address_mode_t::none, address_mode_middle_t::none, address_mode_t::none),
175+ disvm::assembly::construct_address_code(address_mode_t::none, address_mode_middle_t::none, address_mode_t::none),
147176 { address_mode_t::none },
148177 { address_mode_middle_t::none },
149178 { address_mode_t::none }
@@ -248,16 +277,16 @@ void print_help() · 98 unmodified lines
248277 " h - Print help (alternative: '?')\n";
249278 }
250279
251−void log_callback(const debug::component_trace_t origin, const debug::log_level_t level, const char *msg_fmt, std::va_list args)
280+void log_callback(const component_trace_t origin, const log_level_t level, const char *msg_fmt, std::va_list args)
252281 {
253282 std::stringstream ss;
254283
255284 switch (level)
256285 {
257− case debug::log_level_t::warning:
286+ case log_level_t::warning:
258287 ss << "w: ";
259288 break;
260− case debug::log_level_t::debug:
289+ case log_level_t::debug:
261290 ss << "d: ";
262291 break;
263292 }
@@ -323,26 +352,26 @@ void process_arg(char* arg, std::function<char *()> next, exec_options &options) · 59 unmodified lines
323352
324353 case 'l':
325354 // Set the callback
326− debug::set_logging_callback(log_callback);
355+ disvm::debug::set_logging_callback(log_callback);
327356 for (auto i = std::size_t{ 2 }; i < arg_len; ++i)
328357 {
329358 switch (arg[i])
330359 {
331− case 's': debug::set_component_tracing(debug::component_trace_t::scheduler, true);
360+ case 's': disvm::debug::set_component_tracing(component_trace_t::scheduler, true);
332361 break;
333− case 'S': debug::set_component_tracing(debug::component_trace_t::stack, true);
362+ case 'S': disvm::debug::set_component_tracing(component_trace_t::stack, true);
334363 break;
335− case 't': debug::set_component_tracing(debug::component_trace_t::thread, true);
364+ case 't': disvm::debug::set_component_tracing(component_trace_t::thread, true);
336365 break;
337− case 'T': debug::set_component_tracing(debug::component_trace_t::tool, true);
366+ case 'T': disvm::debug::set_component_tracing(component_trace_t::tool, true);
338367 break;
339− case 'e': debug::set_component_tracing(debug::component_trace_t::exception, true);
368+ case 'e': disvm::debug::set_component_tracing(component_trace_t::exception, true);
340369 break;
341− case 'g': debug::set_component_tracing(debug::component_trace_t::garbage_collector, true);
370+ case 'g': disvm::debug::set_component_tracing(component_trace_t::garbage_collector, true);
342371 break;
343− case 'm': debug::set_component_tracing(debug::component_trace_t::memory, true);
372+ case 'm': disvm::debug::set_component_tracing(component_trace_t::memory, true);
344373 break;
345− case 'd': debug::set_component_tracing(debug::component_trace_t::duration, true);
374+ case 'd': disvm::debug::set_component_tracing(component_trace_t::duration, true);
346375 break;
347376 }
348377 }
src/include/runtime.h+15−15
@@ -519,30 +519,30 @@ namespace disvm · 518 unmodified lines
519519 };
520520
521521 // Exception entry for handler
522− struct exception_t
522+ struct exception_entry_t
523523 {
524− exception_t() = default;
525− exception_t(exception_t &&);
524+ exception_entry_t() = default;
525+ exception_entry_t(exception_entry_t &&);
526526
527− exception_t(const exception_t &) = delete;
528− exception_t &operator=(const exception_t &) = delete;
527+ exception_entry_t(const exception_entry_t &) = delete;
528+ exception_entry_t &operator=(const exception_entry_t &) = delete;
529529
530− ~exception_t();
530+ ~exception_entry_t();
531531
532532 vm_pc_t pc;
533533 std::unique_ptr<vm_string_t> name;
534534 };
535535
536536 // Exception handler
537− struct handler_t
537+ struct handler_entry_t
538538 {
539− handler_t() = default;
540− handler_t(handler_t &&);
539+ handler_entry_t() = default;
540+ handler_entry_t(handler_entry_t &&);
541541
542− handler_t(const handler_t &) = delete;
543− handler_t &operator=(const handler_t &) = delete;
542+ handler_entry_t(const handler_entry_t &) = delete;
543+ handler_entry_t &operator=(const handler_entry_t &) = delete;
544544
545− ~handler_t() = default;
545+ ~handler_entry_t() = default;
546546
547547 // Byte offset in the handling frame the exception should be placed.
548548 word_t exception_offset;
@@ -554,14 +554,14 @@ namespace disvm · 5 unmodified lines
554554 word_t exception_type_count;
555555
556556 std::shared_ptr<const type_descriptor_t> type_desc;
557− std::vector<exception_t> exception_table;
557+ std::vector<exception_entry_t> exception_table;
558558 };
559559
560560 using code_section_t = std::vector<vm_instruction_t>;
561561 using type_section_map_t = std::vector<std::shared_ptr<const type_descriptor_t>>;
562562 using export_section_t = std::unordered_multimap<word_t, const export_function_t>;
563563 using import_section_t = std::vector<import_vm_module_t>;
564− using handler_section_t = std::vector<handler_t>;
564+ using handler_section_t = std::vector<handler_entry_t>;
565565
566566 using module_id_t = std::size_t;
567567
@@ -696,7 +696,7 @@ namespace disvm · 128 unmodified lines
696696
697697 // Walk the supplied stack and faulting module find the handler, handling stack frame, and program counter for the supplied exception ID.
698698 // If an exception handler cannot be found, {null, null, invalid_program_counter} will be returned.
699− std::tuple<const handler_t *, vm_frame_t *, vm_pc_t> find_exception_handler(
699+ std::tuple<const handler_entry_t *, vm_frame_t *, vm_pc_t> find_exception_handler(
700700 const vm_stack_t &stack,
701701 const vm_module_ref_t &faulting_module,
702702 const vm_pc_t faulting_pc,
src/vm/array.cpp+19−11
@@ -9,8 +9,16 @@ · 8 unmodified lines
99 #include <debug.h>
1010 #include <exceptions.h>
1111
12−using namespace disvm;
13−using namespace disvm::runtime;
12+using disvm::debug::component_trace_t;
13+using disvm::debug::log_level_t;
14+
15+using disvm::runtime::intrinsic_type_desc;
16+using disvm::runtime::pointer_t;
17+using disvm::runtime::type_descriptor_t;
18+using disvm::runtime::vm_alloc_t;
19+using disvm::runtime::vm_array_t;
20+using disvm::runtime::vm_string_t;
21+using disvm::runtime::word_t;
1422
1523 std::shared_ptr<const type_descriptor_t> vm_array_t::type_desc()
1624 {
@@ -27,7 +35,7 @@ vm_array_t::vm_array_t(std::shared_ptr<const type_descriptor_t> td, word_t lengt · 10 unmodified lines
2735 assert(_element_type != nullptr);
2836 assert(_length >= 0);
2937 _arr = alloc_memory<byte_t>(_length * _element_type->size_in_bytes);
30− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "init: vm array: %d", _length);
38+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "init: vm array: %d", _length);
3139
3240 // [SPEC] Element memory is already initialized to zero based on the alloc_memory contract
3341 }
@@ -41,8 +49,8 @@ vm_array_t::vm_array_t(vm_array_t &original, word_t begin_index, word_t length) · 7 unmodified lines
4149 {
4250 assert(0 <= begin_index && (begin_index < _original->get_length() || (begin_index == _original->get_length() && length == 0)));
4351
44− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
45− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "init: vm array: slice: %d %d", begin_index, _length);
52+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
53+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "init: vm array: slice: %d %d", begin_index, _length);
4654
4755 // Set the data to reference the original array
4856 _arr = _original->_arr + (begin_index * _element_type->size_in_bytes);
@@ -77,8 +85,8 @@ vm_array_t::vm_array_t(const vm_string_t *s) · 28 unmodified lines
7785 std::memcpy(_arr, str, _length);
7886 }
7987
80− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
81− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "init: vm array: vm string: %d", _length);
88+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
89+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "init: vm array: vm string: %d", _length);
8290 }
8391
8492 vm_array_t::~vm_array_t()
@@ -92,7 +100,7 @@ vm_array_t::~vm_array_t() · 7 unmodified lines
92100 dec_ref_count_and_free(_original);
93101 debug::assign_debug_pointer(&_original);
94102
95− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "destroy: vm array: slice");
103+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "destroy: vm array: slice");
96104 }
97105 else
98106 {
@@ -100,19 +108,19 @@ vm_array_t::~vm_array_t() · 1 unmodified line
100108 auto arr_local = _arr;
101109 const auto array_len = _length;
102110 const auto &element_type = *_element_type;
103− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "begin: destroy: elements: %d", array_len);
111+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "begin: destroy: elements: %d", array_len);
104112 for (word_t i = 0; i < array_len; ++i)
105113 {
106114 destroy_memory(element_type, arr_local);
107115 arr_local += element_type.size_in_bytes;
108116 }
109− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "end: destroy: elements: %d", array_len);
117+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "end: destroy: elements: %d", array_len);
110118
111119 // Free array memory
112120 free_memory(_arr);
113121
114122 debug::assign_debug_pointer(&_arr);
115− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "destroy: vm array");
123+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "destroy: vm array");
116124 }
117125
118126 }
src/vm/builtin_module.cpp+2−2
@@ -14,8 +14,8 @@ · 13 unmodified lines
1414 #include <debug.h>
1515 #include <exceptions.h>
1616
17−using namespace disvm::runtime;
18−using namespace disvm::runtime::builtin;
17+using disvm::runtime::type_descriptor_t;
18+using disvm::runtime::vm_module_t;
1919
2020 namespace
2121 {
src/vm/channel.cpp+27−18
@@ -9,8 +9,17 @@ · 8 unmodified lines
99 #include <debug.h>
1010 #include <exceptions.h>
1111
12−using namespace disvm;
13−using namespace disvm::runtime;
12+using disvm::debug::component_trace_t;
13+using disvm::debug::log_level_t;
14+
15+using disvm::runtime::intrinsic_type_desc;
16+using disvm::runtime::type_descriptor_t;
17+using disvm::runtime::vm_alloc_t;
18+using disvm::runtime::vm_array_t;
19+using disvm::runtime::vm_channel_t;
20+using disvm::runtime::vm_channel_request_t;
21+using disvm::runtime::vm_request_mutex_t;
22+using disvm::runtime::word_t;
1423
1524 vm_request_mutex_t::vm_request_mutex_t()
1625 : pending_request{ false }
@@ -44,13 +53,13 @@ vm_channel_t::vm_channel_t( · 27 unmodified lines
4453 if (buffer_len > 0)
4554 _data_buffer = new vm_array_t{ td, buffer_len };
4655
47− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "init: vm channel");
56+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "init: vm channel");
4857 }
4958
5059 vm_channel_t::~vm_channel_t()
5160 {
5261 dec_ref_count_and_free(_data_buffer);
53− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "destroy: vm channel");
62+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "destroy: vm channel");
5463 }
5564
5665 std::shared_ptr<const type_descriptor_t> vm_channel_t::get_data_type() const
@@ -87,8 +96,8 @@ bool vm_channel_t::send_data(vm_channel_request_t &send_request) · 30 unmodified lines
8796 return true;
8897 }
8998
90− if (debug::is_component_tracing_enabled<debug::component_trace_t::channel>())
91− debug::log_msg(debug::component_trace_t::channel, debug::log_level_t::debug, "channel: send: queue: %d", send_request.thread_id);
99+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::channel>())
100+ disvm::debug::log_msg(component_trace_t::channel, log_level_t::debug, "channel: send: queue: %d", send_request.thread_id);
92101
93102 _data_senders.emplace_back(std::move(send_request));
94103 return false;
@@ -121,8 +130,8 @@ bool vm_channel_t::send_data(vm_channel_request_t &send_request) · 26 unmodified lines
121130 pending_req_lock.unlock();
122131 data_lock.unlock();
123132
124− if (debug::is_component_tracing_enabled<debug::component_trace_t::channel>())
125− debug::log_msg(debug::component_trace_t::channel, debug::log_level_t::debug, "channel: send: %d %d", send_request.thread_id, receiver.thread_id);
133+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::channel>())
134+ disvm::debug::log_msg(component_trace_t::channel, log_level_t::debug, "channel: send: %d %d", send_request.thread_id, receiver.thread_id);
126135
127136 receiver.request_handled_callback(*this);
128137
@@ -158,8 +167,8 @@ bool vm_channel_t::receive_data(vm_channel_request_t &receive_request) · 29 unmodified lines
158167 return true;
159168 }
160169
161− if (debug::is_component_tracing_enabled<debug::component_trace_t::channel>())
162− debug::log_msg(debug::component_trace_t::channel, debug::log_level_t::debug, "channel: receive: queue: %d", receive_request.thread_id);
170+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::channel>())
171+ disvm::debug::log_msg(component_trace_t::channel, log_level_t::debug, "channel: receive: queue: %d", receive_request.thread_id);
163172
164173 _data_receivers.emplace_back(std::move(receive_request));
165174 return false;
@@ -200,8 +209,8 @@ bool vm_channel_t::receive_data(vm_channel_request_t &receive_request) · 34 unmodified lines
200209 // Transfer data since there wasn't anything in the buffer
201210 _data_transfer(receive_request.data, sender.data, _data_type.get());
202211
203− if (debug::is_component_tracing_enabled<debug::component_trace_t::channel>())
204− debug::log_msg(debug::component_trace_t::channel, debug::log_level_t::debug, "channel: receive: %d %d", receive_request.thread_id, sender.thread_id);
212+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::channel>())
213+ disvm::debug::log_msg(component_trace_t::channel, log_level_t::debug, "channel: receive: %d %d", receive_request.thread_id, sender.thread_id);
205214 }
206215
207216 // Release channel and pending request lock after data transfer
@@ -234,8 +243,8 @@ void vm_channel_t::cancel_request(uint32_t thread_id) · 26 unmodified lines
234243 _data_senders.erase(sender_iter);
235244 }
236245
237− if (debug::is_component_tracing_enabled<debug::component_trace_t::channel>())
238− debug::log_msg(debug::component_trace_t::channel, debug::log_level_t::debug, "channel: cancel: request: %d", thread_id);
246+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::channel>())
247+ disvm::debug::log_msg(component_trace_t::channel, log_level_t::debug, "channel: cancel: request: %d", thread_id);
239248 }
240249
241250 word_t vm_channel_t::get_buffer_size() const
@@ -266,8 +275,8 @@ bool vm_channel_t::try_send_to_buffer(vm_channel_request_t &send_request) · 24 unmodified lines
266275 _data_transfer(dest, send_request.data, _data_type.get());
267276 send_request.request_mutex.get().pending_request = false;
268277
269− if (debug::is_component_tracing_enabled<debug::component_trace_t::channel>())
270− debug::log_msg(debug::component_trace_t::channel, debug::log_level_t::debug, "channel: send: buffer: %d", send_request.thread_id);
278+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::channel>())
279+ disvm::debug::log_msg(component_trace_t::channel, log_level_t::debug, "channel: send: buffer: %d", send_request.thread_id);
271280
272281 return true;
273282 }
@@ -293,8 +302,8 @@ bool vm_channel_t::try_receive_from_buffer(vm_channel_request_t &receive_request · 19 unmodified lines
293302
294303 receive_request.request_mutex.get().pending_request = false;
295304
296− if (debug::is_component_tracing_enabled<debug::component_trace_t::channel>())
297− debug::log_msg(debug::component_trace_t::channel, debug::log_level_t::debug, "channel: receive: buffer: %d", receive_request.thread_id);
305+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::channel>())
306+ disvm::debug::log_msg(component_trace_t::channel, log_level_t::debug, "channel: receive: buffer: %d", receive_request.thread_id);
298307
299308 return true;
300309 }
src/vm/execution_table.cpp+13−13
@@ -1286,8 +1286,8 @@ namespace · 1285 unmodified lines
12861286 {
12871287 r.request_mutex.pending_request = false;
12881288
1289− if (debug::is_component_tracing_enabled<debug::component_trace_t::channel>())
1290− debug::log_msg(debug::component_trace_t::channel, debug::log_level_t::debug, "alt: request: non-blocking");
1289+ if (disvm::debug::is_component_tracing_enabled<debug::component_trace_t::channel>())
1290+ disvm::debug::log_msg(debug::component_trace_t::channel, debug::log_level_t::debug, "alt: request: non-blocking");
12911291
12921292 // Cancel request in all channels.
12931293 for (auto i = word_t{ 0 }; i < channel_count; ++i)
@@ -1482,8 +1482,8 @@ namespace · 188 unmodified lines
14821482 if (new_frame == nullptr)
14831483 r.current_thread_state = vm_thread_state_t::empty_stack;
14841484
1485− if (debug::is_component_tracing_enabled<debug::component_trace_t::stack>())
1486− debug::log_msg(debug::component_trace_t::stack, debug::log_level_t::debug, "exit: function");
1485+ if (disvm::debug::is_component_tracing_enabled<debug::component_trace_t::stack>())
1486+ disvm::debug::log_msg(debug::component_trace_t::stack, debug::log_level_t::debug, "exit: function");
14871487 }
14881488
14891489 EXEC_DECL(call)
@@ -1500,7 +1500,7 @@ namespace · 10 unmodified lines
15001500
15011501 r.next_pc = vt_ref<vm_pc_t>(r.dest);
15021502
1503− debug::log_msg(debug::component_trace_t::stack, debug::log_level_t::debug, "enter: function");
1503+ disvm::debug::log_msg(debug::component_trace_t::stack, debug::log_level_t::debug, "enter: function");
15041504 }
15051505
15061506 EXEC_DECL(mcall)
@@ -1529,9 +1529,9 @@ namespace · 22 unmodified lines
15291529 top_frame->prev_pc() = r.next_pc;
15301530 top_frame->prev_module_ref() = r.module_ref;
15311531
1532− if (debug::is_component_tracing_enabled<debug::component_trace_t::stack>())
1532+ if (disvm::debug::is_component_tracing_enabled<debug::component_trace_t::stack>())
15331533 {
1534− debug::log_msg(
1534+ disvm::debug::log_msg(
15351535 debug::component_trace_t::stack,
15361536 debug::log_level_t::debug,
15371537 "enter: function: inter-module: %d >>%s<< %d %s",
@@ -1660,8 +1660,8 @@ namespace · 122 unmodified lines
16601660 // String
16611661 exception_id = static_cast<vm_string_t *>(e);
16621662
1663− if (debug::is_component_tracing_enabled<debug::component_trace_t::exception>())
1664− debug::log_msg(debug::component_trace_t::exception, debug::log_level_t::debug, "raise: string: >>%s<<", exception_id->str());
1663+ if (disvm::debug::is_component_tracing_enabled<debug::component_trace_t::exception>())
1664+ disvm::debug::log_msg(debug::component_trace_t::exception, debug::log_level_t::debug, "raise: string: >>%s<<", exception_id->str());
16651665 }
16661666 else
16671667 {
@@ -1673,8 +1673,8 @@ namespace · 5 unmodified lines
16731673 exception_id = at_val<vm_string_t>(content);
16741674 assert(exception_id != nullptr);
16751675
1676− if (debug::is_component_tracing_enabled<debug::component_trace_t::exception>())
1677− debug::log_msg(debug::component_trace_t::exception, debug::log_level_t::debug, "raise: exception: >>%s<<", exception_id->str());
1676+ if (disvm::debug::is_component_tracing_enabled<debug::component_trace_t::exception>())
1677+ disvm::debug::log_msg(debug::component_trace_t::exception, debug::log_level_t::debug, "raise: exception: >>%s<<", exception_id->str());
16781678 }
16791679
16801680 // Check if the tool dispatcher has been supplied
@@ -1682,7 +1682,7 @@ namespace · 1 unmodified line
16821682 if (tool_dispatch != nullptr)
16831683 tool_dispatch->on_exception_raised(r, *exception_id, *e);
16841684
1685− const handler_t *handler;
1685+ const handler_entry_t *handler;
16861686 vm_frame_t *target_frame;
16871687 vm_pc_t handler_pc;
16881688
@@ -1783,7 +1783,7 @@ namespace · 94 unmodified lines
17831783 }
17841784 catch (const vm_module_exception &e)
17851785 {
1786− debug::log_msg(debug::component_trace_t::module, debug::log_level_t::debug, "exception: load: >>%s<<", e.what());
1786+ disvm::debug::log_msg(debug::component_trace_t::module, debug::log_level_t::debug, "exception: load: >>%s<<", e.what());
17871787 return;
17881788 }
17891789 }
src/vm/garbage_collector.cpp+78−64
@@ -12,8 +12,22 @@ · 11 unmodified lines
1212 #include <exceptions.h>
1313 #include "garbage_collector.h"
1414
15−using namespace disvm;
16−using namespace disvm::runtime;
15+using disvm::vm_t;
16+
17+using disvm::debug::component_trace_t;
18+using disvm::debug::log_level_t;
19+
20+using disvm::runtime::default_garbage_collector_t;
21+using disvm::runtime::intrinsic_type_desc;
22+using disvm::runtime::pointer_t;
23+using disvm::runtime::type_descriptor_t;
24+using disvm::runtime::vm_alloc_t;
25+using disvm::runtime::vm_alloc_callback_t;
26+using disvm::runtime::vm_garbage_collector_t;
27+using disvm::runtime::vm_memory_allocator_t;
28+using disvm::runtime::vm_string_t;
29+using disvm::runtime::vm_thread_t;
30+using disvm::runtime::vm_tool_controller_t;
1731
1832 // Empty destructors for vm garbage collector 'interfaces'
1933 vm_garbage_collector_t::~vm_garbage_collector_t()
@@ -47,19 +61,6 @@ std::unique_ptr<vm_garbage_collector_t> disvm::runtime::create_no_op_gc(vm_t &) · 27 unmodified lines
4761 return std::make_unique<no_op_gc>();
4862 }
4963
50−default_garbage_collector_t::default_garbage_collector_t(vm_t &vm)
51− : _collection_epoch{ 0 }
52− , _vm{ vm }
53−{
54−}
55−
56−default_garbage_collector_t::~default_garbage_collector_t()
57−{
58− std::lock_guard<std::mutex> lock{ _tracking_allocs_lock };
59− for (auto a : _tracking_allocs)
60− dec_ref_count_and_free(a);
61−}
62−
6364 namespace
6465 {
6566 enum class gc_colour_t
@@ -91,6 +92,42 @@ namespace · 25 unmodified lines
9192 {
9293 a->gc_reserved = reinterpret_cast<pointer_t>(c);
9394 }
95+
96+ class mark_cxt_t final : public std::stack<vm_alloc_t *, std::vector<vm_alloc_t *>>
97+ {
98+ public:
99+ mark_cxt_t()
100+ : string_type{ intrinsic_type_desc::type<vm_string_t>().get() } // Using raw pointer since it is a built-in type and has unlimited lifetime
101+ , curr_colour{ gc_colour_t::white }
102+ { }
103+
104+ const type_descriptor_t *string_type;
105+ gc_colour_t curr_colour;
106+
107+ vm_alloc_t *pop()
108+ {
109+ auto a = top();
110+ std::stack<vm_alloc_t *, std::vector<vm_alloc_t *>>::pop();
111+ return a;
112+ }
113+ };
114+}
115+
116+default_garbage_collector_t::default_garbage_collector_t(vm_t &vm)
117+ : _collection_epoch{ 0 }
118+ , _mark_cxt{ new mark_cxt_t{} }
119+ , _vm{ vm }
120+{
121+}
122+
123+default_garbage_collector_t::~default_garbage_collector_t()
124+{
125+ std::lock_guard<std::mutex> lock{ _tracking_allocs_lock };
126+ for (auto a : _tracking_allocs)
127+ dec_ref_count_and_free(a);
128+
129+ auto cxt = static_cast<mark_cxt_t *>(_mark_cxt);
130+ delete cxt;
94131 }
95132
96133 vm_memory_allocator_t default_garbage_collector_t::get_allocator() const
@@ -102,14 +139,14 @@ void default_garbage_collector_t::track_allocation(vm_alloc_t *alloc) · 5 unmodified lines
102139 {
103140 assert(alloc != nullptr);
104141
105− if (debug::is_component_tracing_enabled<debug::component_trace_t::garbage_collector>())
106− debug::log_msg(debug::component_trace_t::garbage_collector, debug::log_level_t::debug, "gc: track: %#" PRIxPTR, alloc);
142+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::garbage_collector>())
143+ disvm::debug::log_msg(component_trace_t::garbage_collector, log_level_t::debug, "gc: track: %#" PRIxPTR, alloc);
107144
108145 alloc->add_ref();
109146 set_gc_colour(alloc, get_current_colour(_collection_epoch));
110147
111148 std::lock_guard<std::mutex> lock{ _tracking_allocs_lock };
112− _tracking_allocs.push_back(alloc);
149+ _tracking_allocs.emplace_front(alloc);
113150 }
114151
115152 void default_garbage_collector_t::enum_tracked_allocations(vm_alloc_callback_t callback) const
@@ -124,38 +161,20 @@ void default_garbage_collector_t::enum_tracked_allocations(vm_alloc_callback_t c · 8 unmodified lines
124161
125162 namespace
126163 {
127− struct mark_cxt_t final : public std::stack<vm_alloc_t *, std::vector<vm_alloc_t *>>
128− {
129− mark_cxt_t(const type_descriptor_t *string_type, const gc_colour_t curr_colour)
130− : std::stack<vm_alloc_t *, std::vector<vm_alloc_t *>>{}
131− , string_type{ string_type }
132− , curr_colour{ curr_colour }
133− { }
134−
135− const type_descriptor_t *string_type;
136− const gc_colour_t curr_colour;
137− };
138−
139164 void mark_pointers(pointer_t p, void *cxt)
140165 {
141166 auto a = vm_alloc_t::from_allocation(p);
142167
143168 assert(cxt != nullptr);
144− auto c = reinterpret_cast<mark_cxt_t *>(cxt);
169+ auto c = static_cast<mark_cxt_t *>(cxt);
145170
146171 // Don't examine vm strings or allocations with the current colour
147172 if (c->curr_colour != get_gc_colour(a) && a->alloc_type.get() != c->string_type)
148173 c->push(a);
149174 }
150175
151− void mark(const std::vector<std::shared_ptr<const vm_thread_t>> &threads, const gc_colour_t curr_colour)
176+ void mark(std::vector<std::shared_ptr<const vm_thread_t>> threads, mark_cxt_t &mark_cxt)
152177 {
153− mark_cxt_t mark_cxt
154− {
155− intrinsic_type_desc::type<vm_string_t>().get(), // Using raw pointer since it is a built-in type and has unlimited lifetime
156− curr_colour
157− };
158−
159178 // Get roots from threads
160179 for (auto &t : threads)
161180 {
@@ -179,42 +198,32 @@ namespace · 17 unmodified lines
179198 }
180199 }
181200
182− const auto log_enabled = debug::is_component_tracing_enabled<debug::component_trace_t::garbage_collector>();
183− if (log_enabled)
184− debug::log_msg(debug::component_trace_t::garbage_collector, debug::log_level_t::debug, "gc: roots found: %" PRIuPTR, mark_cxt.size());
201+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::garbage_collector>())
202+ disvm::debug::log_msg(component_trace_t::garbage_collector, log_level_t::debug, "gc: roots found: %" PRIuPTR, mark_cxt.size());
185203
186204 // Traverse the graph
187205 while (!mark_cxt.empty())
188206 {
189− auto curr = mark_cxt.top();
190− mark_cxt.pop();
191−
192− if (log_enabled)
193− debug::log_msg(debug::component_trace_t::garbage_collector, debug::log_level_t::debug, "gc: mark: alloc: %#" PRIxPTR, curr);
207+ auto curr = mark_cxt.pop();
208+ set_gc_colour(curr, mark_cxt.curr_colour);
194209
195210 if (curr->alloc_type->map_in_bytes > 0)
196211 enum_pointer_fields(*curr->alloc_type, curr->get_allocation(), mark_pointers, &mark_cxt);
197−
198− set_gc_colour(curr, curr_colour);
199212 }
200213 }
201214
202− void sweep(std::deque<vm_alloc_t *> &tracking_allocs, const gc_colour_t sweeper_colour)
215+ void sweep(std::forward_list<vm_alloc_t *> &tracking_allocs, const gc_colour_t sweeper_colour)
203216 {
204− auto allocs_local = std::move(tracking_allocs);
205−
206− const auto starting_size = allocs_local.size();
207− for (auto a : allocs_local)
217+ // Remove sweeper colour allocations.
218+ tracking_allocs.remove_if([sweeper_colour](vm_alloc_t *a)
208219 {
209220 const auto colour = get_gc_colour(a);
210− if (colour == sweeper_colour)
221+ const auto remove = (colour == sweeper_colour);
222+ if (remove)
211223 dec_ref_count_and_free(a);
212− else
213− tracking_allocs.push_back(a);
214− }
215224
216− if (debug::is_component_tracing_enabled<debug::component_trace_t::garbage_collector>())
217− debug::log_msg(debug::component_trace_t::garbage_collector, debug::log_level_t::debug, "gc: sweep: %u", starting_size - tracking_allocs.size());
225+ return remove;
226+ });
218227 }
219228 }
220229
@@ -228,15 +237,20 @@ bool default_garbage_collector_t::collect(std::vector<std::shared_ptr<const vm_t · 7 unmodified lines
228237 return false;
229238
230239 std::chrono::high_resolution_clock::time_point start;
231− const auto log_enabled = debug::is_component_tracing_enabled<debug::component_trace_t::duration>();
240+ const auto log_enabled = debug::is_component_tracing_enabled<component_trace_t::duration>();
232241 if (log_enabled)
233242 {
234243 start = std::chrono::high_resolution_clock::now();
235− debug::log_msg(debug::component_trace_t::duration, debug::log_level_t::debug, "gc: begin: collect");
244+ disvm::debug::log_msg(component_trace_t::duration, log_level_t::debug, "gc: begin: collect");
236245 }
237246
238− const auto curr_colour = get_current_colour(_collection_epoch);
239− mark(threads, curr_colour);
247+ auto mark_cxt = static_cast<mark_cxt_t *>(_mark_cxt);
248+ assert(mark_cxt != nullptr);
249+ mark_cxt->curr_colour = get_current_colour(_collection_epoch);
250+
251+ assert(mark_cxt->empty() && "Marking context should be empty before mark phase");
252+ mark(std::move(threads), *mark_cxt);
253+ assert(mark_cxt->empty() && "Marking context should be empty after mark phase");
240254
241255 const auto sweeper_colour = get_sweeper_colour(_collection_epoch);
242256 sweep(_tracking_allocs, sweeper_colour);
@@ -244,7 +258,7 @@ bool default_garbage_collector_t::collect(std::vector<std::shared_ptr<const vm_t · 1 unmodified line
244258 if (log_enabled)
245259 {
246260 const auto elapsed = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now() - start);
247− debug::log_msg(debug::component_trace_t::duration, debug::log_level_t::debug, "gc: end: collect: %lld us", elapsed.count());
261+ disvm::debug::log_msg(component_trace_t::duration, log_level_t::debug, "gc: end: collect: %lld us", elapsed.count());
248262 }
249263
250264 ++_collection_epoch;
src/vm/garbage_collector.h+3−2
@@ -9,7 +9,7 @@ · 8 unmodified lines
99
1010 #include <cstdint>
1111 #include <mutex>
12−#include <deque>
12+#include <forward_list>
1313 #include <vector>
1414 #include <disvm.h>
1515
@@ -37,9 +37,10 @@ namespace disvm · 21 unmodified lines
3737 private:
3838 vm_t &_vm;
3939
40+ void *_mark_cxt;
4041 std::size_t _collection_epoch;
4142 mutable std::mutex _tracking_allocs_lock;
42− std::deque<vm_alloc_t *> _tracking_allocs;
43+ std::forward_list<vm_alloc_t *> _tracking_allocs;
4344 };
4445 }
4546 }
src/vm/list.cpp+12−5
@@ -9,8 +9,15 @@ · 8 unmodified lines
99 #include <vm_memory.h>
1010 #include <debug.h>
1111
12−using namespace disvm;
13−using namespace disvm::runtime;
12+using disvm::debug::component_trace_t;
13+using disvm::debug::log_level_t;
14+
15+using disvm::runtime::intrinsic_type_desc;
16+using disvm::runtime::pointer_t;
17+using disvm::runtime::type_descriptor_t;
18+using disvm::runtime::vm_alloc_t;
19+using disvm::runtime::vm_list_t;
20+using disvm::runtime::word_t;
1421
1522 std::shared_ptr<const type_descriptor_t> vm_list_t::type_desc()
1623 {
@@ -32,8 +39,8 @@ vm_list_t::vm_list_t(std::shared_ptr<const type_descriptor_t> td, vm_list_t *tai · 15 unmodified lines
3239 if (_is_alloc)
3340 _mem.alloc = static_cast<pointer_t>(alloc_memory(_element_type->size_in_bytes));
3441
35− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
36− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "init: vm list");
42+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
43+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "init: vm list");
3744 }
3845
3946 vm_list_t::~vm_list_t()
@@ -54,7 +61,7 @@ vm_list_t::~vm_list_t() · 14 unmodified lines
5461 }
5562
5663 debug::assign_debug_pointer(&_mem.alloc);
57− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "destroy: vm list");
64+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "destroy: vm list");
5865 }
5966
6067 std::shared_ptr<const type_descriptor_t> vm_list_t::get_element_type() const
src/vm/math/Mathmod.cpp+15−4
@@ -7,8 +7,19 @@ · 6 unmodified lines
77 #include <debug.h>
88 #include "Mathmod.h"
99
10−using namespace disvm;
11−using namespace disvm::runtime;
10+using disvm::vm_t;
11+
12+using disvm::debug::component_trace_t;
13+using disvm::debug::log_level_t;
14+
15+using disvm::runtime::dereference_nil;
16+using disvm::runtime::intrinsic_type_desc;
17+using disvm::runtime::real_t;
18+using disvm::runtime::vm_alloc_t;
19+using disvm::runtime::vm_array_t;
20+using disvm::runtime::vm_user_exception;
21+using disvm::runtime::vm_system_exception;
22+using disvm::runtime::word_t;
1223
1324 namespace
1425 {
@@ -90,7 +101,7 @@ namespace · 75 unmodified lines
90101 void
91102 Mathmodinit(void)
92103 {
93− builtin::register_module_exports(Math_PATH, Mathmodlen, Mathmodtab);
104+ disvm::runtime::builtin::register_module_exports(Math_PATH, Mathmodlen, Mathmodtab);
94105 }
95106
96107 void
@@ -99,7 +110,7 @@ Math_FPcontrol(vm_registers_t &r, vm_t &vm) · 2 unmodified lines
99110 auto &fp = r.stack.peek_frame()->base<F_Math_FPcontrol>();
100111
101112 // [PAL] Properly implement floating point control
102− debug::log_msg(debug::component_trace_t::builtin, debug::log_level_t::warning, "FPControl is not properly implemented");
113+ disvm::debug::log_msg(component_trace_t::builtin, log_level_t::warning, "FPControl is not properly implemented");
103114
104115 *fp.ret = fp.mask;
105116 }
src/vm/math/Mathmod.h+9−2
@@ -11,8 +11,15 @@ · 10 unmodified lines
1111 #include <disvm.h>
1212 #include <builtin_module.h>
1313
14−using namespace disvm;
15−using namespace disvm::runtime;
14+using disvm::vm_t;
15+
16+using disvm::runtime::byte_t;
17+using disvm::runtime::word_t;
18+using disvm::runtime::big_t;
19+using disvm::runtime::real_t;
20+using disvm::runtime::pointer_t;
21+using disvm::runtime::vm_registers_t;
22+using disvm::runtime::vm_frame_base_alloc_t;
1623
1724 void Math_FPcontrol(vm_registers_t &r, vm_t &vm);
1825 struct F_Math_FPcontrol : public vm_frame_base_alloc_t
src/vm/module_reader.cpp+52−28
@@ -18,9 +18,33 @@ · 17 unmodified lines
1818 #include <module_reader.h>
1919 #include "buffered_reader.h"
2020
21−using namespace disvm;
22−using namespace disvm::runtime;
23−using namespace disvm::format;
21+using disvm::opcode_t;
22+
23+using disvm::format::operand_t;
24+
25+using disvm::runtime::addr_code_t;
26+using disvm::runtime::address_mode_t;
27+using disvm::runtime::address_mode_middle_t;
28+using disvm::runtime::big_t;
29+using disvm::runtime::byte_t;
30+using disvm::runtime::word_t;
31+using disvm::runtime::real_t;
32+using disvm::runtime::pointer_t;
33+using disvm::runtime::runtime_flags_t;
34+using disvm::runtime::type_descriptor_t;
35+using disvm::runtime::vm_module_t;
36+using disvm::runtime::vm_alloc_t;
37+using disvm::runtime::vm_array_t;
38+using disvm::runtime::vm_string_t;
39+using disvm::runtime::vm_pc_t;
40+using disvm::runtime::import_function_t;
41+using disvm::runtime::export_function_t;
42+using disvm::runtime::import_vm_module_t;
43+using disvm::runtime::handler_entry_t;
44+using disvm::runtime::exception_entry_t;
45+using disvm::runtime::vm_instruction_t;
46+using disvm::runtime::vm_module_exception;
47+using disvm::runtime::module_reader_exception;
2448
2549 namespace
2650 {
@@ -49,7 +73,7 @@ namespace · 22 unmodified lines
4973 };
5074
5175 // Read the next operand as defined in the Dis VM specification.
52− std::tuple<bool, operand_t> read_next_operand(util::buffered_reader_t &reader)
76+ std::tuple<bool, operand_t> read_next_operand(disvm::util::buffered_reader_t &reader)
5377 {
5478 operand_t result;
5579
@@ -111,7 +135,7 @@ namespace · 55 unmodified lines
111135 }
112136
113137 // Read the next word as defined in the Dis VM specification.
114− std::tuple<bool, word_t> read_next_word(util::buffered_reader_t &reader)
138+ std::tuple<bool, word_t> read_next_word(disvm::util::buffered_reader_t &reader)
115139 {
116140 auto result = word_t{};
117141
@@ -141,7 +165,7 @@ namespace · 23 unmodified lines
141165 return r;
142166 }
143167
144− byte_t *read_8byte_segments(util::buffered_reader_t &reader, datum_type_t type, uint32_t segment_count, byte_t *dest)
168+ byte_t *read_8byte_segments(disvm::util::buffered_reader_t &reader, datum_type_t type, uint32_t segment_count, byte_t *dest)
145169 {
146170 assert(type == datum_type_t::value_real64 || type == datum_type_t::value_bit64);
147171
@@ -190,7 +214,7 @@ namespace · 42 unmodified lines
190214 }
191215
192216 // See header format definition in Dis VM specification (http://www.vitanuova.com/inferno/man/6/dis.html)
193− void read_header(util::buffered_reader_t &reader, vm_module_t &modobj)
217+ void read_header(disvm::util::buffered_reader_t &reader, vm_module_t &modobj)
194218 {
195219 auto success = bool{};
196220 auto &header = modobj.header;
@@ -200,7 +224,7 @@ namespace · 3 unmodified lines
200224 throw module_reader_exception{ "Failed to read magic number" };
201225
202226 // If the object file is signed, read in the signature.
203− if (header.magic_number == magic_number_constants::smagic)
227+ if (header.magic_number == disvm::format::magic_number_constants::smagic)
204228 {
205229 std::tie(success, header.Signature.length) = read_next_operand(reader);
206230 if (!success) throw module_reader_exception{ "Failed to read signature length" };
@@ -209,7 +233,7 @@ namespace · 2 unmodified lines
209233 const auto bytesRead = reader.get_next_bytes(header.Signature.length, header.Signature.signature.get());
210234 if (bytesRead != header.Signature.length) throw module_reader_exception{ "Failed to read full signature" };
211235 }
212− else if (header.magic_number == magic_number_constants::xmagic)
236+ else if (header.magic_number == disvm::format::magic_number_constants::xmagic)
213237 {
214238 header.Signature.length = word_t{ 0 };
215239 }
@@ -248,7 +272,7 @@ namespace · 32 unmodified lines
248272 }
249273
250274 // See code section layout in Dis VM specification (http://www.vitanuova.com/inferno/man/6/dis.html)
251− void read_code_section(util::buffered_reader_t &reader, vm_module_t &modobj)
275+ void read_code_section(disvm::util::buffered_reader_t &reader, vm_module_t &modobj)
252276 {
253277 auto success = bool{};
254278 const auto instruction_count = modobj.header.code_size;
@@ -320,7 +344,7 @@ namespace · 65 unmodified lines
320344 }
321345
322346 // See type section layout in Dis VM specification (http://www.vitanuova.com/inferno/man/6/dis.html)
323− void read_type_section(util::buffered_reader_t &reader, vm_module_t &modobj)
347+ void read_type_section(disvm::util::buffered_reader_t &reader, vm_module_t &modobj)
324348 {
325349 auto success = bool{};
326350 const auto type_count = modobj.header.type_size;
@@ -356,7 +380,7 @@ namespace · 29 unmodified lines
356380 }
357381
358382 // See data section layout in Dis VM specification (http://www.vitanuova.com/inferno/man/6/dis.html)
359− void read_data_section(util::buffered_reader_t &reader, vm_module_t &modobj)
383+ void read_data_section(disvm::util::buffered_reader_t &reader, vm_module_t &modobj)
360384 {
361385 if (modobj.header.data_size != 0)
362386 {
@@ -496,7 +520,7 @@ namespace · 133 unmodified lines
496520 }
497521
498522 // See module name in Dis VM specification (http://www.vitanuova.com/inferno/man/6/dis.html)
499− void read_module_name(util::buffered_reader_t &reader, vm_module_t &modobj)
523+ void read_module_name(disvm::util::buffered_reader_t &reader, vm_module_t &modobj)
500524 {
501525 auto string_buffer = std::vector<uint8_t>{};
502526 if (!reader.get_bytes_until(0, string_buffer))
@@ -507,7 +531,7 @@ namespace · 4 unmodified lines
507531 }
508532
509533 // See link section in Dis VM specification (http://www.vitanuova.com/inferno/man/6/dis.html)
510− void read_link_section(util::buffered_reader_t &reader, vm_module_t &modobj)
534+ void read_link_section(disvm::util::buffered_reader_t &reader, vm_module_t &modobj)
511535 {
512536 auto success = bool{};
513537 const auto export_count = modobj.header.export_size;
@@ -543,7 +567,7 @@ namespace · 29 unmodified lines
543567 // See import section in Dis VM specification (http://www.vitanuova.com/inferno/man/6/dis.html)
544568 // [SPEC] The specification does not seem to match what is observed in an actual module.
545569 // The function is modeled after the disassembler (dis.b and libinterp/load.c) instead.
546− void read_import_section(util::buffered_reader_t &reader, vm_module_t &modobj)
570+ void read_import_section(disvm::util::buffered_reader_t &reader, vm_module_t &modobj)
547571 {
548572 auto success = bool{};
549573 auto module_import_count = operand_t{};
@@ -592,7 +616,7 @@ namespace · 42 unmodified lines
592616 }
593617
594618 // See handler section in Dis VM specification (http://www.vitanuova.com/inferno/man/6/dis.html)
595− void read_handler_section(util::buffered_reader_t &reader, vm_module_t &modobj)
619+ void read_handler_section(disvm::util::buffered_reader_t &reader, vm_module_t &modobj)
596620 {
597621 auto success = bool{};
598622 auto handler_count = operand_t{};
@@ -604,7 +628,7 @@ namespace · 5 unmodified lines
604628 for (auto c = operand_t{ 0 }; c < handler_count; ++c)
605629 {
606630 // Read in single handler
607− handler_t handler{};
631+ handler_entry_t handler{};
608632
609633 std::tie(success, handler.exception_offset) = read_next_operand(reader);
610634 if (!success) throw module_reader_exception{ "Failed to read exception offset" };
@@ -643,7 +667,7 @@ namespace · 32 unmodified lines
643667 for (auto k = operand_t{ 0 }; k < total_count; ++k)
644668 {
645669 // Read in single exception
646− exception_t except{};
670+ exception_entry_t except{};
647671
648672 auto string_buffer = std::vector<uint8_t>{};
649673 if (!reader.get_bytes_until(0, string_buffer))
@@ -658,7 +682,7 @@ namespace · 8 unmodified lines
658682 }
659683
660684 // Read in wildcard exception
661− exception_t wildcard_exception{};
685+ exception_entry_t wildcard_exception{};
662686 std::tie(success, wildcard_exception.pc) = read_next_operand(reader);
663687 if (!success) throw module_reader_exception{ "Failed to read wildcard exception pc" };
664688
@@ -705,19 +729,19 @@ import_vm_module_t::import_vm_module_t(import_vm_module_t &&other) · 40 unmodified lines
705729 {
706730 }
707731
708−exception_t::exception_t(exception_t &&other)
732+exception_entry_t::exception_entry_t(exception_entry_t &&other)
709733 : pc{ other.pc }
710734 , name{ std::move(other.name) }
711735 {
712736 }
713737
714−exception_t::~exception_t()
738+exception_entry_t::~exception_entry_t()
715739 {
716740 if (name != nullptr)
717741 name->release();
718742 }
719743
720−handler_t::handler_t(handler_t &&other)
744+handler_entry_t::handler_entry_t(handler_entry_t &&other)
721745 : exception_offset{ other.exception_offset }
722746 , begin_pc{ other.begin_pc }
723747 , end_pc{ other.end_pc }
@@ -736,15 +760,15 @@ vm_module_t::~vm_module_t() · 12 unmodified lines
736760 original_mp->release();
737761 }
738762
739−std::unique_ptr<runtime::vm_module_t> disvm::read_module(std::istream &data)
763+std::unique_ptr<vm_module_t> disvm::read_module(std::istream &data)
740764 {
741− util::buffered_reader_t reader{ data };
765+ disvm::util::buffered_reader_t reader{ data };
742766
743767 auto modobj = std::make_unique<vm_module_t>();
744768
745769 read_header(reader, *modobj);
746770
747− if (util::has_flag(modobj->header.runtime_flag, runtime_flags_t::has_import_deprecated))
771+ if (disvm::util::has_flag(modobj->header.runtime_flag, runtime_flags_t::has_import_deprecated))
748772 throw module_reader_exception{ "Obsolete module" };
749773
750774 read_code_section(reader, *modobj);
@@ -753,14 +777,14 @@ std::unique_ptr<runtime::vm_module_t> disvm::read_module(std::istream &data) · 2 unmodified lines
753777 read_module_name(reader, *modobj);
754778 read_link_section(reader, *modobj);
755779
756− if (util::has_flag(modobj->header.runtime_flag, runtime_flags_t::has_import))
780+ if (disvm::util::has_flag(modobj->header.runtime_flag, runtime_flags_t::has_import))
757781 read_import_section(reader, *modobj);
758782
759− if (util::has_flag(modobj->header.runtime_flag, runtime_flags_t::has_handler))
783+ if (disvm::util::has_flag(modobj->header.runtime_flag, runtime_flags_t::has_handler))
760784 read_handler_section(reader, *modobj);
761785
762786 // [TODO] Native code generation - runtime_flags_t::must_compile
763− assert(!util::has_flag(modobj->header.runtime_flag, runtime_flags_t::must_compile));
787+ assert(!disvm::util::has_flag(modobj->header.runtime_flag, runtime_flags_t::must_compile));
764788
765789 return modobj;
766790 }
src/vm/module_ref.cpp+26−12
@@ -10,8 +10,22 @@ · 9 unmodified lines
1010 #include <utils.h>
1111 #include <debug.h>
1212
13−using namespace disvm;
14−using namespace disvm::runtime;
13+using disvm::debug::component_trace_t;
14+using disvm::debug::log_level_t;
15+
16+using disvm::runtime::type_descriptor_t;
17+using disvm::runtime::intrinsic_type_desc;
18+using disvm::runtime::byte_t;
19+using disvm::runtime::word_t;
20+using disvm::runtime::vm_array_t;
21+using disvm::runtime::vm_string_t;
22+using disvm::runtime::vm_module_t;
23+using disvm::runtime::vm_module_ref_t;
24+using disvm::runtime::export_section_t;
25+using disvm::runtime::import_vm_module_t;
26+using disvm::runtime::vm_module_function_ref_t;
27+using disvm::runtime::vm_system_exception;
28+using disvm::runtime::vm_user_exception;
1529
1630 namespace
1731 {
@@ -47,11 +61,11 @@ namespace · 29 unmodified lines
4761 ref.entry_pc = export_entry.pc;
4862 ref.frame_type = export_entry.frame_type;
4963
50− if (debug::is_component_tracing_enabled<debug::component_trace_t::module>())
64+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::module>())
5165 {
52− debug::log_msg(
53− debug::component_trace_t::module,
54− debug::log_level_t::debug,
66+ disvm::debug::log_msg(
67+ component_trace_t::module,
68+ log_level_t::debug,
5569 "export: %d %#08x >>%s<<",
5670 index,
5771 export_entry.sig,
@@ -79,8 +93,8 @@ vm_module_ref_t::vm_module_ref_t(std::shared_ptr<const vm_module_t> module) · 21 unmodified lines
7993 if (module->original_mp != nullptr)
8094 mp_base = vm_alloc_t::copy(*module->original_mp);
8195
82− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
83− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "init: vm module ref");
96+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
97+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "init: vm module ref");
8498 }
8599
86100 vm_module_ref_t::vm_module_ref_t(std::shared_ptr<const vm_module_t> module, const import_vm_module_t &imports)
@@ -97,8 +111,8 @@ vm_module_ref_t::vm_module_ref_t(std::shared_ptr<const vm_module_t> module, cons · 10 unmodified lines
97111 if (module->original_mp != nullptr)
98112 mp_base = vm_alloc_t::copy(*module->original_mp);
99113
100− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
101− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "init: vm module ref: exported %d", _function_refs->get_length());
114+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
115+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "init: vm module ref: exported %d", _function_refs->get_length());
102116 }
103117
104118 vm_module_ref_t::~vm_module_ref_t()
@@ -108,8 +122,8 @@ vm_module_ref_t::~vm_module_ref_t() · 3 unmodified lines
108122 if (_function_refs != nullptr)
109123 _function_refs->release();
110124
111− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
112− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "destroy: vm module ref");
125+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
126+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "destroy: vm module ref");
113127 }
114128
115129 bool vm_module_ref_t::is_builtin_module() const
src/vm/module_resolver.cpp+10−5
@@ -12,7 +12,12 @@ · 11 unmodified lines
1212 #include <exceptions.h>
1313 #include "module_resolver.h"
1414
15−using namespace disvm::runtime;
15+using disvm::debug::component_trace_t;
16+using disvm::debug::log_level_t;
17+
18+using disvm::runtime::default_resolver_t;
19+using disvm::runtime::vm_module_t;
20+using disvm::runtime::vm_module_resolver_t;
1621
1722 // Empty destructor for vm module resolver 'interface'
1823 vm_module_resolver_t::~vm_module_resolver_t()
@@ -34,9 +39,9 @@ bool default_resolver_t::try_resolve_module(const char *path, std::unique_ptr<vm · 15 unmodified lines
3439 {
3540 assert(path != nullptr);
3641
37− auto log = debug::is_component_tracing_enabled<debug::component_trace_t::module>();
42+ auto log = disvm::debug::is_component_tracing_enabled<component_trace_t::module>();
3843 if (log)
39− debug::log_msg(debug::component_trace_t::module, debug::log_level_t::debug, "resolve: try module path: >>%s<<", path);
44+ disvm::debug::log_msg(component_trace_t::module, log_level_t::debug, "resolve: try module path: >>%s<<", path);
4045
4146 auto module_file = std::ifstream{ path, std::ifstream::binary };
4247 if (!module_file.is_open())
@@ -46,13 +51,13 @@ bool default_resolver_t::try_resolve_module(const char *path, std::unique_ptr<vm · 3 unmodified lines
4651 {
4752 p.append(path);
4853 if (log)
49− debug::log_msg(debug::component_trace_t::module, debug::log_level_t::debug, "resolve: try module path: >>%s<<", p.c_str());
54+ disvm::debug::log_msg(component_trace_t::module, log_level_t::debug, "resolve: try module path: >>%s<<", p.c_str());
5055
5156 module_file = std::ifstream{ p, std::ifstream::binary };
5257 if (module_file.is_open())
5358 {
5459 if (log)
55− debug::log_msg(debug::component_trace_t::module, debug::log_level_t::debug, "resolve: successful modified module path: >>%s<< >>%s<<", path, p.c_str());
60+ disvm::debug::log_msg(component_trace_t::module, log_level_t::debug, "resolve: successful modified module path: >>%s<< >>%s<<", path, p.c_str());
5661
5762 break;
5863 }
src/vm/scheduler.cpp+33−24
@@ -11,8 +11,17 @@ · 10 unmodified lines
1111 #include <exceptions.h>
1212 #include "scheduler.h"
1313
14−using namespace disvm;
15−using namespace disvm::runtime;
14+using disvm::vm_t;
15+
16+using disvm::debug::component_trace_t;
17+using disvm::debug::log_level_t;
18+
19+using disvm::runtime::vm_thread_t;
20+using disvm::runtime::vm_scheduler_t;
21+using disvm::runtime::vm_scheduler_control_t;
22+using disvm::runtime::vm_tool_dispatch_t;
23+using disvm::runtime::vm_thread_state_t;
24+using disvm::runtime::default_scheduler_t;
1625
1726 // Empty destructors for vm scheduler 'interfaces'
1827 vm_scheduler_t::~vm_scheduler_t()
@@ -25,7 +34,7 @@ vm_scheduler_control_t::~vm_scheduler_control_t() · 6 unmodified lines
2534
2635 void default_scheduler_t::worker_main(default_scheduler_t &instance)
2736 {
28− debug::log_msg(debug::component_trace_t::scheduler, debug::log_level_t::debug, "scheduler: worker: start");
37+ disvm::debug::log_msg(component_trace_t::scheduler, log_level_t::debug, "scheduler: worker: start");
2938
3039 register_system_thread(instance._vm);
3140 auto current_thread = std::shared_ptr<thread_instance_t>{};
@@ -37,12 +46,12 @@ void default_scheduler_t::worker_main(default_scheduler_t &instance) · 5 unmodified lines
3746 current_thread = instance.next_thread(std::move(current_thread));
3847 if (current_thread == nullptr)
3948 {
40− debug::log_msg(debug::component_trace_t::scheduler, debug::log_level_t::debug, "scheduler: worker: stop");
49+ disvm::debug::log_msg(component_trace_t::scheduler, log_level_t::debug, "scheduler: worker: stop");
4150 break;
4251 }
4352
44− if (debug::is_component_tracing_enabled<debug::component_trace_t::scheduler>())
45− debug::log_msg(debug::component_trace_t::scheduler, debug::log_level_t::debug, "scheduler: worker: execute: %d", current_thread->vm_thread->get_thread_id());
53+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::scheduler>())
54+ disvm::debug::log_msg(component_trace_t::scheduler, log_level_t::debug, "scheduler: worker: execute: %d", current_thread->vm_thread->get_thread_id());
4655
4756 current_thread->vm_thread->execute(instance._vm, instance._vm_thread_quanta);
4857 }
@@ -116,7 +125,7 @@ default_scheduler_t::~default_scheduler_t() · 67 unmodified lines
116125 for (auto &w : _worker_pool)
117126 w.join();
118127
119− debug::log_msg(debug::component_trace_t::scheduler, debug::log_level_t::debug, "scheduler: shutdown");
128+ disvm::debug::log_msg(component_trace_t::scheduler, log_level_t::debug, "scheduler: shutdown");
120129 }
121130
122131 bool default_scheduler_t::is_idle() const
@@ -130,14 +139,14 @@ vm_scheduler_control_t &default_scheduler_t::get_controller() const · 7 unmodified lines
130139 return const_cast<default_scheduler_t&>(*this);
131140 }
132141
133−const vm_thread_t& default_scheduler_t::schedule_thread(std::unique_ptr<runtime::vm_thread_t> thread)
142+const vm_thread_t& default_scheduler_t::schedule_thread(std::unique_ptr<vm_thread_t> thread)
134143 {
135144 assert(thread != nullptr);
136145 if (thread->get_registers().current_thread_state != vm_thread_state_t::ready)
137146 throw vm_system_exception{ "Scheduled thread in invalid state" };
138147
139− if (debug::is_component_tracing_enabled<debug::component_trace_t::scheduler>())
140− debug::log_msg(debug::component_trace_t::scheduler, debug::log_level_t::debug, "scheduler: scheduled: %d", thread->get_thread_id());
148+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::scheduler>())
149+ disvm::debug::log_msg(component_trace_t::scheduler, log_level_t::debug, "scheduler: scheduled: %d", thread->get_thread_id());
141150
142151 std::unique_lock<std::mutex> lock{ _vm_threads_lock };
143152
@@ -251,8 +260,8 @@ void default_scheduler_t::enqueue_blocked_thread(uint32_t thread_id) · 107 unmodified lines
251260
252261 _blocked_vm_thread_ids.erase(blocked_iter);
253262
254− if (debug::is_component_tracing_enabled<debug::component_trace_t::scheduler>())
255− debug::log_msg(debug::component_trace_t::scheduler, debug::log_level_t::debug, "scheduler: enqueue blocked: %d", thread_id);
263+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::scheduler>())
264+ disvm::debug::log_msg(component_trace_t::scheduler, log_level_t::debug, "scheduler: enqueue blocked: %d", thread_id);
256265
257266 const bool runnable_thread = enqueue_thread_unsafe(thread_container.get(), vm_thread_state_t::ready);
258267 if (runnable_thread)
@@ -335,15 +344,15 @@ std::shared_ptr<default_scheduler_t::thread_instance_t> default_scheduler_t::nex · 76 unmodified lines
335344
336345 if (!_all_vm_threads.empty() && _blocked_vm_thread_ids.size() == _all_vm_threads.size())
337346 {
338− debug::log_msg(debug::component_trace_t::scheduler, debug::log_level_t::warning, "scheduler: deadlock detected");
347+ disvm::debug::log_msg(component_trace_t::scheduler, log_level_t::warning, "scheduler: deadlock detected");
339348 assert(false && "VM thread deadlock detected");
340349 }
341350
342351 if (_terminating)
343352 return{};
344353
345− if (debug::is_component_tracing_enabled<debug::component_trace_t::scheduler>())
346− debug::log_msg(debug::component_trace_t::scheduler, debug::log_level_t::debug, "scheduler: worker: waiting");
354+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::scheduler>())
355+ disvm::debug::log_msg(component_trace_t::scheduler, log_level_t::debug, "scheduler: worker: waiting");
347356
348357 _worker_event.wait(lock);
349358
@@ -380,7 +389,7 @@ void default_scheduler_t::perform_gc(bool is_gc_thread, std::unique_lock<std::mu · 30 unmodified lines
380389 }
381390 }
382391
383−bool default_scheduler_t::enqueue_thread_unsafe(thread_instance_t *thread_instance, runtime::vm_thread_state_t current_state)
392+bool default_scheduler_t::enqueue_thread_unsafe(thread_instance_t *thread_instance, vm_thread_state_t current_state)
384393 {
385394 assert(thread_instance != nullptr);
386395
@@ -392,8 +401,8 @@ bool default_scheduler_t::enqueue_thread_unsafe(thread_instance_t *thread_instan · 5 unmodified lines
392401 {
393402 _runnable_vm_thread_ids.push_back(thread_id);
394403
395− if (debug::is_component_tracing_enabled<debug::component_trace_t::scheduler>())
396− debug::log_msg(debug::component_trace_t::scheduler, debug::log_level_t::debug, "scheduler: enqueue: %d", thread_id);
404+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::scheduler>())
405+ disvm::debug::log_msg(component_trace_t::scheduler, log_level_t::debug, "scheduler: enqueue: %d", thread_id);
397406
398407 return true;
399408 }
@@ -404,8 +413,8 @@ bool default_scheduler_t::enqueue_thread_unsafe(thread_instance_t *thread_instan · 4 unmodified lines
404413 {
405414 _blocked_vm_thread_ids.insert(thread_id);
406415
407− if (debug::is_component_tracing_enabled<debug::component_trace_t::scheduler>())
408− debug::log_msg(debug::component_trace_t::scheduler, debug::log_level_t::debug, "scheduler: blocked: %d", thread_id);
416+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::scheduler>())
417+ disvm::debug::log_msg(component_trace_t::scheduler, log_level_t::debug, "scheduler: blocked: %d", thread_id);
409418
410419 break;
411420 }
@@ -413,8 +422,8 @@ bool default_scheduler_t::enqueue_thread_unsafe(thread_instance_t *thread_instan · 1 unmodified line
413422 case vm_thread_state_t::empty_stack:
414423 case vm_thread_state_t::exiting:
415424 {
416− if (debug::is_component_tracing_enabled<debug::component_trace_t::scheduler>())
417− debug::log_msg(debug::component_trace_t::scheduler, debug::log_level_t::debug, "scheduler: exiting: %d", thread_id);
425+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::scheduler>())
426+ disvm::debug::log_msg(component_trace_t::scheduler, log_level_t::debug, "scheduler: exiting: %d", thread_id);
418427
419428 // Remove the thread
420429 auto thread_to_remove = _all_vm_threads.find(thread_id);
@@ -426,8 +435,8 @@ bool default_scheduler_t::enqueue_thread_unsafe(thread_instance_t *thread_instan · 5 unmodified lines
426435
427436 case vm_thread_state_t::broken:
428437 {
429− if (debug::is_component_tracing_enabled<debug::component_trace_t::scheduler>())
430− debug::log_msg(debug::component_trace_t::scheduler, debug::log_level_t::debug, "scheduler: broken: %d", thread_id);
438+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::scheduler>())
439+ disvm::debug::log_msg(component_trace_t::scheduler, log_level_t::debug, "scheduler: broken: %d", thread_id);
431440
432441 auto err_msg = thread_instance->vm_thread->get_error_message();
433442 assert(err_msg != nullptr);
src/vm/stack.cpp+27−19
@@ -11,8 +11,16 @@ · 10 unmodified lines
1111 #include <debug.h>
1212 #include <exceptions.h>
1313
14−using namespace disvm;
15−using namespace disvm::runtime;
14+using disvm::debug::component_trace_t;
15+using disvm::debug::log_level_t;
16+
17+using disvm::runtime::type_descriptor_t;
18+using disvm::runtime::pointer_t;
19+using disvm::runtime::vm_pc_t;
20+using disvm::runtime::vm_module_ref_t;
21+using disvm::runtime::vm_frame_t;
22+using disvm::runtime::vm_stack_t;
23+using disvm::runtime::vm_alloc_t;
1624
1725 namespace
1826 {
@@ -54,7 +62,7 @@ namespace · 35 unmodified lines
5462 ~vm_stack_layout()
5563 {
5664 assert(top_page != nullptr);
57− free_memory(top_page);
65+ disvm::runtime::free_memory(top_page);
5866 }
5967
6068 const std::size_t stack_page_size;
@@ -66,7 +74,7 @@ namespace · 5 unmodified lines
6674 void *new_page()
6775 {
6876 auto current_stack_page = top_page;
69− top_page = alloc_memory<vm_stack_page>(sizeof(vm_stack_page) + stack_page_size);
77+ top_page = disvm::runtime::alloc_memory<vm_stack_page>(sizeof(vm_stack_page) + stack_page_size);
7078
7179 // Initialize the stack allocation.
7280 top_page->prev_page = current_stack_page;
@@ -75,8 +83,8 @@ namespace · 2 unmodified lines
7583 top_page->page_top_frame = nullptr;
7684 top_page->page_limit_addr = reinterpret_cast<std::uintptr_t>(top_page)+stack_page_size;
7785
78− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
79− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "alloc: vm stack alloc: %#" PRIxPTR " %#" PRIxPTR, top_page, top_page->page_limit_addr);
86+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
87+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "alloc: vm stack alloc: %#" PRIxPTR " %#" PRIxPTR, top_page, top_page->page_limit_addr);
8088
8189 return top_page->stack_data();
8290 }
@@ -87,10 +95,10 @@ namespace · 4 unmodified lines
8795 auto current_stack_page = top_page->prev_page;
8896 assert(current_stack_page != nullptr);
8997
90− free_memory(top_page);
98+ disvm::runtime::free_memory(top_page);
9199
92− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
93− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "free: vm stack alloc");
100+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
101+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "free: vm stack alloc");
94102
95103 // Set the top page
96104 top_page = current_stack_page;
@@ -110,8 +118,8 @@ vm_frame_t::vm_frame_t(std::shared_ptr<const type_descriptor_t> &td) · 13 unmodified lines
110118 prev_frame() = nullptr;
111119 prev_module_ref() = nullptr;
112120
113− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
114− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "init: vm frame: %#" PRIxPTR " %d", this, frame_type->size_in_bytes);
121+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
122+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "init: vm frame: %#" PRIxPTR " %d", this, frame_type->size_in_bytes);
115123 }
116124
117125 vm_frame_t::~vm_frame_t()
@@ -120,8 +128,8 @@ vm_frame_t::~vm_frame_t() · 2 unmodified lines
120128
121129 destroy_memory(*frame_type, base());
122130
123− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
124− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "destroy: vm frame: %#" PRIxPTR, this);
131+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
132+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "destroy: vm frame: %#" PRIxPTR, this);
125133 }
126134
127135 void vm_frame_t::copy_frame_contents(const vm_frame_t &other)
@@ -181,7 +189,7 @@ vm_stack_t::vm_stack_t(std::size_t stack_extent) · 53 unmodified lines
181189 : _mem{ std::make_unique<vm_stack_layout>(stack_extent) }
182190 {
183191 assert(0 < stack_extent && stack_extent < static_cast<std::size_t>(std::numeric_limits<word_t>::max()));
184− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "init: vm stack");
192+ log_msg(component_trace_t::memory, log_level_t::debug, "init: vm stack");
185193 }
186194
187195 vm_stack_t::~vm_stack_t()
@@ -195,7 +203,7 @@ vm_stack_t::~vm_stack_t() · 7 unmodified lines
195203 _mem->release();
196204 _mem.reset();
197205
198− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "destroy: vm stack");
206+ log_msg(component_trace_t::memory, log_level_t::debug, "destroy: vm stack");
199207 }
200208
201209 vm_frame_t *vm_stack_t::alloc_frame(std::shared_ptr<const type_descriptor_t> frame_type)
@@ -244,8 +252,8 @@ vm_frame_t *vm_stack_t::push_frame() · 42 unmodified lines
244252
245253 layout->top_frame = new_top_frame;
246254
247− if (debug::is_component_tracing_enabled<debug::component_trace_t::stack>())
248− debug::log_msg(debug::component_trace_t::stack, debug::log_level_t::debug, "update: push vm frame: %#" PRIxPTR, new_top_frame);
255+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::stack>())
256+ log_msg(component_trace_t::stack, log_level_t::debug, "update: push vm frame: %#" PRIxPTR, new_top_frame);
249257
250258 return new_top_frame;
251259 }
@@ -284,8 +292,8 @@ vm_frame_t *vm_stack_t::pop_frame() · 32 unmodified lines
284292 }
285293 }
286294
287− if (debug::is_component_tracing_enabled<debug::component_trace_t::stack>())
288− debug::log_msg(debug::component_trace_t::stack, debug::log_level_t::debug, "update: pop vm frame: %#" PRIxPTR, current_frame);
295+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::stack>())
296+ log_msg(component_trace_t::stack, log_level_t::debug, "update: pop vm frame: %#" PRIxPTR, current_frame);
289297
290298 return current_frame;
291299 }
src/vm/string.cpp+24−19
@@ -11,8 +11,13 @@ · 10 unmodified lines
1111 #include <debug.h>
1212 #include <exceptions.h>
1313
14−using namespace disvm;
15−using namespace disvm::runtime;
14+using disvm::debug::component_trace_t;
15+using disvm::debug::log_level_t;
16+
17+using disvm::runtime::intrinsic_type_desc;
18+using disvm::runtime::type_descriptor_t;
19+using disvm::runtime::vm_string_t;
20+using disvm::runtime::word_t;
1621
1722 std::shared_ptr<const type_descriptor_t> vm_string_t::type_desc()
1823 {
@@ -47,8 +52,8 @@ namespace · 28 unmodified lines
4752 {
4853 for (auto i = word_t{ 0 }; i < len; ++i)
4954 {
50− const auto sc1 = static_cast<runtime::rune_t>(s1[i]);
51− const auto sc2 = static_cast<runtime::rune_t>(s2[i]);
55+ const auto sc1 = static_cast<disvm::runtime::rune_t>(s1[i]);
56+ const auto sc2 = static_cast<disvm::runtime::rune_t>(s2[i]);
5257
5358 if (sc1 != sc2)
5459 return (sc1 < sc2) ? (-1) : 1;
@@ -128,10 +133,10 @@ namespace · 73 unmodified lines
128133 }
129134
130135 template<>
131− void copy_characters_to(runtime::rune_t *dest, word_t dest_start, const runtime::rune_t *source, word_t source_length)
136+ void copy_characters_to(disvm::runtime::rune_t *dest, word_t dest_start, const disvm::runtime::rune_t *source, word_t source_length)
132137 {
133138 assert(dest != nullptr && source != nullptr && dest != source);
134− std::memcpy((dest + dest_start), source, (source_length * sizeof(runtime::rune_t)));
139+ std::memcpy((dest + dest_start), source, (source_length * sizeof(disvm::runtime::rune_t)));
135140 }
136141
137142 void combine(
@@ -146,14 +151,14 @@ namespace · 8 unmodified lines
146151 {
147152 if (dest_is_rune)
148153 {
149− auto dest_rune = reinterpret_cast<runtime::rune_t *>(dest);
154+ auto dest_rune = reinterpret_cast<disvm::runtime::rune_t *>(dest);
150155 if (source1_is_rune)
151− copy_characters_to(dest_rune, 0, reinterpret_cast<const runtime::rune_t *>(source1), source1_length);
156+ copy_characters_to(dest_rune, 0, reinterpret_cast<const disvm::runtime::rune_t *>(source1), source1_length);
152157 else
153158 copy_characters_to(dest_rune, 0, source1, source1_length);
154159
155160 if (source2_is_rune)
156− copy_characters_to(dest_rune, source1_length, reinterpret_cast<const runtime::rune_t *>(source2), source2_length);
161+ copy_characters_to(dest_rune, source1_length, reinterpret_cast<const disvm::runtime::rune_t *>(source2), source2_length);
157162 else
158163 copy_characters_to(dest_rune, source1_length, source2, source2_length);
159164 }
@@ -235,8 +240,8 @@ vm_string_t::vm_string_t(std::size_t encoded_str_len, const uint8_t *encoded_str · 75 unmodified lines
235240 encoded_str += utf8::decode(encoded_str, rune_dest[i]);
236241 }
237242
238− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
239− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "init: vm string: %d %d >>%s<<", _length, (_length_max * _character_size), dest);
243+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
244+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "init: vm string: %d %d >>%s<<", _length, (_length_max * _character_size), dest);
240245 }
241246
242247 vm_string_t::vm_string_t(const vm_string_t &s1, const vm_string_t &s2)
@@ -297,8 +302,8 @@ vm_string_t::vm_string_t(const vm_string_t &other, word_t begin_index, word_t en · 54 unmodified lines
297302 const auto length_in_bytes = _length * _character_size;
298303 std::memcpy(dest, (src + (begin_index * _character_size)), length_in_bytes);
299304
300− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
301− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "copy: vm string: %#" PRIxPTR " %d %d %#" PRIxPTR, &other, begin_index, end_index, this);
305+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
306+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "copy: vm string: %#" PRIxPTR " %d %d %#" PRIxPTR, &other, begin_index, end_index, this);
302307 }
303308
304309 vm_string_t::~vm_string_t()
@@ -314,8 +319,8 @@ vm_string_t::~vm_string_t() · 9 unmodified lines
314319 debug::assign_debug_pointer(&source);
315320 debug::assign_debug_pointer(&_encoded_str);
316321
317− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
318− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "destroy: vm string");
322+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
323+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "destroy: vm string");
319324 }
320325
321326 vm_string_t &vm_string_t::append(const vm_string_t &other)
@@ -389,7 +394,7 @@ word_t vm_string_t::get_length() const · 67 unmodified lines
389394 return _length;
390395 }
391396
392−runtime::rune_t vm_string_t::get_rune(word_t index) const
397+disvm::runtime::rune_t vm_string_t::get_rune(word_t index) const
393398 {
394399 if (index < 0 || _length <= index)
395400 throw index_out_of_range_memory{ 0, _length - 1, index };
@@ -401,12 +406,12 @@ runtime::rune_t vm_string_t::get_rune(word_t index) const · 5 unmodified lines
401406
402407 // Check if multi-byte or ASCII
403408 if (_character_size != sizeof(char))
404− return reinterpret_cast<const rune_t *>(source)[index];
409+ return reinterpret_cast<const disvm::runtime::rune_t *>(source)[index];
405410 else
406− return static_cast<const rune_t>(source[index]);
411+ return static_cast<const disvm::runtime::rune_t>(source[index]);
407412 }
408413
409−void vm_string_t::set_rune(word_t index, rune_t value)
414+void vm_string_t::set_rune(word_t index, disvm::runtime::rune_t value)
410415 {
411416 // This function does not adhere to the immutable string contract.
412417 // Therefore, it is unsafe to call this function if there is more
src/vm/sys/Sysmod.cpp+62−47
@@ -18,8 +18,23 @@ · 17 unmodified lines
1818 #include "Sysmod.h"
1919 #include "sys_utils.h"
2020
21−using namespace disvm;
22−using namespace disvm::runtime;
21+using disvm::vm_t;
22+
23+using disvm::debug::component_trace_t;
24+using disvm::debug::log_level_t;
25+
26+using disvm::runtime::dereference_nil;
27+using disvm::runtime::intrinsic_type_desc;
28+using disvm::runtime::out_of_range_memory;
29+using disvm::runtime::type_descriptor_t;
30+using disvm::runtime::vm_alloc_t;
31+using disvm::runtime::vm_array_t;
32+using disvm::runtime::vm_list_t;
33+using disvm::runtime::vm_string_t;
34+using disvm::runtime::vm_syscall_exception;
35+using disvm::runtime::vm_system_exception;
36+using disvm::runtime::vm_user_exception;
37+using disvm::runtime::word_t;
2338
2439 namespace
2540 {
@@ -85,16 +100,16 @@ namespace · 59 unmodified lines
85100 {
86101 auto fd = fileHandle->get_allocation<vm_fd_t>();
87102
88− if (debug::is_component_tracing_enabled<debug::component_trace_t::builtin>())
103+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::builtin>())
89104 {
90− debug::log_msg(
91− debug::component_trace_t::builtin,
92− debug::log_level_t::debug,
105+ disvm::debug::log_msg(
106+ component_trace_t::builtin,
107+ log_level_t::debug,
93108 "sys: fd: finalize: %d",
94109 fd->fd);
95110 }
96111
97− sys::drop_fd_record(fd->fd);
112+ disvm::runtime::sys::drop_fd_record(fd->fd);
98113 fd->~vm_fd_t();
99114 }
100115
@@ -102,7 +117,7 @@ namespace · 1 unmodified line
102117 {
103118 assert(s != nullptr);
104119 auto alloc = vm_alloc_t::allocate(T_FD);
105− const auto fd = sys::create_fd_record(alloc);
120+ const auto fd = disvm::runtime::sys::create_fd_record(alloc);
106121 auto vm_fd = ::new(alloc->get_allocation())vm_fd_t{ fd, std::move(s), fd_mode, fd_path };
107122
108123 return std::make_tuple(vm_fd->fd, alloc);
@@ -143,8 +158,8 @@ namespace · 34 unmodified lines
143158
144159 ~vm_fd_t()
145160 {
146− debug::assign_debug_pointer(&_istream);
147− debug::assign_debug_pointer(&_ostream);
161+ disvm::debug::assign_debug_pointer(&_istream);
162+ disvm::debug::assign_debug_pointer(&_ostream);
148163 if (_stream != nullptr)
149164 _stream.reset();
150165
@@ -153,7 +168,7 @@ namespace · 2 unmodified lines
153168 std::remove(_fd_path->str());
154169
155170 dec_ref_count_and_free(_fd_path);
156− debug::assign_debug_pointer(&_fd_path);
171+ disvm::debug::assign_debug_pointer(&_fd_path);
157172 }
158173
159174 word_t get_original_mode() const
@@ -217,7 +232,7 @@ namespace · 57 unmodified lines
217232 disvm::runtime::pointer_t base)
218233 {
219234 auto static_buffer = std::array<char, 1024>{};
220− auto written = sys::printf_to_buffer(vm, msg_fmt, msg_args, base, static_buffer.size(), static_buffer.data());
235+ auto written = disvm::runtime::sys::printf_to_buffer(vm, msg_fmt, msg_args, base, static_buffer.size(), static_buffer.data());
221236 if (written >= 0)
222237 {
223238 fd.write(vm, written, static_buffer.data());
@@ -225,7 +240,7 @@ namespace · 1 unmodified line
225240 else
226241 {
227242 auto dynamic_buffer = std::vector<char>(static_buffer.size() * 2);
228− written = sys::printf_to_dynamic_buffer(vm, msg_fmt, msg_args, base, dynamic_buffer);
243+ written = disvm::runtime::sys::printf_to_dynamic_buffer(vm, msg_fmt, msg_args, base, dynamic_buffer);
229244 fd.write(vm, written, dynamic_buffer.data());
230245 }
231246
@@ -270,7 +285,7 @@ namespace · 38 unmodified lines
270285 void
271286 Sysmodinit(void)
272287 {
273− builtin::register_module_exports(Sys_PATH, Sysmodlen, Sysmodtab);
288+ disvm::runtime::builtin::register_module_exports(Sys_PATH, Sysmodlen, Sysmodtab);
274289 T_Qid = type_descriptor_t::create(sizeof(Sys_Qid), sizeof(Sys_Qid_map), Sys_Qid_map);
275290 T_Dir = type_descriptor_t::create(sizeof(Sys_Dir), sizeof(Sys_Dir_map), Sys_Dir_map);
276291 T_FD = type_descriptor_t::create(sizeof(vm_fd_t), sizeof(Sys_FD_map), Sys_FD_map, vm_fd_t::finalizer);
@@ -281,23 +296,23 @@ Sysmodinit(void) · 4 unmodified lines
281296
282297 {
283298 auto vm_stdin = vm_alloc_t::allocate(T_FD);
284− const auto fd = sys::create_fd_record(vm_stdin);
299+ const auto fd = disvm::runtime::sys::create_fd_record(vm_stdin);
285300 fd_stdin = ::new(vm_stdin->get_allocation())vm_fd_t{ fd, std::cin };
286− debug::log_msg(debug::component_trace_t::builtin, debug::log_level_t::debug, "sys: stdin: %d", fd);
301+ disvm::debug::log_msg(component_trace_t::builtin, log_level_t::debug, "sys: stdin: %d", fd);
287302 }
288303
289304 {
290305 auto vm_stdout = vm_alloc_t::allocate(T_FD);
291− const auto fd = sys::create_fd_record(vm_stdout);
306+ const auto fd = disvm::runtime::sys::create_fd_record(vm_stdout);
292307 fd_stdout = ::new(vm_stdout->get_allocation())vm_fd_t{ fd, std::cout };
293− debug::log_msg(debug::component_trace_t::builtin, debug::log_level_t::debug, "sys: stdout: %d", fd);
308+ disvm::debug::log_msg(component_trace_t::builtin, log_level_t::debug, "sys: stdout: %d", fd);
294309 }
295310
296311 {
297312 auto vm_stderr = vm_alloc_t::allocate(T_FD);
298− const auto fd = sys::create_fd_record(vm_stderr);
313+ const auto fd = disvm::runtime::sys::create_fd_record(vm_stderr);
299314 fd_stderr = ::new(vm_stderr->get_allocation())vm_fd_t{ fd, std::cerr };
300− debug::log_msg(debug::component_trace_t::builtin, debug::log_level_t::debug, "sys: stderr: %d", fd);
315+ disvm::debug::log_msg(component_trace_t::builtin, log_level_t::debug, "sys: stderr: %d", fd);
301316 }
302317 }
303318
@@ -339,21 +354,21 @@ Sys_byte2char(vm_registers_t &r, vm_t &vm) · 35 unmodified lines
339354 fp.ret->t1 = 0;
340355 fp.ret->t2 = 0;
341356
342− auto state = utf8::decode_state_t::accept;
343− auto result = runtime::rune_t{};
357+ auto state = disvm::runtime::utf8::decode_state_t::accept;
358+ auto result = disvm::runtime::rune_t{};
344359 const auto buffer_len = buffer->get_length();
345360 for (auto i = n; i < buffer_len; ++i)
346361 {
347362 auto b = buffer->at<byte_t>(i);
348− state = utf8::decode_step(state, result, b);
349− if (state == utf8::decode_state_t::accept)
363+ state = disvm::runtime::utf8::decode_step(state, result, b);
364+ if (state == disvm::runtime::utf8::decode_state_t::accept)
350365 {
351366 fp.ret->t0 = result;
352367 fp.ret->t1 = (i - n) + 1; // Number of bytes consumed
353368 fp.ret->t2 = 1;
354369 return;
355370 }
356− else if (state == utf8::decode_state_t::reject)
371+ else if (state == disvm::runtime::utf8::decode_state_t::reject)
357372 {
358373 fp.ret->t1 = 1;
359374 return;
@@ -373,13 +388,13 @@ Sys_char2byte(vm_registers_t &r, vm_t &vm) · 13 unmodified lines
373388 if (buffer == nullptr || n >= buffer->get_length())
374389 throw out_of_range_memory{};
375390
376− const auto rune = static_cast<runtime::rune_t>(fp.c);
391+ const auto rune = static_cast<disvm::runtime::rune_t>(fp.c);
377392
378393 static_assert(Sys_UTFmax == sizeof(rune), "UTF max should be same size as rune");
379394 uint8_t buffer_local[Sys_UTFmax];
380395 auto begin = buffer_local;
381396
382− auto end = utf8::encode(rune, begin);
397+ auto end = disvm::runtime::utf8::encode(rune, begin);
383398 const auto count = static_cast<word_t>(end - begin);
384399
385400 const auto final_index = n + count;
@@ -414,12 +429,12 @@ Sys_create(vm_registers_t &r, vm_t &vm) · 28 unmodified lines
414429 auto path = vm_alloc_t::from_allocation<vm_string_t>(fp.s);
415430 const auto open_mode = convert_to_openmode(fp.mode);
416431
417− auto cfs_flag = sys::cfs_flags_t::none;
432+ auto cfs_flag = disvm::runtime::sys::cfs_flags_t::none;
418433 if (fp.mode & Sys_OEXCL)
419− cfs_flag = (sys::cfs_flags_t::atomic | sys::cfs_flags_t::ensure_create);
434+ cfs_flag = (disvm::runtime::sys::cfs_flags_t::atomic | disvm::runtime::sys::cfs_flags_t::ensure_create);
420435
421436 // [TODO] Apply the requested permissions to the file.
422− auto file_stream = sys::create_file_stream(path->str(), (open_mode | std::ios::binary), cfs_flag);
437+ auto file_stream = disvm::runtime::sys::create_file_stream(path->str(), (open_mode | std::ios::binary), cfs_flag);
423438
424439 // Return null if file stream is not open.
425440 if (file_stream == nullptr)
@@ -432,11 +447,11 @@ Sys_create(vm_registers_t &r, vm_t &vm) · 6 unmodified lines
432447 auto fd = word_t{};
433448 std::tie(fd, fd_alloc) = vm_fd_t::create(std::move(file_stream), fp.mode, path);
434449
435− if (debug::is_component_tracing_enabled<debug::component_trace_t::builtin>())
450+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::builtin>())
436451 {
437− debug::log_msg(
438− debug::component_trace_t::builtin,
439− debug::log_level_t::debug,
452+ disvm::debug::log_msg(
453+ component_trace_t::builtin,
454+ log_level_t::debug,
440455 "sys: create: %d >>%s<< %#x %#x",
441456 fd,
442457 path->str(),
@@ -497,7 +512,7 @@ Sys_fildes(vm_registers_t &r, vm_t &vm) · 54 unmodified lines
497512 dec_ref_count_and_free(vm_alloc_t::from_allocation(*fp.ret));
498513 *fp.ret = nullptr;
499514
500− auto fd = sys::fetch_fd_record(fp.fd);
515+ auto fd = disvm::runtime::sys::fetch_fd_record(fp.fd);
501516 if (fd != nullptr)
502517 {
503518 fd->add_ref();
@@ -588,7 +603,7 @@ Sys_open(vm_registers_t &r, vm_t &vm) · 84 unmodified lines
588603 const auto open_mode = convert_to_openmode(fp.mode);
589604
590605 // [TODO] Handle opening devices - not just files (i.e. /dev/random, /dev/source, /proc/1234)
591− auto file_stream = sys::create_file_stream(path->str(), (open_mode | std::ios::binary));
606+ auto file_stream = disvm::runtime::sys::create_file_stream(path->str(), (open_mode | std::ios::binary));
592607
593608 // Return null if file stream is not open.
594609 if (file_stream == nullptr)
@@ -601,11 +616,11 @@ Sys_open(vm_registers_t &r, vm_t &vm) · 6 unmodified lines
601616 auto fd = word_t{};
602617 std::tie(fd, fd_alloc) = vm_fd_t::create(std::move(file_stream), fp.mode, path);
603618
604− if (debug::is_component_tracing_enabled<debug::component_trace_t::builtin>())
619+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::builtin>())
605620 {
606− debug::log_msg(
607− debug::component_trace_t::builtin,
608− debug::log_level_t::debug,
621+ disvm::debug::log_msg(
622+ component_trace_t::builtin,
623+ log_level_t::debug,
609624 "sys: open: %d >>%s<< %#x",
610625 fd,
611626 path->str(),
@@ -746,7 +761,7 @@ Sys_sprint(vm_registers_t &r, vm_t &vm) · 134 unmodified lines
746761 vm_string_t *new_string;
747762 auto static_buffer = std::array<char, 128>{};
748763 auto msg_args = &fp.vargs;
749− auto written = sys::printf_to_buffer(vm, *str, msg_args, fp_base, static_buffer.size(), static_buffer.data());
764+ auto written = disvm::runtime::sys::printf_to_buffer(vm, *str, msg_args, fp_base, static_buffer.size(), static_buffer.data());
750765 if (written >= 0)
751766 {
752767 new_string = new vm_string_t{ static_cast<std::size_t>(written), reinterpret_cast<uint8_t *>(static_buffer.data()) };
@@ -754,7 +769,7 @@ Sys_sprint(vm_registers_t &r, vm_t &vm) · 1 unmodified line
754769 else
755770 {
756771 auto dynamic_buffer = std::vector<char>(static_buffer.size() * 2);
757− written = sys::printf_to_dynamic_buffer(vm, *str, msg_args, fp_base, dynamic_buffer);
772+ written = disvm::runtime::sys::printf_to_dynamic_buffer(vm, *str, msg_args, fp_base, dynamic_buffer);
758773 new_string = new vm_string_t{ static_cast<std::size_t>(written), reinterpret_cast<uint8_t *>(dynamic_buffer.data()) };
759774 }
760775
@@ -777,7 +792,7 @@ Sys_stream(vm_registers_t &r, vm_t &vm) · 16 unmodified lines
777792
778793 namespace
779794 {
780− bool is_delim(const runtime::rune_t c, const vm_string_t &delim)
795+ bool is_delim(const disvm::runtime::rune_t c, const vm_string_t &delim)
781796 {
782797 const auto max = delim.get_length();
783798
@@ -837,7 +852,7 @@ Sys_tokenize(vm_registers_t &r, vm_t &vm) · 53 unmodified lines
837852 if (delim == nullptr || delim->get_length() == 0)
838853 {
839854 // Add supplied string to list
840− pt_ref(curr_node->value()) = s->get_allocation();
855+ disvm::runtime::pt_ref(curr_node->value()) = s->get_allocation();
841856 s->add_ref();
842857
843858 fp.ret->t0 = 1;
@@ -881,7 +896,7 @@ Sys_tokenize(vm_registers_t &r, vm_t &vm) · 37 unmodified lines
881896 curr_node = new vm_list_t{ intrinsic_type_desc::type<pointer_t>() };
882897
883898 const auto token = new vm_string_t{ *s, begin, end };
884− pt_ref(curr_node->value()) = token->get_allocation();
899+ disvm::runtime::pt_ref(curr_node->value()) = token->get_allocation();
885900
886901 // Previous node is initially null
887902 if (prev_node != nullptr)
@@ -921,7 +936,7 @@ Sys_utfbytes(vm_registers_t &r, vm_t &vm) · 33 unmodified lines
921936
922937 auto raw_buffer = reinterpret_cast<uint8_t *>(buffer->at(0));
923938
924− const auto len = utf8::count_codepoints(raw_buffer, n);
939+ const auto len = disvm::runtime::utf8::count_codepoints(raw_buffer, n);
925940 *fp.ret = static_cast<word_t>(len.byte_count);
926941 assert(*fp.ret <= n && "Code points should not exceed number of bytes processed");
927942 }
@@ -936,7 +951,7 @@ Sys_werrstr(vm_registers_t &r, vm_t &vm) · 8 unmodified lines
936951 if (s != nullptr)
937952 new_err = s->str();
938953
939− push_syscall_error_message(vm, new_err);
954+ disvm::runtime::push_syscall_error_message(vm, new_err);
940955 *fp.ret = 0;
941956 }
942957
src/vm/sys/Sysmod.h+9−2
@@ -11,8 +11,15 @@ · 10 unmodified lines
1111 #include <disvm.h>
1212 #include <builtin_module.h>
1313
14−using namespace disvm;
15−using namespace disvm::runtime;
14+using disvm::vm_t;
15+
16+using disvm::runtime::byte_t;
17+using disvm::runtime::word_t;
18+using disvm::runtime::big_t;
19+using disvm::runtime::real_t;
20+using disvm::runtime::pointer_t;
21+using disvm::runtime::vm_registers_t;
22+using disvm::runtime::vm_frame_base_alloc_t;
1623
1724 struct Sys_Qid
1825 {
src/vm/sys/fd_manager.cpp+2−1
@@ -11,7 +11,8 @@ · 10 unmodified lines
1111 #include <vm_memory.h>
1212 #include "sys_utils.h"
1313
14−using namespace disvm::runtime;
14+using disvm::runtime::vm_alloc_t;
15+using disvm::runtime::word_t;
1516
1617 namespace
1718 {
src/vm/sys/file_system.cpp+0−2
@@ -10,8 +10,6 @@ · 9 unmodified lines
1010 #include <utils.h>
1111 #include "sys_utils.h"
1212
13−using namespace disvm::runtime;
14−
1513 namespace
1614 {
1715 std::mutex _create_file_stream_mutex;
src/vm/sys/print.cpp+4−2
@@ -9,8 +9,10 @@ · 8 unmodified lines
99 #include <utf8.h>
1010 #include "sys_utils.h"
1111
12−using namespace disvm::runtime;
13−using namespace disvm::runtime::utf8;
12+using disvm::runtime::byte_t;
13+using disvm::runtime::pointer_t;
14+using disvm::runtime::vm_array_t;
15+using disvm::runtime::word_t;
1416
1517 namespace
1618 {
src/vm/thread.cpp+38−19
@@ -16,8 +16,28 @@ · 15 unmodified lines
1616 #include "execution_table.h"
1717 #include "tool_dispatch.h"
1818
19−using namespace disvm;
20−using namespace disvm::runtime;
19+using disvm::vm_t;
20+using disvm::opcode_t;
21+
22+using disvm::debug::component_trace_t;
23+using disvm::debug::log_level_t;
24+
25+using disvm::runtime::type_descriptor_t;
26+using disvm::runtime::word_t;
27+using disvm::runtime::pointer_t;
28+using disvm::runtime::vm_pc_t;
29+using disvm::runtime::vm_exec_op_t;
30+using disvm::runtime::vm_thread_t;
31+using disvm::runtime::vm_frame_t;
32+using disvm::runtime::vm_module_t;
33+using disvm::runtime::vm_module_ref_t;
34+using disvm::runtime::vm_registers_t;
35+using disvm::runtime::address_mode_t;
36+using disvm::runtime::address_mode_middle_t;
37+using disvm::runtime::vm_trap_flags_t;
38+using disvm::runtime::vm_thread_state_t;
39+using disvm::runtime::vm_tool_dispatch_t;
40+using disvm::runtime::vm_system_exception;
2141
2242 namespace
2343 {
@@ -30,11 +50,11 @@ namespace · 6 unmodified lines
3050
3151 #ifndef NDEBUG
3252 // This is a perf critical function so logging is only available in debug builds
33− if (debug::is_component_tracing_enabled<debug::component_trace_t::addressing>())
53+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::addressing>())
3454 {
35− debug::log_msg(
36− debug::component_trace_t::addressing,
37− debug::log_level_t::debug,
55+ disvm::debug::log_msg(
56+ component_trace_t::addressing,
57+ log_level_t::debug,
3858 "decode: registers: %d (%#" PRIxPTR " %#" PRIxPTR " %#" PRIxPTR ")",
3959 inst.opcode,
4060 reg.src,
@@ -130,7 +150,7 @@ vm_thread_t::vm_thread_t( · 89 unmodified lines
130150 // Pushing the initial frame sets the FP register
131151 _registers.stack.push_frame();
132152
133− debug::log_msg(debug::component_trace_t::thread, debug::log_level_t::debug, "init: vm thread: %d %d", _thread_id, _parent_thread_id);
153+ disvm::debug::log_msg(component_trace_t::thread, log_level_t::debug, "init: vm thread: %d %d", _thread_id, _parent_thread_id);
134154 }
135155
136156 vm_thread_t::vm_thread_t(
@@ -159,14 +179,14 @@ vm_thread_t::vm_thread_t( · 22 unmodified lines
159179 // Copy over the frame into this thread - pass arguments to the thread
160180 current_frame->copy_frame_contents(initial_frame);
161181
162− if (debug::is_component_tracing_enabled<debug::component_trace_t::thread>())
163− debug::log_msg(debug::component_trace_t::thread, debug::log_level_t::debug, "init: vm thread: %d %d", _thread_id, _parent_thread_id);
182+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::thread>())
183+ disvm::debug::log_msg(component_trace_t::thread, log_level_t::debug, "init: vm thread: %d %d", _thread_id, _parent_thread_id);
164184 }
165185
166186 vm_thread_t::~vm_thread_t()
167187 {
168− if (debug::is_component_tracing_enabled<debug::component_trace_t::thread>())
169− debug::log_msg(debug::component_trace_t::thread, debug::log_level_t::debug, "destroy: vm thread: %d %d", _thread_id, _parent_thread_id);
188+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::thread>())
189+ disvm::debug::log_msg(component_trace_t::thread, log_level_t::debug, "destroy: vm thread: %d %d", _thread_id, _parent_thread_id);
170190
171191 free_memory(_error_message);
172192 debug::assign_debug_pointer(&_error_message);
@@ -187,7 +207,7 @@ namespace · 14 unmodified lines
187207 static void after_exec(vm_registers_t &r, vm_t &)
188208 {
189209 if (r.trap_flags == vm_trap_flags_t::none
190− || !util::has_flag(r.trap_flags, vm_trap_flags_t::instruction))
210+ || !disvm::util::has_flag(r.trap_flags, vm_trap_flags_t::instruction))
191211 return;
192212
193213 auto tool_dispatch = r.tool_dispatch.load();
@@ -217,13 +237,12 @@ namespace · 23 unmodified lines
217237 assert(!r.module_ref->is_builtin_module() && "Interpreter thread is unable to execute native instructions");
218238 const auto &inst = code_section[r.pc].op;
219239 const auto opcode = static_cast<std::size_t>(inst.opcode);
220− if (static_cast<std::size_t>(opcode_t::last_opcode) < opcode)
221− throw vm_system_exception{ "Unknown op-code" };
240+ assert(opcode <= static_cast<std::size_t>(opcode_t::last_opcode));
222241
223242 // Instruction is valid, decode and update registers for operation
224243 decode_address(inst, r);
225244 r.next_pc = (r.pc + 1);
226− vm_exec_table[opcode](r, vm);
245+ disvm::runtime::vm_exec_table[opcode](r, vm);
227246 r.pc = r.next_pc;
228247
229248 EXEC_DETOUR::after_exec(r, vm);
@@ -280,11 +299,11 @@ vm_thread_state_t vm_thread_t::execute(vm_t &vm, const uint32_t quanta) · 50 unmodified lines
280299 }
281300
282301 // Log the execution result
283− if (debug::is_component_tracing_enabled<debug::component_trace_t::thread>())
302+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::thread>())
284303 {
285− debug::log_msg(
286− debug::component_trace_t::thread,
287− debug::log_level_t::debug,
304+ disvm::debug::log_msg(
305+ component_trace_t::thread,
306+ log_level_t::debug,
288307 "status: vm thread: execute: %d %d %d %d",
289308 _thread_id,
290309 (quanta - _registers.current_thread_quanta),
src/vm/tool_dispatch.cpp+36−17
@@ -14,8 +14,27 @@ · 13 unmodified lines
1414 #include <utils.h>
1515 #include "tool_dispatch.h"
1616
17−using namespace disvm;
18−using namespace disvm::runtime;
17+using disvm::vm_t;
18+using disvm::opcode_t;
19+using disvm::loaded_vm_module_t;
20+
21+using disvm::debug::component_trace_t;
22+using disvm::debug::log_level_t;
23+
24+using disvm::runtime::cookie_t;
25+using disvm::runtime::vm_pc_t;
26+using disvm::runtime::vm_module_t;
27+using disvm::runtime::vm_thread_t;
28+using disvm::runtime::vm_registers_t;
29+using disvm::runtime::vm_alloc_t;
30+using disvm::runtime::vm_string_t;
31+using disvm::runtime::vm_tool_t;
32+using disvm::runtime::vm_tool_dispatch_t;
33+using disvm::runtime::vm_trap_flags_t;
34+using disvm::runtime::vm_event_t;
35+using disvm::runtime::vm_event_context_t;
36+using disvm::runtime::vm_event_callback_t;
37+using disvm::runtime::breakpoint_details_t;
1938
2039 // Empty destructor for vm tool 'interface'
2140 vm_tool_t::~vm_tool_t()
@@ -38,7 +57,7 @@ vm_tool_dispatch_t::~vm_tool_dispatch_t() · 16 unmodified lines
3857 t.second->on_unload();
3958 }
4059
41−std::size_t vm_tool_dispatch_t::load_tool(std::shared_ptr<runtime::vm_tool_t> tool)
60+std::size_t vm_tool_dispatch_t::load_tool(std::shared_ptr<vm_tool_t> tool)
4261 {
4362 static std::size_t _tool_id_counter{ 1 };
4463
@@ -58,16 +77,16 @@ std::size_t vm_tool_dispatch_t::load_tool(std::shared_ptr<runtime::vm_tool_t> to · 13 unmodified lines
5877 }
5978 catch (...)
6079 {
61− if (debug::is_component_tracing_enabled<debug::component_trace_t::tool>())
62− debug::log_msg(debug::component_trace_t::tool, debug::log_level_t::warning, "load: tool: failure");
80+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::tool>())
81+ disvm::debug::log_msg(component_trace_t::tool, log_level_t::warning, "load: tool: failure");
6382
6483 // The ID is tainted and will not be re-used
6584 _tools.erase(current_id);
6685 throw;
6786 }
6887
69− if (debug::is_component_tracing_enabled<debug::component_trace_t::tool>())
70− debug::log_msg(debug::component_trace_t::tool, debug::log_level_t::debug, "load: tool: %d", current_id);
88+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::tool>())
89+ disvm::debug::log_msg(component_trace_t::tool, log_level_t::debug, "load: tool: %d", current_id);
7190
7291 return current_id;
7392 }
@@ -83,8 +102,8 @@ std::size_t vm_tool_dispatch_t::unload_tool(std::size_t tool_id) · 9 unmodified lines
83102 auto tool = iter->second;
84103 _tools.erase(iter);
85104
86− if (debug::is_component_tracing_enabled<debug::component_trace_t::tool>())
87− debug::log_msg(debug::component_trace_t::tool, debug::log_level_t::debug, "unload: tool: %d", tool_id);
105+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::tool>())
106+ disvm::debug::log_msg(component_trace_t::tool, log_level_t::debug, "unload: tool: %d", tool_id);
88107
89108 assert(tool != nullptr);
90109 tool->on_unload();
@@ -222,8 +241,8 @@ cookie_t vm_tool_dispatch_t::subscribe_event(vm_event_t evt, vm_event_callback_t · 131 unmodified lines
222241 // Store the cookie with the associate event
223242 _events.cookie_to_event[cookie_id] = evt;
224243
225− if (debug::is_component_tracing_enabled<debug::component_trace_t::tool>())
226− debug::log_msg(debug::component_trace_t::tool, debug::log_level_t::debug, "subscribe: event: %d %d", evt, cookie_id);
244+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::tool>())
245+ disvm::debug::log_msg(component_trace_t::tool, log_level_t::debug, "subscribe: event: %d %d", evt, cookie_id);
227246
228247 return cookie_id;
229248 }
@@ -242,8 +261,8 @@ void vm_tool_dispatch_t::unsubscribe_event(cookie_t cookie_id) · 12 unmodified lines
242261 event_callbacks.erase(cookie_id);
243262 _events.cookie_to_event.erase(iter);
244263
245− if (debug::is_component_tracing_enabled<debug::component_trace_t::tool>())
246− debug::log_msg(debug::component_trace_t::tool, debug::log_level_t::debug, "unsubscribe: event: %d %d", evt, cookie_id);
264+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::tool>())
265+ disvm::debug::log_msg(component_trace_t::tool, log_level_t::debug, "unsubscribe: event: %d %d", evt, cookie_id);
247266 }
248267
249268 cookie_t vm_tool_dispatch_t::set_breakpoint(std::shared_ptr<vm_module_t> module, vm_pc_t pc)
@@ -280,8 +299,8 @@ cookie_t vm_tool_dispatch_t::set_breakpoint(std::shared_ptr<vm_module_t> module, · 30 unmodified lines
280299 // Replace the current opcode with breakpoint
281300 code_section[pc].op.opcode = opcode_t::brkpt;
282301
283− if (debug::is_component_tracing_enabled<debug::component_trace_t::tool>())
284− debug::log_msg(debug::component_trace_t::tool, debug::log_level_t::debug, "breakpoint: set: %d %d >>%s<<", cookie_id, pc, module->module_name->str());
302+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::tool>())
303+ disvm::debug::log_msg(component_trace_t::tool, log_level_t::debug, "breakpoint: set: %d %d >>%s<<", cookie_id, pc, module->module_name->str());
285304
286305 return cookie_id;
287306 }
@@ -324,8 +343,8 @@ void vm_tool_dispatch_t::clear_breakpoint(cookie_t cookie_id) · 36 unmodified lines
324343 assert(code_section[target_pc].op.opcode == opcode_t::brkpt);
325344 code_section[target_pc].op.opcode = original_opcode;
326345
327− if (debug::is_component_tracing_enabled<debug::component_trace_t::tool>())
328− debug::log_msg(debug::component_trace_t::tool, debug::log_level_t::debug, "breakpoint: unset: %d %d >>%s<<", cookie_id, target_pc, details.module->module_name->str());
346+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::tool>())
347+ disvm::debug::log_msg(component_trace_t::tool, log_level_t::debug, "breakpoint: unset: %d %d >>%s<<", cookie_id, target_pc, details.module->module_name->str());
329348
330349 // Clean-up the PC mapping to opcode
331350 pc_map.erase(iter_pc);
src/vm/utf8.cpp+21−20
@@ -12,7 +12,8 @@ · 11 unmodified lines
1212 #include <utf8.h>
1313 #include <exceptions.h>
1414
15−using namespace disvm::runtime;
15+using disvm::runtime::utf8::decode_state_t;
16+using disvm::runtime::utf8::utf8_length_t;
1617
1718 namespace
1819 {
@@ -40,21 +41,21 @@ namespace · 21 unmodified lines
4041 }
4142
4243 // See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details.
43−utf8::decode_state_t disvm::runtime::utf8::decode_step(utf8::decode_state_t &state, rune_t &codepoint, uint8_t byte)
44+decode_state_t disvm::runtime::utf8::decode_step(decode_state_t &state, rune_t &codepoint, uint8_t byte)
4445 {
4546 auto type = uint32_t{ utf8d[byte] };
4647
47− codepoint = (state != utf8::decode_state_t::accept) ?
48+ codepoint = (state != decode_state_t::accept) ?
4849 (byte & 0x3fu) | (codepoint << 6) :
4950 (0xff >> type) & (byte);
5051
51− state = static_cast<utf8::decode_state_t>(utf8d[256 + static_cast<uint32_t>(state) + type]);
52+ state = static_cast<decode_state_t>(utf8d[256 + static_cast<uint32_t>(state) + type]);
5253 return state;
5354 }
5455
5556 // Adopted from 'countCodePoints(uint8_t* s, size_t* count)'
5657 // See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details.
57−utf8::utf8_length_t disvm::runtime::utf8::count_codepoints(const uint8_t *str, const std::size_t max_len)
58+utf8_length_t disvm::runtime::utf8::count_codepoints(const uint8_t *str, const std::size_t max_len)
5859 {
5960 if (str == nullptr)
6061 {
@@ -64,12 +65,12 @@ utf8::utf8_length_t disvm::runtime::utf8::count_codepoints(const uint8_t *str, c · 3 unmodified lines
6465
6566 auto single_character = rune_t{};
6667 auto points = std::size_t{ 0 };
67− auto state = utf8::decode_state_t::accept;
68+ auto state = decode_state_t::accept;
6869
6970 auto last = str;
7071 for (auto curr = last; curr < (str + max_len); ++curr)
7172 {
72− if (utf8::decode_state_t::accept == utf8::decode_step(state, single_character, *curr))
73+ if (decode_state_t::accept == decode_step(state, single_character, *curr))
7374 {
7475 last = curr;
7576 points++;
@@ -84,7 +85,7 @@ utf8::utf8_length_t disvm::runtime::utf8::count_codepoints(const uint8_t *str, c · 8 unmodified lines
8485 std::size_t disvm::runtime::utf8::decode(const uint8_t *str, rune_t &codepoint)
8586 {
8687 assert(str != nullptr);
87− auto state = utf8::decode_state_t::accept;
88+ auto state = decode_state_t::accept;
8889
8990 codepoint = 0;
9091 auto begin = str;
@@ -93,8 +94,8 @@ std::size_t disvm::runtime::utf8::decode(const uint8_t *str, rune_t &codepoint) · 2 unmodified lines
9394 while (0 != (c = *curr))
9495 {
9596 curr++;
96− state = utf8::decode_step(state, codepoint, c);
97− if (state == utf8::decode_state_t::accept)
97+ state = decode_step(state, codepoint, c);
98+ if (state == decode_state_t::accept)
9899 return static_cast<std::size_t>(curr - begin);
99100 }
100101
@@ -108,34 +109,34 @@ std::size_t disvm::runtime::utf8::decode(const uint8_t *str, rune_t &codepoint) · 7 unmodified lines
108109 uint8_t *disvm::runtime::utf8::encode(const rune_t rune, uint8_t *str)
109110 {
110111 assert(str != nullptr);
111− if (rune <= utf8::constants::max_codepoint_ascii)
112+ if (rune <= constants::max_codepoint_ascii)
112113 {
113114 // Layout: 0xxxxxxx
114115 str[0] = static_cast<uint8_t>(rune);
115116 return (str + 1);
116117 }
117− else if (rune <= utf8::constants::max_codepoint_2_byte)
118+ else if (rune <= constants::max_codepoint_2_byte)
118119 {
119120 // Layout: 110xxxxx 10xxxxxx
120121 str[0] = static_cast<uint8_t>(0xc0 + (rune >> 6));
121− str[1] = static_cast<uint8_t>(0x80 + (rune & utf8::constants::multi_byte_value_mask));
122+ str[1] = static_cast<uint8_t>(0x80 + (rune & constants::multi_byte_value_mask));
122123 return (str + 2);
123124 }
124− else if (rune <= utf8::constants::max_codepoint_3_byte)
125+ else if (rune <= constants::max_codepoint_3_byte)
125126 {
126127 // Layout: 1110xxxx 10xxxxxx 10xxxxxx
127128 str[0] = static_cast<uint8_t>(0xe0 + (rune >> 12));
128− str[1] = static_cast<uint8_t>(0x80 + ((rune >> 6) & utf8::constants::multi_byte_value_mask));
129− str[2] = static_cast<uint8_t>(0x80 + (rune & utf8::constants::multi_byte_value_mask));
129+ str[1] = static_cast<uint8_t>(0x80 + ((rune >> 6) & constants::multi_byte_value_mask));
130+ str[2] = static_cast<uint8_t>(0x80 + (rune & constants::multi_byte_value_mask));
130131 return (str + 3);
131132 }
132− else if (rune <= utf8::constants::max_codepoint_4_byte)
133+ else if (rune <= constants::max_codepoint_4_byte)
133134 {
134135 // Layout: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
135136 str[0] = static_cast<uint8_t>(0xf0 + (rune >> 18));
136− str[1] = static_cast<uint8_t>(0x80 + ((rune >> 12) & utf8::constants::multi_byte_value_mask));
137− str[2] = static_cast<uint8_t>(0x80 + ((rune >> 6) & utf8::constants::multi_byte_value_mask));
138− str[3] = static_cast<uint8_t>(0x80 + (rune & utf8::constants::multi_byte_value_mask));
137+ str[1] = static_cast<uint8_t>(0x80 + ((rune >> 12) & constants::multi_byte_value_mask));
138+ str[2] = static_cast<uint8_t>(0x80 + ((rune >> 6) & constants::multi_byte_value_mask));
139+ str[3] = static_cast<uint8_t>(0x80 + (rune & constants::multi_byte_value_mask));
139140 return (str + 4);
140141 }
141142
src/vm/vm.cpp+51−26
@@ -19,8 +19,33 @@ · 18 unmodified lines
1919 #include "tool_dispatch.h"
2020 #include "module_resolver.h"
2121
22−using namespace disvm;
23−using namespace disvm::runtime;
22+using disvm::vm_t;
23+using disvm::vm_config_t;
24+using disvm::vm_version_t;
25+using disvm::loaded_vm_module_callback_t;
26+
27+using disvm::debug::component_trace_t;
28+using disvm::debug::log_level_t;
29+
30+using disvm::runtime::vm_pc_t;
31+using disvm::runtime::vm_thread_t;
32+using disvm::runtime::vm_memory_allocator_t;
33+using disvm::runtime::vm_string_t;
34+using disvm::runtime::vm_frame_t;
35+using disvm::runtime::vm_module_t;
36+using disvm::runtime::vm_module_ref_t;
37+using disvm::runtime::vm_module_resolver_t;
38+using disvm::runtime::vm_garbage_collector_t;
39+using disvm::runtime::vm_scheduler_t;
40+using disvm::runtime::vm_scheduler_control_t;
41+using disvm::runtime::vm_tool_t;
42+using disvm::runtime::vm_tool_dispatch_t;
43+using disvm::runtime::vm_user_exception;
44+using disvm::runtime::vm_module_exception;
45+using disvm::runtime::vm_system_exception;
46+using disvm::runtime::default_garbage_collector_t;
47+using disvm::runtime::default_scheduler_t;
48+using disvm::runtime::default_resolver_t;
2449
2550 namespace
2651 {
@@ -69,8 +94,8 @@ std::string disvm::runtime::pop_syscall_error_message(disvm::vm_t &vm) · 42 unmodified lines
6994 }
7095
7196 // Consumed in vm_memory.cpp
72−thread_local vm_memory_alloc_t vm_memory_alloc;
73−thread_local vm_memory_free_t vm_memory_free;
97+thread_local disvm::runtime::vm_memory_alloc_t vm_memory_alloc;
98+thread_local disvm::runtime::vm_memory_free_t vm_memory_free;
7499
75100 namespace
76101 {
@@ -140,7 +165,7 @@ vm_t::vm_t() · 63 unmodified lines
140165 internal_register_system_thread(_gc->get_allocator());
141166
142167 // Initialize built-in modules.
143− builtin::initialize_builtin_modules();
168+ disvm::runtime::builtin::initialize_builtin_modules();
144169
145170 _scheduler = std::make_unique<default_scheduler_t>(*this, default_system_thread_count, default_thread_quanta);
146171 _module_resolvers.push_back(std::make_unique<default_resolver_t>(*this));
@@ -157,7 +182,7 @@ vm_t::vm_t(vm_config_t config) · 10 unmodified lines
157182 internal_register_system_thread(_gc->get_allocator());
158183
159184 // Initialize built-in modules.
160− builtin::initialize_builtin_modules();
185+ disvm::runtime::builtin::initialize_builtin_modules();
161186
162187 if (config.create_scheduler == nullptr)
163188 _scheduler = std::make_unique<default_scheduler_t>(*this, config.sys_thread_pool_size, config.thread_quanta);
@@ -189,7 +214,7 @@ vm_version_t vm_t::get_version() const · 25 unmodified lines
189214
190215 namespace
191216 {
192− std::unique_ptr<runtime::vm_thread_t> _create_thread_safe(std::unique_ptr<runtime::vm_module_ref_t> entry_module_ref)
217+ std::unique_ptr<vm_thread_t> _create_thread_safe(std::unique_ptr<vm_module_ref_t> entry_module_ref)
193218 {
194219 auto thread = std::make_unique<vm_thread_t>(*entry_module_ref, disvm::vm_t::root_vm_thread_id);
195220
@@ -201,7 +226,7 @@ namespace · 5 unmodified lines
201226 }
202227 }
203228
204−const runtime::vm_thread_t& vm_t::exec(const char *path)
229+const vm_thread_t& vm_t::exec(const char *path)
205230 {
206231 assert(path != nullptr);
207232 auto entry_module = load_module(path);
@@ -211,7 +236,7 @@ const runtime::vm_thread_t& vm_t::exec(const char *path) · 3 unmodified lines
211236 return schedule_thread(std::move(thread));
212237 }
213238
214−const runtime::vm_thread_t& vm_t::exec(std::unique_ptr<runtime::vm_module_t> entry_module)
239+const vm_thread_t& vm_t::exec(std::unique_ptr<vm_module_t> entry_module)
215240 {
216241 assert(entry_module != nullptr);
217242
@@ -220,11 +245,11 @@ const runtime::vm_thread_t& vm_t::exec(std::unique_ptr<runtime::vm_module_t> ent · 2 unmodified lines
220245 return schedule_thread(std::move(thread));
221246 }
222247
223−const runtime::vm_thread_t& vm_t::fork(
248+const vm_thread_t& vm_t::fork(
224249 const uint32_t parent_tid,
225− runtime::vm_module_ref_t &module_ref,
226− const runtime::vm_frame_t &initial_frame,
227− runtime::vm_pc_t initial_pc)
250+ vm_module_ref_t &module_ref,
251+ const vm_frame_t &initial_frame,
252+ vm_pc_t initial_pc)
228253 {
229254 if (initial_pc < 0 || static_cast<vm_pc_t>(module_ref.code_section.size()) <= initial_pc)
230255 throw vm_user_exception{ "Invalid entry program counter" };
@@ -235,7 +260,7 @@ const runtime::vm_thread_t& vm_t::fork( · 4 unmodified lines
235260
236261 namespace
237262 {
238− std::unique_ptr<vm_module_t> resolve_module_from_path(const char *path, const std::vector<std::unique_ptr<runtime::vm_module_resolver_t>> &resolvers)
263+ std::unique_ptr<vm_module_t> resolve_module_from_path(const char *path, const std::vector<std::unique_ptr<vm_module_resolver_t>> &resolvers)
239264 {
240265 assert(!resolvers.empty());
241266 std::unique_ptr<vm_module_t> resolved_module;
@@ -244,8 +269,8 @@ namespace · 2 unmodified lines
244269 const char *inferno_root_path = "/dis/";
245270 if (std::strncmp(path, inferno_root_path, sizeof(inferno_root_path)) == 0)
246271 {
247− if (debug::is_component_tracing_enabled<debug::component_trace_t::module>())
248− debug::log_msg(debug::component_trace_t::module, debug::log_level_t::debug, "load: vm module: Inferno OS path detected - >>%s<<", path);
272+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::module>())
273+ disvm::debug::log_msg(component_trace_t::module, log_level_t::debug, "load: vm module: Inferno OS path detected - >>%s<<", path);
249274
250275 // Plus 1 for the next character. We know this will either be
251276 // null or valid character since we searched for a string
@@ -285,7 +310,7 @@ namespace · 33 unmodified lines
285310 }
286311 }
287312
288−std::shared_ptr<runtime::vm_module_t> vm_t::load_module(const char *path)
313+std::shared_ptr<vm_module_t> vm_t::load_module(const char *path)
289314 {
290315 if (path == nullptr)
291316 throw vm_user_exception{ "Invalid module path" };
@@ -311,8 +336,8 @@ std::shared_ptr<runtime::vm_module_t> vm_t::load_module(const char *path) · 19 unmodified lines
311336
312337 iter->module = module;
313338
314− if (debug::is_component_tracing_enabled<debug::component_trace_t::module>())
315− debug::log_msg(debug::component_trace_t::module, debug::log_level_t::debug, "reload: vm module: >>%s<<", path);
339+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::module>())
340+ disvm::debug::log_msg(component_trace_t::module, log_level_t::debug, "reload: vm module: >>%s<<", path);
316341 }
317342
318343 return module;
@@ -323,7 +348,7 @@ std::shared_ptr<runtime::vm_module_t> vm_t::load_module(const char *path) · 4 unmodified lines
323348
324349 if (path[0] == BUILTIN_MODULE_PREFIX_CHAR)
325350 {
326− new_module = std::move(builtin::get_builtin_module(path));
351+ new_module = std::move(disvm::runtime::builtin::get_builtin_module(path));
327352 }
328353 else
329354 {
@@ -349,8 +374,8 @@ std::shared_ptr<runtime::vm_module_t> vm_t::load_module(const char *path) · 19 unmodified lines
349374 _tool_dispatch->on_module_vm_load(*new_module_iter);
350375 }
351376
352− if (debug::is_component_tracing_enabled<debug::component_trace_t::module>())
353− debug::log_msg(debug::component_trace_t::module, debug::log_level_t::debug, "load: vm module: >>%s<<", path);
377+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::module>())
378+ disvm::debug::log_msg(component_trace_t::module, log_level_t::debug, "load: vm module: >>%s<<", path);
354379
355380 return new_module;
356381 }
@@ -368,12 +393,12 @@ void vm_t::enum_loaded_modules(loaded_vm_module_callback_t callback) const · 11 unmodified lines
368393 }
369394 }
370395
371−runtime::vm_scheduler_control_t &vm_t::get_scheduler_control() const
396+vm_scheduler_control_t &vm_t::get_scheduler_control() const
372397 {
373398 return _scheduler->get_controller();
374399 }
375400
376−runtime::vm_garbage_collector_t &vm_t::get_garbage_collector() const
401+vm_garbage_collector_t &vm_t::get_garbage_collector() const
377402 {
378403 return *_gc;
379404 }
@@ -385,7 +410,7 @@ void vm_t::spin_sleep_till_idle(std::chrono::milliseconds sleep_interval) const · 5 unmodified lines
385410 while (!_scheduler->is_idle());
386411 }
387412
388−std::size_t vm_t::load_tool(std::shared_ptr<runtime::vm_tool_t> tool)
413+std::size_t vm_t::load_tool(std::shared_ptr<vm_tool_t> tool)
389414 {
390415 std::lock_guard<std::mutex> lock{ _tool_dispatch_lock };
391416
@@ -420,7 +445,7 @@ void vm_t::unload_tool(std::size_t tool_id) · 28 unmodified lines
420445 }
421446 }
422447
423−const runtime::vm_thread_t &vm_t::schedule_thread(std::unique_ptr<runtime::vm_thread_t> thread)
448+const vm_thread_t &vm_t::schedule_thread(std::unique_ptr<vm_thread_t> thread)
424449 {
425450 assert(thread != nullptr);
426451
src/vm/vm_exception_handler.cpp+10−6
@@ -10,10 +10,14 @@ · 9 unmodified lines
1010 #include <exceptions.h>
1111 #include <debug.h>
1212
13−using namespace disvm;
14−using namespace disvm::runtime;
13+using disvm::debug::component_trace_t;
14+using disvm::debug::log_level_t;
1515
16−std::tuple<const handler_t *, vm_frame_t *, vm_pc_t> disvm::runtime::find_exception_handler(
16+using disvm::runtime::vm_pc_t;
17+using disvm::runtime::vm_frame_t;
18+using disvm::runtime::handler_entry_t;
19+
20+std::tuple<const handler_entry_t *, vm_frame_t *, vm_pc_t> disvm::runtime::find_exception_handler(
1721 const vm_stack_t &stack,
1822 const vm_module_ref_t &faulting_module,
1923 const vm_pc_t faulting_pc,
@@ -26,7 +30,7 @@ std::tuple<const handler_t *, vm_frame_t *, vm_pc_t> disvm::runtime::find_except · 6 unmodified lines
2630
2731 while (current_frame != nullptr)
2832 {
29− debug::log_msg(debug::component_trace_t::exception, debug::log_level_t::debug, "begin: handler: %d", unwind_depth);
33+ disvm::debug::log_msg(component_trace_t::exception, log_level_t::debug, "begin: handler: %d", unwind_depth);
3034
3135 auto &handler_section = current_module->module->handler_section;
3236
@@ -42,12 +46,12 @@ std::tuple<const handler_t *, vm_frame_t *, vm_pc_t> disvm::runtime::find_except · 9 unmodified lines
4246 auto exception_name = exception.name.get();
4347 if (exception_id.compare_to(exception_name) == 0)
4448 {
45− debug::log_msg(debug::component_trace_t::exception, debug::log_level_t::debug, "end: handler: match: %d", unwind_depth);
49+ disvm::debug::log_msg(component_trace_t::exception, log_level_t::debug, "end: handler: match: %d", unwind_depth);
4650 return std::make_tuple(&handler, current_frame, exception.pc);
4751 }
4852 else if (exception_name == nullptr && exception.pc != runtime_constants::invalid_program_counter)
4953 {
50− debug::log_msg(debug::component_trace_t::exception, debug::log_level_t::debug, "end: handler: fallback: %d", unwind_depth);
54+ disvm::debug::log_msg(component_trace_t::exception, log_level_t::debug, "end: handler: fallback: %d", unwind_depth);
5155 return std::make_tuple(&handler, current_frame, exception.pc);
5256 }
5357 }
src/vm/vm_memory.cpp+43−22
@@ -17,12 +17,35 @@ · 16 unmodified lines
1717 #include <debug.h>
1818 #include <exceptions.h>
1919
20−using namespace disvm;
21−using namespace disvm::runtime;
20+using disvm::vm_t;
21+
22+using disvm::debug::component_trace_t;
23+using disvm::debug::log_level_t;
24+
25+using disvm::runtime::type_descriptor_t;
26+using disvm::runtime::intrinsic_type_desc;
27+using disvm::runtime::byte_t;
28+using disvm::runtime::short_word_t;
29+using disvm::runtime::word_t;
30+using disvm::runtime::short_real_t;
31+using disvm::runtime::real_t;
32+using disvm::runtime::big_t;
33+using disvm::runtime::pointer_t;
34+using disvm::runtime::vm_thread_t;
35+using disvm::runtime::vm_alloc_t;
36+using disvm::runtime::vm_array_t;
37+using disvm::runtime::vm_list_t;
38+using disvm::runtime::vm_string_t;
39+using disvm::runtime::vm_channel_t;
40+using disvm::runtime::vm_module_t;
41+using disvm::runtime::vm_module_ref_t;
42+using disvm::runtime::vm_stack_t;
43+using disvm::runtime::vm_system_exception;
44+using disvm::runtime::vm_alloc_instance_finalizer_t;
2245
2346 // Defined in vm.cpp
24−extern thread_local vm_memory_alloc_t vm_memory_alloc;
25−extern thread_local vm_memory_free_t vm_memory_free;
47+extern thread_local disvm::runtime::vm_memory_alloc_t vm_memory_alloc;
48+extern thread_local disvm::runtime::vm_memory_free_t vm_memory_free;
2649
2750 void *disvm::runtime::alloc_memory(std::size_t amount_in_bytes)
2851 {
@@ -30,8 +53,8 @@ void *disvm::runtime::alloc_memory(std::size_t amount_in_bytes) · 1 unmodified line
3053 if (memory == nullptr)
3154 throw vm_system_exception{ "Out of memory" };
3255
33− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
34− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "alloc: %#" PRIxPTR " %d", memory, amount_in_bytes);
56+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
57+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "alloc: %#" PRIxPTR " %d", memory, amount_in_bytes);
3558
3659 return memory;
3760 }
@@ -40,8 +63,8 @@ void disvm::runtime::free_memory(void *memory) · 2 unmodified lines
4063 {
4164 vm_memory_free(memory);
4265
43− if (memory != nullptr && debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
44− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "free: %#" PRIxPTR, memory);
66+ if (memory != nullptr && debug::is_component_tracing_enabled<component_trace_t::memory>())
67+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "free: %#" PRIxPTR, memory);
4568 }
4669
4770 void disvm::runtime::init_memory(const type_descriptor_t &type_desc, void *data)
@@ -109,9 +132,8 @@ void disvm::runtime::enum_pointer_fields(const type_descriptor_t &type_desc, voi · 61 unmodified lines
109132 {
110133 assert(data != nullptr && callback != nullptr);
111134
112− auto offset_accum = std::size_t{ 0 };
113135 auto memory = reinterpret_cast<word_t *>(data);
114− for (auto i = word_t{ 0 }; i < type_desc.map_in_bytes; ++i, memory += 8, offset_accum += (8 * sizeof(pointer_t)))
136+ for (auto i = word_t{ 0 }; i < type_desc.map_in_bytes; ++i, memory += 8)
115137 {
116138 const auto words8 = type_desc.pointer_map[i];
117139 assert(sizeof(words8) == 1);
@@ -136,9 +158,8 @@ void disvm::runtime::enum_pointer_fields(const type_descriptor_t &type_desc, voi · 18 unmodified lines
136158 {
137159 assert(data != nullptr && callback != nullptr);
138160
139− auto offset_accum = std::size_t{ 0 };
140161 auto memory = reinterpret_cast<word_t *>(data);
141− for (auto i = word_t{ 0 }; i < type_desc.map_in_bytes; ++i, memory += 8, offset_accum += (8 * sizeof(pointer_t)))
162+ for (auto i = word_t{ 0 }; i < type_desc.map_in_bytes; ++i, memory += 8)
142163 {
143164 const auto words8 = type_desc.pointer_map[i];
144165 assert(sizeof(words8) == 1);
@@ -232,8 +253,8 @@ vm_alloc_t *vm_alloc_t::allocate(std::shared_ptr<const type_descriptor_t> td) · 87 unmodified lines
232253 auto mem = alloc_memory(sizeof(vm_alloc_t) + td->size_in_bytes);
233254 auto alloc = ::new(mem)vm_alloc_t{ td };
234255
235− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
236− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "init: vm alloc: %d", td->size_in_bytes);
256+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
257+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "init: vm alloc: %d", td->size_in_bytes);
237258
238259 return alloc;
239260 }
@@ -248,7 +269,7 @@ vm_alloc_t *vm_alloc_t::copy(const vm_alloc_t &other) · 8 unmodified lines
248269 // Ref count all dynamic allocations
249270 inc_ref_count_in_memory(*alloc_copy->alloc_type, alloc_copy->get_allocation());
250271
251− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "copy: vm alloc: %#" PRIxPTR " %#" PRIxPTR, &other, alloc_copy);
272+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "copy: vm alloc: %#" PRIxPTR " %#" PRIxPTR, &other, alloc_copy);
252273 return alloc_copy;
253274 }
254275
@@ -272,7 +293,7 @@ vm_alloc_t::~vm_alloc_t() · 17 unmodified lines
272293 {
273294 #ifndef NDEBUG
274295 if (_ref_count != 0)
275− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::warning,
296+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::warning,
276297 "vm alloc being destroy with non-zero reference count. "
277298 "This could be okay if this is happening due to frame unwinding from an exception");
278299 #endif
@@ -284,8 +305,8 @@ vm_alloc_t::~vm_alloc_t() · 5 unmodified lines
284305 // Free pointer types
285306 destroy_memory(*alloc_type, get_allocation());
286307
287− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
288− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "destroy: vm alloc");
308+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
309+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "destroy: vm alloc");
289310 }
290311
291312 std::size_t vm_alloc_t::add_ref()
@@ -477,8 +498,8 @@ std::shared_ptr<const type_descriptor_t> type_descriptor_t::create( · 185 unmodified lines
477498 free_memory(const_cast<byte_t *>(td->pointer_map));
478499 debug::assign_debug_pointer(const_cast<byte_t **>(&td->pointer_map));
479500
480− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
481− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "destroy: type descriptor");
501+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
502+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "destroy: type descriptor");
482503
483504 free_memory(td);
484505 }
@@ -513,8 +534,8 @@ type_descriptor_t::type_descriptor_t( · 28 unmodified lines
513534 #endif
514535 {
515536 (void)debug_name;
516− if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
517− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "init: type descriptor");
537+ if (disvm::debug::is_component_tracing_enabled<component_trace_t::memory>())
538+ disvm::debug::log_msg(component_trace_t::memory, log_level_t::debug, "init: type descriptor");
518539 }
519540
520541 bool type_descriptor_t::is_equal(const type_descriptor_t *other) const