//Execute block with stream and error catching data public object Execute(MlfBlock block, SnekScope scope, out string stream, out Exception error, params object[] arguments) { stream = null; error = null; if (scope == null) { scope = defaultScope; } SnekScriptSource source = (SnekScriptSource)block.GetFormatData("scriptSource"); if (source == null) { return(null); } scope.scriptScope.SetVariable("block", block); AddContextsToScope(block.contexts, scope, block, arguments); object output = Execute(source.ScriptSource, scope, out stream, out error); RemoveContextsFromScope(block.contexts, scope, block); scope.scriptScope.RemoveVariable("block"); return(output); }
//Execute a block public object Execute(MlfBlock block, SnekScope scope, Dictionary <string, MlfProperty> properties = null, params object[] arguments) { string stream = null; Exception error = null; if (scope == null) { scope = defaultScope; } //Find source SnekScriptSource source = (SnekScriptSource)block.GetFormatData("scriptSource"); if (source == null) { return(null); } ApplyPropertyList(scope, properties); ApplyArgumentList(block, scope, arguments); object output = Execute(block, scope, out stream, out error, arguments); RemoveArgumentList(block, scope, arguments); RemovePropertyList(scope, properties); if (stream != null) { string stackTrace = GetStackTrace(source.ScriptSource, block); Log(stream, StackTraceLogType.None, stackTrace); } if (error != null) { string stackTrace = GetStackTrace(source.ScriptSource, block, error); LogError(error.Message, StackTraceLogType.None, stackTrace); } return(output); }