def eval(   toEvaluate,
            locals = None,
            parsePath = None,
            keepAsForaValue = False,
            nameScope = "<eval>"
            ):
    binding = {}
    if locals:
        for key in locals:
            value = locals[key]
            if isinstance(value, ForaNative.ImplValContainer):
                binding[key] = value
            if isinstance(value, ForaValue.FORAValue):
                binding[key] = value.implVal_
            else:
                binding[key] = ForaValue.FORAValue(value).implVal_

    try:
        changes = LOCAL_EVAL.evaluateExpression(toEvaluate, binding, parsePath, nameScope)
        mergedChanges = {}
        result = None
        for c in changes:
            for name, value in c.iteritems():
                mergedChanges[name] = value

            result = mergedChanges['result']

            if isinstance(result, ParseException.ParseException):
                raise result

            if isinstance(result, ForaValue.FORAException):
                result.foraVal = ForaValue.FORAValue(result.foraVal)
                if not keepAsForaValue:
                    result.foraVal = result.foraVal.toPythonObject()
                raise result

        result = ForaValue.FORAValue(result)
        if not keepAsForaValue:
            result = result.toPythonObject()
        return result
    finally:
        if locals is not None:
            for key in binding:
                locals[key] = ForaValue.FORAValue(binding[key])
                if not keepAsForaValue:
                    locals[key] = locals[key].toPythonObject()
Rotate the kill-ring, and yank the new top. You can only do this
dataset/ETHPy150Open ufora/ufora/ufora/FORA/python/FORA.py/eval--crossover with--dataset/ETHPy150Open deanhiller/databus/webapp/play1.3.x/python/Lib/site-packages/pyreadline/modes/emacs.py/EmacsMode.yank_pop