History

Merged in dev/macBuild (pull request #1)

Fix some issues when building on mac

Aaron R Robinson committed 9 years ago

Commit bf34adb2 parents db76c0c 0217bda13 files · +53 −50Browse files

Unified · Split

13 files
  1. src/asm/type_signature.cpp +6 −6
  2. src/compiler_settings.gypi +2 −1
  3. src/include/disvm.h +3 −3
  4. src/include/vm_asm.h +4 −4
  5. src/vm/execution_table.cpp +2 −2
  6. src/vm/stack.cpp +1 −1
  7. src/vm/string.cpp +13 −13
  8. src/vm/sys/Sysmod.cpp +3 −3
  9. src/vm/sys/sys_utils.h +1 −1
  10. src/vm/thread.cpp +1 −1
  11. src/vm/tool_dispatch.cpp +1 −0
  12. src/vm/vm.cpp +1 −1
  13. src/vm/vm_memory.cpp +15 −14
src/asm/type_signature.cpp+6−6
@@ -138,11 +138,11 @@ sig_stream_t &disvm::assembly::sigkind::operator<<(sig_stream_t &os, const Tm &m · 137 unmodified lines
138 return os << m._s;138 return os << m._s;
139}139}
140 140
141const char Ttuple::begin = '(';141template<> const char Ttuple::begin = '(';
142const char Ttuple::end = ')';142template<> const char Ttuple::end = ')';
143 143
144const char Tmodule::begin = '{';144template<> const char Tmodule::begin = '{';
145const char Tmodule::end = '}';145template<> const char Tmodule::end = '}';
146 146
147sig_stream_t &disvm::assembly::sigkind::operator<<(sig_stream_t &os, const Ttuple &t)147sig_stream_t &disvm::assembly::sigkind::operator<<(sig_stream_t &os, const Ttuple &t)
148{148{
@@ -180,8 +180,8 @@ sig_stream_t &disvm::assembly::sigkind::operator<<(sig_stream_t &os, const Tadt_ · 31 unmodified lines
180 return os << t._s;180 return os << t._s;
181}181}
182 182
183const char Tnested_aggregate_type<type_id_t::adt>::begin = '(';183template<> const char Tnested_aggregate_type<type_id_t::adt>::begin = '(';
184const char Tnested_aggregate_type<type_id_t::adt>::end = ')';184template<> const char Tnested_aggregate_type<type_id_t::adt>::end = ')';
185 185
186sig_stream_t &disvm::assembly::sigkind::operator<<(sig_stream_t &os, const Tnested_aggregate_type<type_id_t::adt> &a)186sig_stream_t &disvm::assembly::sigkind::operator<<(sig_stream_t &os, const Tnested_aggregate_type<type_id_t::adt> &a)
187{187{
src/compiler_settings.gypi+2−1
@@ -5,7 +5,8 @@ · 4 unmodified lines
5 'GCC_ENABLE_CPP_EXCEPTIONS': 'YES',5 'GCC_ENABLE_CPP_EXCEPTIONS': 'YES',
6 'OTHER_CPLUSPLUSFLAGS' : ['-std=c++1y','-stdlib=libc++'],6 'OTHER_CPLUSPLUSFLAGS' : ['-std=c++1y','-stdlib=libc++'],
7 'OTHER_LDFLAGS': ['-stdlib=libc++'],7 'OTHER_LDFLAGS': ['-stdlib=libc++'],
8 'MACOSX_DEPLOYMENT_TARGET': '10.10'8 'MACOSX_DEPLOYMENT_TARGET': '10.10',
9 'ARCHS': '$(ARCHS_STANDARD_32_BIT)'
9 }10 }
10 }],11 }],
11 ['OS=="win"', {12 ['OS=="win"', {
src/include/disvm.h+3−3
@@ -55,12 +55,12 @@ namespace disvm · 54 unmodified lines
55 class vm_t final55 class vm_t final
56 {56 {
57 public: // static57 public: // static
58 static const auto root_vm_thread_id = uint32_t{ 0 };58 static const uint32_t root_vm_thread_id = 0;
59 59
60 static const auto default_system_thread_count = uint32_t{ 1 };60 static const uint32_t default_system_thread_count = 1;
61 61
62 // The Inferno implementation defined the thread quanta as 2048 (include/interp.h)62 // The Inferno implementation defined the thread quanta as 2048 (include/interp.h)
63 static const auto default_thread_quanta = uint32_t{ 2048 };63 static const uint32_t default_thread_quanta = 2048;
64 64
65 public:65 public:
66 explicit vm_t(66 explicit vm_t(
src/include/vm_asm.h+4−4
@@ -137,7 +137,7 @@ namespace disvm · 136 unmodified lines
137 static Tbasic_aggregate_type create(const U &type)137 static Tbasic_aggregate_type create(const U &type)
138 {138 {
139 sig_stream_t ss;139 sig_stream_t ss;
140 ss << Tbasic_type::id << type;140 ss << Tbasic_type<ID>::id << type;
141 141
142 return Tbasic_aggregate_type{ ss };142 return Tbasic_aggregate_type{ ss };
143 }143 }
@@ -209,7 +209,7 @@ namespace disvm · 65 unmodified lines
209 template<typename T1, typename T2, typename ...S>209 template<typename T1, typename T2, typename ...S>
210 void nested_type(sig_stream_t &ss, const T1 &t1, const T2 &t2, const S&...s)210 void nested_type(sig_stream_t &ss, const T1 &t1, const T2 &t2, const S&...s)
211 {211 {
212 ss << t1 << sig_stream_t::type_delim;212 ss << t1 << sig_stream_t::delim;
213 nested_type(ss, t2, s...);213 nested_type(ss, t2, s...);
214 }214 }
215 215
@@ -225,7 +225,7 @@ namespace disvm · 9 unmodified lines
225 static Tnested_aggregate_type create(const NT&... nestedTypes)225 static Tnested_aggregate_type create(const NT&... nestedTypes)
226 {226 {
227 sig_stream_t ss;227 sig_stream_t ss;
228 ss << Tbasic_type::id << Tnested_aggregate_type::begin;228 ss << Tbasic_type<ID>::id << Tnested_aggregate_type::begin;
229 229
230 nested_type(ss, nestedTypes...);230 nested_type(ss, nestedTypes...);
231 231
@@ -314,7 +314,7 @@ namespace disvm · 82 unmodified lines
314 }314 }
315 315
316 private:316 private:
317 Tadt(sig_stream_t &s) : Tnested_aggregate_type{ std::move(s) } { }317 Tadt(sig_stream_t &s) : Tnested_aggregate_type{ s } { }
318 };318 };
319 319
320 sig_stream_t &operator<<(sig_stream_t &, const disvm::assembly::sigkind::Tnested_aggregate_type<type_id_t::adt> &);320 sig_stream_t &operator<<(sig_stream_t &, const disvm::assembly::sigkind::Tnested_aggregate_type<type_id_t::adt> &);
src/vm/execution_table.cpp+2−2
@@ -708,7 +708,7 @@ namespace · 707 unmodified lines
708 const auto index = vt_ref<word_t>(r.mid);708 const auto index = vt_ref<word_t>(r.mid);
709 const auto rune = str->get_rune(index);709 const auto rune = str->get_rune(index);
710 710
711 vt_ref<rune_t>(r.dest) = rune;711 vt_ref<runtime::rune_t>(r.dest) = rune;
712 }712 }
713 713
714 // [SPEC] 'Insert Character' op code714 // [SPEC] 'Insert Character' op code
@@ -721,7 +721,7 @@ namespace · 6 unmodified lines
721 // dst[src2] = src1721 // dst[src2] = src1
722 EXEC_DECL(insc)722 EXEC_DECL(insc)
723 {723 {
724 auto rune = vt_ref<rune_t>(r.src);724 auto rune = vt_ref<runtime::rune_t>(r.src);
725 auto index = vt_ref<word_t>(r.mid);725 auto index = vt_ref<word_t>(r.mid);
726 auto str = at_val<vm_string_t>(r.dest);726 auto str = at_val<vm_string_t>(r.dest);
727 if (str == nullptr)727 if (str == nullptr)
src/vm/stack.cpp+1−1
@@ -180,7 +180,7 @@ pointer_t vm_frame_t::fixed_point_register_2() const · 179 unmodified lines
180vm_stack_t::vm_stack_t(std::size_t stack_extent)180vm_stack_t::vm_stack_t(std::size_t stack_extent)
181 : _mem{ std::make_unique<vm_stack_layout>(stack_extent) }181 : _mem{ std::make_unique<vm_stack_layout>(stack_extent) }
182{182{
183 assert(stack_extent != 0);183 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\n");184 debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "init: vm stack\n");
185}185}
186 186
src/vm/string.cpp+13−13
@@ -43,12 +43,12 @@ namespace · 42 unmodified lines
43 43
44 // Compare function for character types.44 // Compare function for character types.
45 template <typename CharacterType1, typename CharacterType2>45 template <typename CharacterType1, typename CharacterType2>
46 int _compare(word_t len, CharacterType1 *s1, CharacterType2 *s2)46 int _compare(word_t len, const CharacterType1 *s1, const CharacterType2 *s2)
47 {47 {
48 for (auto i = word_t{ 0 }; i < len; ++i)48 for (auto i = word_t{ 0 }; i < len; ++i)
49 {49 {
50 const auto sc1 = static_cast<rune_t>(s1[i]);50 const auto sc1 = static_cast<runtime::rune_t>(s1[i]);
51 const auto sc2 = static_cast<rune_t>(s2[i]);51 const auto sc2 = static_cast<runtime::rune_t>(s2[i]);
52 52
53 if (sc1 != sc2)53 if (sc1 != sc2)
54 return (sc1 < sc2) ? (-1) : 1;54 return (sc1 < sc2) ? (-1) : 1;
@@ -62,7 +62,7 @@ int vm_string_t::compare(const vm_string_t *s1, const vm_string_t *s2) · 7 unmodified lines
62{62{
63 auto len_1 = word_t{ 0 };63 auto len_1 = word_t{ 0 };
64 auto scen_1 = ascii_idx;64 auto scen_1 = ascii_idx;
65 void *str_mem_1 = "";65 const void *str_mem_1 = "";
66 if (s1 != nullptr)66 if (s1 != nullptr)
67 {67 {
68 len_1 = s1->_length;68 len_1 = s1->_length;
@@ -72,7 +72,7 @@ int vm_string_t::compare(const vm_string_t *s1, const vm_string_t *s2) · 3 unmodified lines
72 72
73 auto len_2 = word_t{ 0 };73 auto len_2 = word_t{ 0 };
74 auto scen_2 = ascii_idx;74 auto scen_2 = ascii_idx;
75 void *str_mem_2 = "";75 const void *str_mem_2 = "";
76 if (s2 != nullptr)76 if (s2 != nullptr)
77 {77 {
78 len_2 = s2->_length;78 len_2 = s2->_length;
@@ -97,10 +97,10 @@ int vm_string_t::compare(const vm_string_t *s1, const vm_string_t *s2) · 18 unmodified lines
97 result = std::memcmp(str_mem_1, str_mem_2, min_length);97 result = std::memcmp(str_mem_1, str_mem_2, min_length);
98 break;98 break;
99 case compare_case_t::ascii_rune:99 case compare_case_t::ascii_rune:
100 result = _compare(min_length, reinterpret_cast<char *>(str_mem_1), reinterpret_cast<rune_t *>(str_mem_2));100 result = _compare(min_length, reinterpret_cast<const char *>(str_mem_1), reinterpret_cast<const runtime::rune_t *>(str_mem_2));
101 break;101 break;
102 case compare_case_t::rune_ascii:102 case compare_case_t::rune_ascii:
103 result = _compare(min_length, reinterpret_cast<rune_t *>(str_mem_1), reinterpret_cast<char *>(str_mem_2));103 result = _compare(min_length, reinterpret_cast<const runtime::rune_t *>(str_mem_1), reinterpret_cast<const char *>(str_mem_2));
104 break;104 break;
105 }105 }
106 106
@@ -128,10 +128,10 @@ namespace · 21 unmodified lines
128 }128 }
129 129
130 template<>130 template<>
131 void copy_characters_to(rune_t *dest, word_t dest_start, const rune_t *source, word_t source_length)131 void copy_characters_to(runtime::rune_t *dest, word_t dest_start, const runtime::rune_t *source, word_t source_length)
132 {132 {
133 assert(dest != nullptr && source != nullptr);133 assert(dest != nullptr && source != nullptr);
134 std::memcpy((dest + dest_start), source, (source_length * sizeof(rune_t)));134 std::memcpy((dest + dest_start), source, (source_length * sizeof(runtime::rune_t)));
135 }135 }
136 136
137 void combine(137 void combine(
@@ -146,14 +146,14 @@ namespace · 8 unmodified lines
146 {146 {
147 if (dest_is_rune)147 if (dest_is_rune)
148 {148 {
149 auto dest_rune = reinterpret_cast<rune_t *>(dest);149 auto dest_rune = reinterpret_cast<runtime::rune_t *>(dest);
150 if (source1_is_rune)150 if (source1_is_rune)
151 copy_characters_to(dest_rune, 0, reinterpret_cast<const rune_t *>(source1), source1_length);151 copy_characters_to(dest_rune, 0, reinterpret_cast<const runtime::rune_t *>(source1), source1_length);
152 else152 else
153 copy_characters_to(dest_rune, 0, source1, source1_length);153 copy_characters_to(dest_rune, 0, source1, source1_length);
154 154
155 if (source2_is_rune)155 if (source2_is_rune)
156 copy_characters_to(dest_rune, source1_length, reinterpret_cast<const rune_t *>(source2), source2_length);156 copy_characters_to(dest_rune, source1_length, reinterpret_cast<const runtime::rune_t *>(source2), source2_length);
157 else157 else
158 copy_characters_to(dest_rune, source1_length, source2, source2_length);158 copy_characters_to(dest_rune, source1_length, source2, source2_length);
159 }159 }
@@ -381,7 +381,7 @@ word_t vm_string_t::get_length() const · 221 unmodified lines
381 return _length;381 return _length;
382}382}
383 383
384rune_t vm_string_t::get_rune(word_t index) const384runtime::rune_t vm_string_t::get_rune(word_t index) const
385{385{
386 if (index < 0 && _length <= index)386 if (index < 0 && _length <= index)
387 throw index_out_of_range_memory{ 0, _length - 1, index };387 throw index_out_of_range_memory{ 0, _length - 1, index };
src/vm/sys/Sysmod.cpp+3−3
@@ -293,7 +293,7 @@ Sys_byte2char(vm_registers_t &r, vm_t &vm) · 292 unmodified lines
293 fp.ret->t2 = 0;293 fp.ret->t2 = 0;
294 294
295 auto state = utf8::decode_state_t::accept;295 auto state = utf8::decode_state_t::accept;
296 auto result = rune_t{};296 auto result = runtime::rune_t{};
297 const auto buffer_len = buffer->get_length();297 const auto buffer_len = buffer->get_length();
298 for (auto i = n; i < buffer_len; ++i)298 for (auto i = n; i < buffer_len; ++i)
299 {299 {
@@ -326,7 +326,7 @@ Sys_char2byte(vm_registers_t &r, vm_t &vm) · 26 unmodified lines
326 if (buffer == nullptr || n >= buffer->get_length())326 if (buffer == nullptr || n >= buffer->get_length())
327 throw out_of_range_memory{};327 throw out_of_range_memory{};
328 328
329 const auto rune = static_cast<rune_t>(fp.c);329 const auto rune = static_cast<runtime::rune_t>(fp.c);
330 330
331 static_assert(Sys_UTFmax == sizeof(rune), "UTF max should be same size as rune");331 static_assert(Sys_UTFmax == sizeof(rune), "UTF max should be same size as rune");
332 uint8_t buffer_local[Sys_UTFmax];332 uint8_t buffer_local[Sys_UTFmax];
@@ -689,7 +689,7 @@ Sys_stream(vm_registers_t &r, vm_t &vm) · 356 unmodified lines
689 689
690namespace690namespace
691{691{
692 bool is_delim(const rune_t c, const vm_string_t &delim)692 bool is_delim(const runtime::rune_t c, const vm_string_t &delim)
693 {693 {
694 const auto max = delim.get_length();694 const auto max = delim.get_length();
695 assert(max > 0);695 assert(max > 0);
src/vm/sys/sys_utils.h+1−1
@@ -8,7 +8,7 @@ · 7 unmodified lines
8#define _DISVM_SRC_VM_SYS_SYS_UTILS_H_8#define _DISVM_SRC_VM_SYS_SYS_UTILS_H_
9 9
10#include <vector>10#include <vector>
11#include <iosfwd>11#include <ios>
12#include <memory>12#include <memory>
13#include <disvm.h>13#include <disvm.h>
14#include <utils.h>14#include <utils.h>
src/vm/thread.cpp+1−1
@@ -59,7 +59,7 @@ vm_registers_t::vm_registers_t( · 58 unmodified lines
59 , mp_base{ entry.mp_base }59 , mp_base{ entry.mp_base }
60 , thread{ thread }60 , thread{ thread }
61 , pc{ entry.module->header.entry_pc }61 , pc{ entry.module->header.entry_pc }
62 , stack{ entry.module->header.stack_extent }62 , stack{ static_cast<std::size_t>(entry.module->header.stack_extent) }
63 , tool_dispatch{ nullptr }63 , tool_dispatch{ nullptr }
64 , src{ nullptr }64 , src{ nullptr }
65 , mid{ nullptr }65 , mid{ nullptr }
src/vm/tool_dispatch.cpp+1−0
@@ -5,6 +5,7 @@ · 4 unmodified lines
5//5//
6 6
7#include <cassert>7#include <cassert>
8#include <thread>
8#include <vector>9#include <vector>
9#include <debug.h>10#include <debug.h>
10#include <disvm.h>11#include <disvm.h>
src/vm/vm.cpp+1−1
@@ -70,7 +70,7 @@ namespace · 69 unmodified lines
70{70{
71 std::unique_ptr<runtime::vm_thread_t> _create_thread_safe(std::unique_ptr<runtime::vm_module_ref_t> &entry_module_ref)71 std::unique_ptr<runtime::vm_thread_t> _create_thread_safe(std::unique_ptr<runtime::vm_module_ref_t> &entry_module_ref)
72 {72 {
73 auto thread = std::make_unique<vm_thread_t>(*entry_module_ref, vm_t::root_vm_thread_id);73 auto thread = std::make_unique<vm_thread_t>(*entry_module_ref, disvm::vm_t::root_vm_thread_id);
74 74
75 // Now that the thread has been created and has inherited ownership of the pointer, relinquish the smart pointer's ownership.75 // Now that the thread has been created and has inherited ownership of the pointer, relinquish the smart pointer's ownership.
76 entry_module_ref->release(); // decrement the vm alloc ref count76 entry_module_ref->release(); // decrement the vm alloc ref count
src/vm/vm_memory.cpp+15−14
@@ -7,6 +7,7 @@ · 6 unmodified lines
7#include <memory>7#include <memory>
8#include <atomic>8#include <atomic>
9#include <bitset>9#include <bitset>
10#include <cstdlib>
10#include <mutex>11#include <mutex>
11#include <limits>12#include <limits>
12#include <vector>13#include <vector>
@@ -355,98 +356,98 @@ namespace · 342 unmodified lines
355}356}
356 357
357template<>358template<>
358static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<byte_t>()359std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<byte_t>()
359{360{
360 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::byte, hidden_type_desc::deleter };361 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::byte, hidden_type_desc::deleter };
361 return t;362 return t;
362}363}
363 364
364template<>365template<>
365static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<short_word_t>()366std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<short_word_t>()
366{367{
367 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::short_word, hidden_type_desc::deleter };368 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::short_word, hidden_type_desc::deleter };
368 return t;369 return t;
369}370}
370 371
371template<>372template<>
372static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<word_t>()373std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<word_t>()
373{374{
374 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::word, hidden_type_desc::deleter };375 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::word, hidden_type_desc::deleter };
375 return t;376 return t;
376}377}
377 378
378template<>379template<>
379static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<short_real_t>()380std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<short_real_t>()
380{381{
381 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::short_real, hidden_type_desc::deleter };382 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::short_real, hidden_type_desc::deleter };
382 return t;383 return t;
383}384}
384 385
385template<>386template<>
386static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<real_t>()387std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<real_t>()
387{388{
388 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::real, hidden_type_desc::deleter };389 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::real, hidden_type_desc::deleter };
389 return t;390 return t;
390}391}
391 392
392template<>393template<>
393static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<big_t>()394std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<big_t>()
394{395{
395 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::big, hidden_type_desc::deleter };396 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::big, hidden_type_desc::deleter };
396 return t;397 return t;
397}398}
398 399
399template<>400template<>
400static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<pointer_t>()401std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<pointer_t>()
401{402{
402 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::pointer, hidden_type_desc::deleter };403 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::pointer, hidden_type_desc::deleter };
403 return t;404 return t;
404}405}
405 406
406template<>407template<>
407static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_array_t>()408std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_array_t>()
408{409{
409 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_array, hidden_type_desc::deleter };410 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_array, hidden_type_desc::deleter };
410 return t;411 return t;
411}412}
412 413
413template<>414template<>
414static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_list_t>()415std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_list_t>()
415{416{
416 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_list, hidden_type_desc::deleter };417 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_list, hidden_type_desc::deleter };
417 return t;418 return t;
418}419}
419 420
420template<>421template<>
421static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_channel_t>()422std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_channel_t>()
422{423{
423 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_channel, hidden_type_desc::deleter };424 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_channel, hidden_type_desc::deleter };
424 return t;425 return t;
425}426}
426 427
427template<>428template<>
428static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_string_t>()429std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_string_t>()
429{430{
430 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_string, hidden_type_desc::deleter };431 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_string, hidden_type_desc::deleter };
431 return t;432 return t;
432}433}
433 434
434template<>435template<>
435static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_module_ref_t>()436std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_module_ref_t>()
436{437{
437 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_module_ref, hidden_type_desc::deleter };438 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_module_ref, hidden_type_desc::deleter };
438 return t;439 return t;
439}440}
440 441
441template<>442template<>
442static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_stack_t>()443std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_stack_t>()
443{444{
444 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_stack, hidden_type_desc::deleter };445 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_stack, hidden_type_desc::deleter };
445 return t;446 return t;
446}447}
447 448
448template<>449template<>
449static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_thread_t>()450 std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_thread_t>()
450{451{
451 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_thread, hidden_type_desc::deleter };452 static std::shared_ptr<const type_descriptor_t> t = { &hidden_type_desc::vm_thread, hidden_type_desc::deleter };
452 return t;453 return t;