/
CDC-1.2b/
CDC-1.2b/src/
parent $libraries
object $data

var $root dbref 'data
var $root child_index 0
var $root fertile 0
var $root manager $data
var $root owned [$data]
var $root owners [$data]
var $root writable []
var $root readable ['parameters, 'methods, 'code]
var $root inited 1

method unparse
    arg data, [full];
    var str, element, association, pos;
    
    switch (type(data)) {
        case 'integer:
            return tostr(data);
        case 'string:
            return toliteral(data);
        case 'symbol:
            return toliteral(data);
        case 'error:
            return toliteral(data);
        case 'buffer:
            return toliteral(data);
        case 'dbref:
            if (full)
                return $object.get_name(data, 'namef, ['xref]);
            else
                return $object.get_name(data, 'dbref);
        case 'list:
            if (!data)
                return "[]";
            str = "[";
            for element in (sublist(data, 1, listlen(data) - 1)) {
                str = str + ($data.unparse(element));
                str = str + ", ";
            }
            str = str + ($data.unparse(data[listlen(data)]));
            return str + "]";
        case 'dictionary:
            if (!data)
                return "#[]";
            str = "#[";
            for association in (data) {
                str = str + ($data.unparse(association));
                str = str + ", ";
            }
            return substr(str, 1, strlen(str) - 2) + "]";
        case 'frob:
            return data.unparse();
    }
.

method verify_type
    arg value, type;
    var elem, type_elem, ok_flag;
    
    // returns true if type(value) is type, or in the case 
    // of lists and dicts it checks the elements
    //
    // If type is a list or dict, the elements it contains are possible types for value
    // for example: .verify_value([['foo], 1],['integer, 'list, ['symbol]]) => 1
    // To indicate that you don't care what the elements of a dict or list are,
    // simply use 'list or 'dictionary.
    if (type(value) == type)
        return 1;
    if ((type(type) in ['dictionary, 'list]) && (type(type) == type(value))) {
        for elem in (value) {
            ok_flag = 0;
            for type_elem in (type) {
                if (.verify_type(elem, type_elem)) {
                    ok_flag = 1;
                    break;
                }
                if (!ok_flag)
                    return 0;
            }
        }
        return 1;
    }
    
    // value is not of type, or values elements are not of @type, or etc
    return 0;
.