History

Fix performance issue regarding all built-in types type descriptors. Check in md5sum program written entirely in limbo.

arr committed 10 years ago

Commit 754ca821 parent 096b0c72 files · +267 −14Browse files

Showing the changes to src/vm/vm_memory.cpp (1 of 2 files). Show all

Unified · Split

src/vm/vm_memory.cpp+70−14
@@ -355,46 +355,102 @@ namespace · 354 unmodified lines
355355 }
356356
357357 template<>
358−static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<byte_t>() { return{ &hidden_type_desc::byte, hidden_type_desc::deleter }; }
358+static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<byte_t>()
359+{
360+ static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::byte, hidden_type_desc::deleter };
361+ return t;
362+}
359363
360364 template<>
361−static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<short_word_t>() { return{ &hidden_type_desc::short_word, hidden_type_desc::deleter }; }
365+static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<short_word_t>()
366+{
367+ static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::short_word, hidden_type_desc::deleter };
368+ return t;
369+}
362370
363371 template<>
364−static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<word_t>() { return{ &hidden_type_desc::word, hidden_type_desc::deleter }; }
372+static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<word_t>()
373+{
374+ static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::word, hidden_type_desc::deleter };
375+ return t;
376+}
365377
366378 template<>
367−static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<short_real_t>() { return{ &hidden_type_desc::short_real, hidden_type_desc::deleter }; }
379+static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<short_real_t>()
380+{
381+ static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::short_real, hidden_type_desc::deleter };
382+ return t;
383+}
368384
369385 template<>
370−static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<real_t>() { return{ &hidden_type_desc::real, hidden_type_desc::deleter }; }
386+static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<real_t>()
387+{
388+ static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::real, hidden_type_desc::deleter };
389+ return t;
390+}
371391
372392 template<>
373−static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<big_t>() { return{ &hidden_type_desc::big, hidden_type_desc::deleter }; }
393+static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<big_t>()
394+{
395+ static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::big, hidden_type_desc::deleter };
396+ return t;
397+}
374398
375399 template<>
376−static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<pointer_t>() { return{ &hidden_type_desc::pointer, hidden_type_desc::deleter }; }
400+static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<pointer_t>()
401+{
402+ static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::pointer, hidden_type_desc::deleter };
403+ return t;
404+}
377405
378406 template<>
379−static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_array_t>() { return{ &hidden_type_desc::vm_array, hidden_type_desc::deleter }; }
407+static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_array_t>()
408+{
409+ static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_array, hidden_type_desc::deleter };
410+ return t;
411+}
380412
381413 template<>
382−static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_list_t>() { return{ &hidden_type_desc::vm_list, hidden_type_desc::deleter }; }
414+static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_list_t>()
415+{
416+ static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_list, hidden_type_desc::deleter };
417+ return t;
418+}
383419
384420 template<>
385−static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_channel_t>() { return{ &hidden_type_desc::vm_channel, hidden_type_desc::deleter }; }
421+static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_channel_t>()
422+{
423+ static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_channel, hidden_type_desc::deleter };
424+ return t;
425+}
386426
387427 template<>
388−static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_string_t>() { return{ &hidden_type_desc::vm_string, hidden_type_desc::deleter }; }
428+static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_string_t>()
429+{
430+ static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_string, hidden_type_desc::deleter };
431+ return t;
432+}
389433
390434 template<>
391−static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_module_ref_t>() { return{ &hidden_type_desc::vm_module_ref, hidden_type_desc::deleter }; }
435+static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_module_ref_t>()
436+{
437+ static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_module_ref, hidden_type_desc::deleter };
438+ return t;
439+}
392440
393441 template<>
394−static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_stack_t>() { return{ &hidden_type_desc::vm_stack, hidden_type_desc::deleter }; }
442+static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_stack_t>()
443+{
444+ static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_stack, hidden_type_desc::deleter };
445+ return t;
446+}
395447
396448 template<>
397−static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_thread_t>() { return{ &hidden_type_desc::vm_thread, hidden_type_desc::deleter }; }
449+static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_thread_t>()
450+{
451+ static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_thread, hidden_type_desc::deleter };
452+ return t;
453+}
398454
399455 vm_alloc_instance_finalizer_t type_descriptor_t::no_finalizer = nullptr;
400456