diff options
author | John Hodge <tpg@mutabah.net> | 2018-05-13 09:27:13 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2018-05-13 09:27:13 +0800 |
commit | ac6f3ffba823e539c4c9afd93b7edf7122f463cc (patch) | |
tree | 418ebc63c6d5a28560bb396f1992505e80182515 /tools/standalone_miri/hir_sim.cpp | |
parent | 9f8469d5145ea51f2d4b2b9d1eb32d1029cfbeb5 (diff) | |
download | mrust-ac6f3ffba823e539c4c9afd93b7edf7122f463cc.tar.gz |
Standalone MIRI - Better vtable handling, fix to offset with null pointers
Diffstat (limited to 'tools/standalone_miri/hir_sim.cpp')
-rw-r--r-- | tools/standalone_miri/hir_sim.cpp | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/tools/standalone_miri/hir_sim.cpp b/tools/standalone_miri/hir_sim.cpp index 604f65a4..f3b4d400 100644 --- a/tools/standalone_miri/hir_sim.cpp +++ b/tools/standalone_miri/hir_sim.cpp @@ -166,32 +166,34 @@ const HIR::TypeRef* HIR::TypeRef::get_usized_type(size_t& running_inner_size) co return nullptr; } } -const HIR::TypeRef* HIR::TypeRef::get_meta_type() const +HIR::TypeRef HIR::TypeRef::get_meta_type() const { - static ::HIR::TypeRef static_usize = ::HIR::TypeRef(RawType::USize); if( this->wrappers.empty() ) { switch(this->inner_type) { case RawType::Composite: if( this->composite_type->dst_meta == RawType::Unreachable ) - return nullptr; - return &this->composite_type->dst_meta; - case RawType::TraitObject: - LOG_TODO("get_meta_type on TraitObject - " << *this); + return TypeRef(RawType::Unreachable); + return this->composite_type->dst_meta; + case RawType::TraitObject: { + auto rv = ::HIR::TypeRef( this->composite_type ); + rv.wrappers.push_back(TypeWrapper { TypeWrapper::Ty::Pointer, static_cast<size_t>(BorrowType::Shared) }); + return rv; + } case RawType::Str: - return &static_usize; + return TypeRef(RawType::USize); default: - return nullptr; + return TypeRef(RawType::Unreachable); } } else if( this->wrappers[0].type == TypeWrapper::Ty::Slice ) { - return &static_usize; + return TypeRef(RawType::USize); } else { - return nullptr; + return TypeRef(RawType::Unreachable); } } @@ -305,7 +307,11 @@ namespace HIR { os << "function_?"; break; case RawType::TraitObject: - os << "traitobject_?"; + os << "dyn "; + if( x.composite_type ) + os << x.composite_type->my_path; + else + os << "?"; break; case RawType::Bool: os << "bool"; break; case RawType::Char: os << "char"; break; @@ -385,4 +391,4 @@ namespace HIR { } return os; } -}
\ No newline at end of file +} |