public DekiScriptOutputBuffer.Range Visit(DekiScriptTryCatchFinally expr, DekiScriptExpressionEvaluationState state) { int marker = state.Buffer.Marker; try { expr.Try.VisitWith(this, state); } catch (DekiScriptFatalException) { throw; } catch (DekiScriptControlFlowException) { throw; } catch (Exception e) { state.Buffer.Reset(marker); // translate exception to an error object DekiScriptMap error = DekiScriptLibrary.MakeErrorObject(e, state.Env); // capture error object in a nested environment try { state.Env.Vars.Add(expr.Variable, error); expr.Catch.VisitWith(this, state); } finally { state.Env.Vars.Add(expr.Variable, DekiScriptNil.Value); } } finally { expr.Finally.VisitWith(this, state); } return(state.Buffer.Since(marker)); }
public DekiScriptExpression Visit(DekiScriptTryCatchFinally expr, DekiScriptExpressionEvaluationState state) { // TODO (steveb) return(expr); }