/
CDC-1.2b/
CDC-1.2b/src/
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());
.