evaluate(prototype, op, code);
evaluate(prototype, info, code);
    synchronized void evaluatePrototype(Prototype prototype, TypeInfo info) {        // System.err.println("EVALUATING PROTO: "+prototype);        Scriptable op = info.objectPrototype;        // set the parent prototype in case it hasn't been done before        // or it has changed...        setParentPrototype(prototype, op);        // loop through the prototype's code elements and evaluate them        // first the zipped ones ...        for (Iterator it = prototype.getZippedCode().values().iterator(); it.hasNext();) {            Object code = it.next();            evaluate(prototype, op, code);        }        // then the unzipped ones (this is to make sure unzipped code overwrites zipped code)        for (Iterator it = prototype.getCode().values().iterator(); it.hasNext();) {            Object code = it.next();            evaluate(prototype, op, code);        }        // loop through function properties defined for this proto and        // remove those which are left over from the previous generation        // and haven't been renewed in this pass.        Set oldFunctions = info.compiledFunctions;        Set newFunctions = new HashSet();        Object[] keys = ((ScriptableObject) op).getAllIds();        for (int i = 0; i < keys.length; i++) {            String key = keys[i].toString();            if (info.predefinedProperties.contains(key)) {                // don't mess with properties we didn't set                continue;            }            Object prop = op.get(key, op);            if (oldFunctions.contains(prop) && prop instanceof NativeFunction) {                // if this is a function compiled from script, it's from the                // old generation and wasn't renewed -- delete it.                // System.err.println("DELETING OLD FUNC: "+key);                try {                    ((ScriptableObject) op).setAttributes(key, op, 0);                    op.delete(key);                } catch (PropertyException px) {                    System.err.println("Error unsetting property "+key+" on "+prototype);                }            } else {                newFunctions.add(prop);            }        }        info.compiledFunctions = newFunctions;        info.lastUpdate = prototype.getLastUpdate();    }