| … | … | @@ -109,30 +109,6 @@ AtomSpace::AtomSpace(const HandleSeq& bases) : |
| 109 | 109 | _nameserver(nameserver()), |
| 110 | 110 | addedTypeConnection(0) |
| 111 | 111 | { |
| 112 | | for (const Handle& base : bases) |
| 113 | | { |
| 114 | | if (_nameserver.isA(base->get_type(), ATOM_SPACE)) |
| 115 | | { |
| 116 | | _environ.push_back(AtomSpaceCast(base)); |
| 117 | | continue; |
| 118 | | } |
| 119 | | if (base->is_executable()) |
| 120 | | { |
| 121 | | ValuePtr vp(base->execute()); |
| 122 | | AtomSpacePtr as(AtomSpaceCast(vp)); |
| 123 | | if (nullptr == as) |
| 124 | | throw RuntimeException(TRACE_INFO, |
| 125 | | "AtomSpace - executable base not an AtomSpace! Got %s", |
| 126 | | vp->to_string().c_str()); |
| 127 | | _environ.push_back(as); |
| 128 | | continue; |
| 129 | | } |
| 130 | | |
| 131 | | throw RuntimeException(TRACE_INFO, |
| 132 | | "AtomSpace - bases must be AtomSpaces! Got %s", |
| 133 | | base->to_string().c_str()); |
| 134 | | } |
| 135 | | |
| 136 | 112 | if (0 < bases.size()) _copy_on_write = true; |
| 137 | 113 | init(); |
| 138 | 114 | } |
| … | … | @@ -143,8 +119,36 @@ AtomSpace::~AtomSpace() |
| 143 | 119 | clear_all_atoms(); |
| 144 | 120 | } |
| 145 | 121 | |
| 122 | // Set up a vector points to the parent AtomSpaces. |
| 146 | 123 | void AtomSpace::do_install(void) |
| 147 | 124 | { |
| 125 | if (0 == _environ.size()) |
| 126 | { |
| 127 | for (const Handle& base : _outgoing) |
| 128 | { |
| 129 | if (_nameserver.isA(base->get_type(), ATOM_SPACE)) |
| 130 | { |
| 131 | _environ.push_back(AtomSpaceCast(base)); |
| 132 | continue; |
| 133 | } |
| 134 | if (base->is_executable()) |
| 135 | { |
| 136 | ValuePtr vp(base->execute()); |
| 137 | AtomSpacePtr as(AtomSpaceCast(vp)); |
| 138 | if (nullptr == as) |
| 139 | throw RuntimeException(TRACE_INFO, |
| 140 | "AtomSpace - executable base not an AtomSpace! Got %s", |
| 141 | vp->to_string().c_str()); |
| 142 | _environ.push_back(as); |
| 143 | continue; |
| 144 | } |
| 145 | |
| 146 | throw RuntimeException(TRACE_INFO, |
| 147 | "AtomSpace - bases must be AtomSpaces! Got %s", |
| 148 | base->to_string().c_str()); |
| 149 | } |
| 150 | } |
| 151 | |
| 148 | 152 | // XXX FIXME. I think this is installing into the wrong AtomSpace. |
| 149 | 153 | // Maybe. I'm confused. But no unit test seems to fail as a result |
| 150 | 154 | // of this, so I dunno. Go figure. |