context.put("phase.function", phase);
    public void doit() throws SmartFrogCompileResolutionException {        Object o;        ComponentDescription origin = null;        if (path.size() > 0)            origin = (ComponentDescription) path.peek();        else            throw new SmartFrogCompileResolutionException("root component may not be a function");        try {            o = component.sfResolve("sfFunctionResult");        } catch (SmartFrogResolutionException e) {            o = doFunction();            try {                component.sfReplaceAttribute("sfFunctionResult", o);            } catch (SmartFrogRuntimeException e1) {                throw new SmartFrogCompileResolutionException("error recording function result in function", e1);            }        }        ComponentDescription parent = (ComponentDescription) component.sfParent();        if (path.size() > 0) origin = (ComponentDescription) path.peek();        if (o instanceof ComponentDescription) ((ComponentDescription) o).setParent(parent);        Context originContext = origin.sfContext();        Object key = originContext.keyFor(component);        originContext.put(key, o);    }