parent $foundation object $environment var $root child_index 0 var $root fertile 0 var $root manager $environment var $root owned [$environment] var $root owners [$core] var $root writable [] var $root readable ['parameters, 'methods, 'code] var $root inited 1 var $root dbref 'environment method environment return []; . method match_environment arg str; var obj, env, found, match; if (!str) throw(~objnf, "No \"\" in environment.", str); // Handle special cases. if (str == "me") { return this(); } else if (((str[1]) == "$") || ((str[1]) == "#")) { // obj = (| get_objnum(tosym(substr(str, 2))) |); // if (!valid(obj)) // throw(~objnf, "No such object " + str, str); return $object.to_dbref(str); } else { env = .environment(); found = []; if (str in ["it", "him", "her"]) { match = (| sender().match_context(str) |); if ((!match) || ((match.location()) != (sender().location()))) { for obj in (env) { if ((| obj.gender_context() |) == str) found = [@found, [obj, 1]]; } } else { found = [[match, 1]]; } } else { for obj in (env) { if ((obj.name('literal)) == str) return obj; match = obj.match_name(str); if (match) found = found + [[obj, match]]; } if (!found) { for obj in (env) { match = obj.match_name_aliases(str); if (match) found = found + [[obj, match]]; } } } if (!found) throw(~objnf, ("No \"" + str) + "\" in environment.", str); if (listlen(found) == 1) { return (found[1])[1]; } else { match = $list.min(@$list.slice(found, 2)); if (($list.count(match, $list.slice(found, 2))) == 1) return (found[match in ($list.slice(found, 2))])[1]; else throw(~ambig, ("\"" + str) + "\" can match more than one object", [$list.slice(found, 1), str]); } } . method local_to_environment arg obj; return obj in (.environment()); .