diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2011-09-21 19:07:41 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2011-09-21 19:08:26 -0700 |
| commit | 8c02adc630b9786dbc0ccd0f680d37c840bc49b9 (patch) | |
| tree | e998c8cb68380ee8320adaa824eb83e770a39d9f /src/rt/rust_cc.cpp | |
| parent | ad3b9c41b47090b94237fd7d4429d1431ecb8181 (diff) | |
| download | rust-8c02adc630b9786dbc0ccd0f680d37c840bc49b9.tar.gz rust-8c02adc630b9786dbc0ccd0f680d37c840bc49b9.zip | |
rustc: Port the fn and obj traversal logic over from the GC branch. Doesn't actually do anything yet due to lack of support in trans.
Diffstat (limited to 'src/rt/rust_cc.cpp')
| -rw-r--r-- | src/rt/rust_cc.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/rt/rust_cc.cpp b/src/rt/rust_cc.cpp index 11f8332bcd7..84fb6e8456f 100644 --- a/src/rt/rust_cc.cpp +++ b/src/rt/rust_cc.cpp @@ -164,20 +164,20 @@ irc::walk_variant(shape::tag_info &tinfo, uint32_t variant_id, void irc::compute_ircs(rust_task *task, irc_map &ircs) { - std::map<void *,type_desc *>::iterator begin(task->local_allocs.begin()), - end(task->local_allocs.end()); + std::map<void *,const type_desc *>::iterator + begin(task->local_allocs.begin()), end(task->local_allocs.end()); while (begin != end) { uint8_t *p = reinterpret_cast<uint8_t *>(begin->first); p += sizeof(uintptr_t); // Skip over the reference count. - type_desc *tydesc = begin->second; + const type_desc *tydesc = begin->second; //DPRINT("determining internal ref counts: %p, tydesc=%p\n", p, //tydesc); shape::arena arena; shape::type_param *params = - shape::type_param::from_tydesc(tydesc, arena); + shape::type_param::from_tydesc(&tydesc, arena); irc irc(task, true, tydesc->shape, params, tydesc->shape_tables, p, ircs); irc.walk(); @@ -197,8 +197,8 @@ irc::compute_ircs(rust_task *task, irc_map &ircs) { void find_roots(rust_task *task, irc_map &ircs, std::vector<void *> &roots) { - std::map<void *,type_desc *>::iterator begin(task->local_allocs.begin()), - end(task->local_allocs.end()); + std::map<void *,const type_desc *>::iterator + begin(task->local_allocs.begin()), end(task->local_allocs.end()); while (begin != end) { void *alloc = begin->first; uintptr_t *ref_count_ptr = reinterpret_cast<uintptr_t *>(alloc); @@ -376,13 +376,13 @@ mark::do_mark(rust_task *task, const std::vector<void *> &roots, uint8_t *p = reinterpret_cast<uint8_t *>(alloc); p += sizeof(uintptr_t); // Skip over the reference count. - type_desc *tydesc = task->local_allocs[*begin]; + const type_desc *tydesc = task->local_allocs[*begin]; //DPRINT("marking: %p, tydesc=%p\n", p, tydesc); shape::arena arena; shape::type_param *params = - shape::type_param::from_tydesc(tydesc, arena); + shape::type_param::from_tydesc(&tydesc, arena); #if 0 shape::log log(task, true, tydesc->shape, params, @@ -403,8 +403,8 @@ mark::do_mark(rust_task *task, const std::vector<void *> &roots, void sweep(rust_task *task, const std::set<void *> &marked) { - std::map<void *,type_desc *>::iterator begin(task->local_allocs.begin()), - end(task->local_allocs.end()); + std::map<void *,const type_desc *>::iterator + begin(task->local_allocs.begin()), end(task->local_allocs.end()); while (begin != end) { void *alloc = begin->first; if (marked.find(alloc) == marked.end()) { |
