Example #1
0
 public void AppendCallstack(CallStackItem callStack)
 {
     if (MyCallstackItem.IsNull() || MyCallstackItem.CallStack.IsNull())
     {
         return;
     }
     MyCallstackItem.CallStack.Add(callStack);
 }
Example #2
0
 /// <summary>
 /// Serializes the service instance call stack for transport to the client.
 /// </summary>
 /// <param name="value">The call stack item</param>
 /// <returns>the string representation of the call stack</returns>
 public string Serialize(CallStackItem value)
 {
     using (var stream = new MemoryStream())
     {
         compiledModel.Serialize(stream, value);
         return(ReadStringFromStream(stream));
     }
 }
Example #3
0
        private async static void LogCallstack(string filename, CallStackItem callstack)
        {
            var file = string.Format(LogPath, filename);

            using (var stream = File.OpenWrite(file))
            {
                var buffer = JsonConvert.SerializeObject(callstack).GetByteArray();
                await stream.WriteAsync(buffer, 0, buffer.Length);

                await stream.FlushAsync();
            }
        }
Example #4
0
 public ITracer StartTrace(string taskName, string methodName)
 {
     timer = Stopwatch.StartNew();
     MyCallstackItem = new CallStackItem
                       {
                           CallStack = new List<CallStackItem>(),
                           Name = taskName,
                           MethodName = methodName,
                           TimeStamp = DateTime.Now
                       };
     if (ParentItem.IsInstance())
         ParentItem.CallStack.Add(MyCallstackItem);
     return this;
 }
Example #5
0
 public ITracer StartTrace(string taskName, string methodName)
 {
     timer           = Stopwatch.StartNew();
     MyCallstackItem = new CallStackItem
     {
         CallStack  = new List <CallStackItem>(),
         Name       = taskName,
         MethodName = methodName,
         TimeStamp  = DateTime.Now
     };
     if (ParentItem.IsInstance())
     {
         ParentItem.CallStack.Add(MyCallstackItem);
     }
     return(this);
 }
 public void SetCallStack(CallStackItem callStack)
 {
     CallStack = callStack.CallStack;
 }
        public override DynValue Visit(FunctionCallNode functionCallNode)
        {
            var name       = functionCallNode.FunctionName;
            var parameters = new ClrFunctionArguments();

            foreach (var node in functionCallNode.Parameters)
            {
                parameters.Add(Visit(node));
            }

            if (Environment.Functions.ContainsKey(name))
            {
                var scriptFunction = Environment.Functions[name];

                if (CallStack.Count > 255)
                {
                    while (CallStack.Count != 0)
                    {
                        CallStack.Pop();
                    }

                    throw new RuntimeException("Call stack overflow.", functionCallNode.Line);
                }

                var callStackItem = new CallStackItem(name);
                var iterator      = 0;
                foreach (var parameterName in scriptFunction.ParameterNames)
                {
                    if (callStackItem.ParameterScope.ContainsKey(parameterName))
                    {
                        throw new RuntimeException($"Parameter {parameterName} already defined.",
                                                   functionCallNode.Line);
                    }

                    if (iterator < parameters.Count)
                    {
                        callStackItem.ParameterScope.Add(parameterName, parameters[iterator++]);
                    }
                    else
                    {
                        callStackItem.ParameterScope.Add(parameterName, DynValue.Zero);
                    }
                }

                CallStack.Push(callStackItem);

                var retval = DynValue.Zero;
                try
                {
                    retval = ExecuteStatementList(scriptFunction.StatementList).Result;
                }
                catch (ScriptTerminationException)
                {
                    throw;
                }
                catch (RuntimeException)
                {
                    throw;
                }
                catch (ExitStatementException)
                {
                }
                catch (Exception e)
                {
                    if (!(e.InnerException is ScriptTerminationException))
                    {
                        throw new RuntimeException(e.Message, functionCallNode.Line);
                    }
                }
                finally
                {
                    CallStack.Pop();
                }

                return(retval);
            }
            else if (Environment.BuiltIns.ContainsKey(name))
            {
                var clrFunction = Environment.BuiltIns[name];

                if (CallStack.Count > 255)
                {
                    while (CallStack.Count != 0)
                    {
                        CallStack.Pop();
                    }

                    throw new RuntimeException("Call stack overflow.", functionCallNode.Line);
                }

                var callStackitem = new CallStackItem($"kernel![{name}]");

                CallStack.Push(callStackitem);

                DynValue retVal;
                try
                {
                    retVal = clrFunction(this, parameters);
                }
                finally
                {
                    CallStack.Pop();
                }

                return(retVal);
            }
            else
            {
                throw new RuntimeException($"Function '{name}' does not exist.", functionCallNode.Line);
            }
        }
Example #8
0
 public void AppendCallstack(CallStackItem callStack)
 {
 }
Example #9
0
 public void AppendCallstack(CallStackItem callStack)
 {
     if(MyCallstackItem.IsNull()||MyCallstackItem.CallStack.IsNull()) return;
     MyCallstackItem.CallStack.Add(callStack);
 }
Example #10
0
 public void AppendCallstack(CallStackItem callStack)
 {
     
 }
Example #11
0
 /// <summary>
 /// Serializes the service instance call stack for transport to the client.
 /// </summary>
 /// <param name="value">The call stack item</param>
 /// <returns>the string representation of the call stack</returns>
 public string Serialize(CallStackItem value)
 {
     return(JsonConvert.SerializeObject(value, JsonSerializerSettings));
 }
 public void SetCallStack(CallStackItem callStack)
 {
     CallStack = callStack.CallStack;
 }
Example #13
0
 protected abstract void DoLogging(CallStackItem callStack);