Esempio n. 1
0
 public BreakStatement(LuaParser.Stat_breakContext context, ScriptLoadingContext lcontext)
     : base(context, lcontext)
 {
     m_Ref = BuildSourceRef(context.Start, context.Stop);
 }
Esempio n. 2
0
 public BreakStatement(ScriptLoadingContext lcontext) : base(lcontext)
 {
     _ref = CheckTokenType(lcontext, TokenType.Break).GetSourceRef();
     lcontext.Source.Refs.Add(_ref);
 }
Esempio n. 3
0
 public FunctionCallStatement(LuaParser.Stat_functioncallContext context, ScriptLoadingContext lcontext)
     : base(context, lcontext)
 {
     m_FunctionCallChain = new FunctionCallChainExpression(context, lcontext);
     m_SourceRef         = BuildSourceRef(context.Start, context.Stop);
 }
Esempio n. 4
0
 public AttachmentEvent(SourceRef source, String data)
 {
     this.source = source;
     this.data   = data;
 }
Esempio n. 5
0
 internal SyntaxErrorException(Script script, SourceRef sref, string message)
     : base(message)
 {
     DecorateMessage(script, sref);
 }
Esempio n. 6
0
		private bool ToggleBreakPoint(DebuggerAction action, bool? state)
		{
			SourceCode src = m_Script.GetSourceCode(action.SourceID);

			bool found = false;
			foreach (SourceRef srf in src.Refs)
			{
				if (srf.CannotBreakpoint)
					continue;

				if (srf.IncludesLocation(action.SourceID, action.SourceLine, action.SourceCol))
				{
					found = true;

					//System.Diagnostics.Debug.WriteLine(string.Format("BRK: found {0} for {1} on contains", srf, srf.Type));

					if (state == null)
						srf.Breakpoint = !srf.Breakpoint;
					else
						srf.Breakpoint = state.Value;

					if (srf.Breakpoint)
					{
						m_Debug.BreakPoints.Add(srf);
					}
					else
					{
						m_Debug.BreakPoints.Remove(srf);
					}
				}
			}

			if (!found)
			{
				int minDistance = int.MaxValue;
				SourceRef nearest = null;

				foreach (SourceRef srf in src.Refs)
				{
					if (srf.CannotBreakpoint)
						continue;

					int dist = srf.GetLocationDistance(action.SourceID, action.SourceLine, action.SourceCol);

					if (dist < minDistance)
					{
						minDistance = dist;
						nearest = srf;
					}
				}

				if (nearest != null)
				{
					//System.Diagnostics.Debug.WriteLine(string.Format("BRK: found {0} for {1} on distance {2}", nearest, nearest.Type, minDistance));

					if (state == null)
						nearest.Breakpoint = !nearest.Breakpoint;
					else
						nearest.Breakpoint = state.Value;

					if (nearest.Breakpoint)
					{
						m_Debug.BreakPoints.Add(nearest);
					}
					else
					{
						m_Debug.BreakPoints.Remove(nearest);
					}

					return true;
				}
				else
					return false;
			}
			else
				return true;
		}
Esempio n. 7
0
 public void PopSourceRef()
 {
     m_SourceRefStack.RemoveAt(m_SourceRefStack.Count - 1);
     m_CurrentSourceRef = (m_SourceRefStack.Count > 0) ? m_SourceRefStack[m_SourceRefStack.Count - 1] : null;
 }
        public FunctionDefinitionStatement(ScriptLoadingContext lcontext, bool local, Token localToken)
            : base(lcontext)
        {
            // here lexer must be at the 'function' keyword
            Token funcKeyword = CheckTokenType(lcontext, TokenType.Function);

            funcKeyword = localToken ?? funcKeyword;             // for debugger purposes

            m_Local = local;

            if (m_Local)
            {
                Token name = CheckTokenType(lcontext, TokenType.Name);
                m_FuncSymbol   = lcontext.Scope.TryDefineLocal(name.Text);
                m_FriendlyName = string.Format("{0} (local)", name.Text);
                m_SourceRef    = funcKeyword.GetSourceRef(name);
            }
            else
            {
                Token  name      = CheckTokenType(lcontext, TokenType.Name);
                string firstName = name.Text;

                m_SourceRef = funcKeyword.GetSourceRef(name);

                m_FuncSymbol   = lcontext.Scope.Find(firstName);
                m_FriendlyName = firstName;

                if (lcontext.Lexer.Current.Type != TokenType.Brk_Open_Round)
                {
                    m_TableAccessors = new List <string>();

                    while (lcontext.Lexer.Current.Type != TokenType.Brk_Open_Round)
                    {
                        Token separator = lcontext.Lexer.Current;

                        if (separator.Type != TokenType.Colon && separator.Type != TokenType.Dot)
                        {
                            UnexpectedTokenType(separator);
                        }

                        lcontext.Lexer.Next();

                        Token field = CheckTokenType(lcontext, TokenType.Name);

                        m_FriendlyName += separator.Text + field.Text;
                        m_SourceRef     = funcKeyword.GetSourceRef(field);

                        if (separator.Type == TokenType.Colon)
                        {
                            m_MethodName = field.Text;
                            m_IsMethodCallingConvention = true;
                            break;
                        }
                        else
                        {
                            m_TableAccessors.Add(field.Text);
                        }
                    }

                    if (m_MethodName == null && m_TableAccessors.Count > 0)
                    {
                        m_MethodName = m_TableAccessors[m_TableAccessors.Count - 1];
                        m_TableAccessors.RemoveAt(m_TableAccessors.Count - 1);
                    }
                }
            }

            m_FuncDef = new FunctionDefinitionExpression(lcontext, m_IsMethodCallingConvention, false);
            lcontext.Source.Refs.Add(m_SourceRef);
        }
Esempio n. 9
0
 public SourceCodeStackGuard(SourceRef sref, ByteCode bc)
 {
     m_Bc = bc;
     m_Bc.PushSourceRef(sref);
 }
Esempio n. 10
0
 public void PushSourceRef(SourceRef sref)
 {
     m_SourceRefStack.Add(sref);
     m_CurrentSourceRef = sref;
 }
Esempio n. 11
0
 public IDisposable EnterSource(SourceRef sref)
 {
     return(new SourceCodeStackGuard(sref, this));
 }
Esempio n. 12
0
 public SourceCodeStackGuard(SourceRef sref, ByteCode bc)
 {
     _bc = bc;
     _bc.PushSourceRef(sref);
 }
Esempio n. 13
0
        protected internal virtual void DoRegisterTypes(ModelBuilder bpmnModelBuilder)
        {
            ActivationConditionImpl.RegisterType(bpmnModelBuilder);
            ActivityImpl.RegisterType(bpmnModelBuilder);
            ArtifactImpl.RegisterType(bpmnModelBuilder);
            AssignmentImpl.RegisterType(bpmnModelBuilder);
            AssociationImpl.RegisterType(bpmnModelBuilder);
            AuditingImpl.RegisterType(bpmnModelBuilder);
            BaseElementImpl.RegisterType(bpmnModelBuilder);
            BoundaryEventImpl.RegisterType(bpmnModelBuilder);
            BusinessRuleTaskImpl.RegisterType(bpmnModelBuilder);
            CallableElementImpl.RegisterType(bpmnModelBuilder);
            CallActivityImpl.RegisterType(bpmnModelBuilder);
            CallConversationImpl.RegisterType(bpmnModelBuilder);
            CancelEventDefinitionImpl.RegisterType(bpmnModelBuilder);
            CatchEventImpl.RegisterType(bpmnModelBuilder);
            CategoryValueImpl.RegisterType(bpmnModelBuilder);
            CategoryValueRef.RegisterType(bpmnModelBuilder);
            ChildLaneSet.RegisterType(bpmnModelBuilder);
            CollaborationImpl.RegisterType(bpmnModelBuilder);
            CompensateEventDefinitionImpl.RegisterType(bpmnModelBuilder);
            ConditionImpl.RegisterType(bpmnModelBuilder);
            ConditionalEventDefinitionImpl.RegisterType(bpmnModelBuilder);
            CompletionConditionImpl.RegisterType(bpmnModelBuilder);
            ComplexBehaviorDefinitionImpl.RegisterType(bpmnModelBuilder);
            ComplexGatewayImpl.RegisterType(bpmnModelBuilder);
            ConditionExpressionImpl.RegisterType(bpmnModelBuilder);
            ConversationAssociationImpl.RegisterType(bpmnModelBuilder);
            ConversationImpl.RegisterType(bpmnModelBuilder);
            ConversationLinkImpl.RegisterType(bpmnModelBuilder);
            ConversationNodeImpl.RegisterType(bpmnModelBuilder);
            CorrelationKeyImpl.RegisterType(bpmnModelBuilder);
            CorrelationPropertyBindingImpl.RegisterType(bpmnModelBuilder);
            CorrelationPropertyImpl.RegisterType(bpmnModelBuilder);
            CorrelationPropertyRef.RegisterType(bpmnModelBuilder);
            CorrelationPropertyRetrievalExpressionImpl.RegisterType(bpmnModelBuilder);
            CorrelationSubscriptionImpl.RegisterType(bpmnModelBuilder);
            DataAssociationImpl.RegisterType(bpmnModelBuilder);
            DataInputAssociationImpl.RegisterType(bpmnModelBuilder);
            DataInputImpl.RegisterType(bpmnModelBuilder);
            DataInputRefs.RegisterType(bpmnModelBuilder);
            DataOutputAssociationImpl.RegisterType(bpmnModelBuilder);
            DataOutputImpl.RegisterType(bpmnModelBuilder);
            DataOutputRefs.RegisterType(bpmnModelBuilder);
            DataPath.RegisterType(bpmnModelBuilder);
            DataStateImpl.RegisterType(bpmnModelBuilder);
            DataObjectImpl.RegisterType(bpmnModelBuilder);
            DataObjectReferenceImpl.RegisterType(bpmnModelBuilder);
            DataStoreImpl.RegisterType(bpmnModelBuilder);
            DefinitionsImpl.RegisterType(bpmnModelBuilder);
            DocumentationImpl.RegisterType(bpmnModelBuilder);
            EndEventImpl.RegisterType(bpmnModelBuilder);
            EndPointImpl.RegisterType(bpmnModelBuilder);
            EndPointRef.RegisterType(bpmnModelBuilder);
            ErrorEventDefinitionImpl.RegisterType(bpmnModelBuilder);
            ErrorImpl.RegisterType(bpmnModelBuilder);
            ErrorRef.RegisterType(bpmnModelBuilder);
            EscalationImpl.RegisterType(bpmnModelBuilder);
            EscalationEventDefinitionImpl.RegisterType(bpmnModelBuilder);
            EventBasedGatewayImpl.RegisterType(bpmnModelBuilder);
            EventDefinitionImpl.RegisterType(bpmnModelBuilder);
            EventDefinitionRef.RegisterType(bpmnModelBuilder);
            EventImpl.RegisterType(bpmnModelBuilder);
            ExclusiveGatewayImpl.RegisterType(bpmnModelBuilder);
            ExpressionImpl.RegisterType(bpmnModelBuilder);
            ExtensionElementsImpl.RegisterType(bpmnModelBuilder);
            ExtensionImpl.RegisterType(bpmnModelBuilder);
            FlowElementImpl.RegisterType(bpmnModelBuilder);
            FlowNodeImpl.RegisterType(bpmnModelBuilder);
            FlowNodeRef.RegisterType(bpmnModelBuilder);
            FormalExpressionImpl.RegisterType(bpmnModelBuilder);
            From.RegisterType(bpmnModelBuilder);
            GatewayImpl.RegisterType(bpmnModelBuilder);
            GlobalConversationImpl.RegisterType(bpmnModelBuilder);
            HumanPerformerImpl.RegisterType(bpmnModelBuilder);
            ImportImpl.RegisterType(bpmnModelBuilder);
            InclusiveGatewayImpl.RegisterType(bpmnModelBuilder);
            Incoming.RegisterType(bpmnModelBuilder);
            InMessageRef.RegisterType(bpmnModelBuilder);
            InnerParticipantRef.RegisterType(bpmnModelBuilder);
            InputDataItemImpl.RegisterType(bpmnModelBuilder);
            InputSetImpl.RegisterType(bpmnModelBuilder);
            InputSetRefs.RegisterType(bpmnModelBuilder);
            InteractionNodeImpl.RegisterType(bpmnModelBuilder);
            InterfaceImpl.RegisterType(bpmnModelBuilder);
            InterfaceRef.RegisterType(bpmnModelBuilder);
            IntermediateCatchEventImpl.RegisterType(bpmnModelBuilder);
            IntermediateThrowEventImpl.RegisterType(bpmnModelBuilder);
            IoBindingImpl.RegisterType(bpmnModelBuilder);
            IoSpecificationImpl.RegisterType(bpmnModelBuilder);
            ItemAwareElementImpl.RegisterType(bpmnModelBuilder);
            ItemDefinitionImpl.RegisterType(bpmnModelBuilder);
            LaneImpl.RegisterType(bpmnModelBuilder);
            LaneSetImpl.RegisterType(bpmnModelBuilder);
            LinkEventDefinitionImpl.RegisterType(bpmnModelBuilder);
            LoopCardinalityImpl.RegisterType(bpmnModelBuilder);
            LoopCharacteristicsImpl.RegisterType(bpmnModelBuilder);
            LoopDataInputRef.RegisterType(bpmnModelBuilder);
            LoopDataOutputRef.RegisterType(bpmnModelBuilder);
            ManualTaskImpl.RegisterType(bpmnModelBuilder);
            MessageEventDefinitionImpl.RegisterType(bpmnModelBuilder);
            MessageFlowAssociationImpl.RegisterType(bpmnModelBuilder);
            MessageFlowImpl.RegisterType(bpmnModelBuilder);
            MessageFlowRef.RegisterType(bpmnModelBuilder);
            MessageImpl.RegisterType(bpmnModelBuilder);
            MessagePath.RegisterType(bpmnModelBuilder);
            ModelElementInstanceImpl.RegisterType(bpmnModelBuilder);
            MonitoringImpl.RegisterType(bpmnModelBuilder);
            MultiInstanceLoopCharacteristicsImpl.RegisterType(bpmnModelBuilder);
            OperationImpl.RegisterType(bpmnModelBuilder);
            OperationRef.RegisterType(bpmnModelBuilder);
            OptionalInputRefs.RegisterType(bpmnModelBuilder);
            OptionalOutputRefs.RegisterType(bpmnModelBuilder);
            OuterParticipantRef.RegisterType(bpmnModelBuilder);
            OutMessageRef.RegisterType(bpmnModelBuilder);
            Outgoing.RegisterType(bpmnModelBuilder);
            OutputDataItemImpl.RegisterType(bpmnModelBuilder);
            OutputSetImpl.RegisterType(bpmnModelBuilder);
            OutputSetRefs.RegisterType(bpmnModelBuilder);
            ParallelGatewayImpl.RegisterType(bpmnModelBuilder);
            ParticipantAssociationImpl.RegisterType(bpmnModelBuilder);
            ParticipantImpl.RegisterType(bpmnModelBuilder);
            ParticipantMultiplicityImpl.RegisterType(bpmnModelBuilder);
            ParticipantRef.RegisterType(bpmnModelBuilder);
            PartitionElement.RegisterType(bpmnModelBuilder);
            PerformerImpl.RegisterType(bpmnModelBuilder);
            PotentialOwnerImpl.RegisterType(bpmnModelBuilder);
            ProcessImpl.RegisterType(bpmnModelBuilder);
            PropertyImpl.RegisterType(bpmnModelBuilder);
            ReceiveTaskImpl.RegisterType(bpmnModelBuilder);
            RelationshipImpl.RegisterType(bpmnModelBuilder);
            RenderingImpl.RegisterType(bpmnModelBuilder);
            ResourceAssignmentExpressionImpl.RegisterType(bpmnModelBuilder);
            ResourceImpl.RegisterType(bpmnModelBuilder);
            ResourceParameterBindingImpl.RegisterType(bpmnModelBuilder);
            ResourceParameterImpl.RegisterType(bpmnModelBuilder);
            ResourceRef.RegisterType(bpmnModelBuilder);
            ResourceRoleImpl.RegisterType(bpmnModelBuilder);
            RootElementImpl.RegisterType(bpmnModelBuilder);
            ScriptImpl.RegisterType(bpmnModelBuilder);
            ScriptTaskImpl.RegisterType(bpmnModelBuilder);
            SendTaskImpl.RegisterType(bpmnModelBuilder);
            SequenceFlowImpl.RegisterType(bpmnModelBuilder);
            ServiceTaskImpl.RegisterType(bpmnModelBuilder);
            SignalEventDefinitionImpl.RegisterType(bpmnModelBuilder);
            SignalImpl.RegisterType(bpmnModelBuilder);
            Source.RegisterType(bpmnModelBuilder);
            SourceRef.RegisterType(bpmnModelBuilder);
            StartEventImpl.RegisterType(bpmnModelBuilder);
            SubConversationImpl.RegisterType(bpmnModelBuilder);
            SubProcessImpl.RegisterType(bpmnModelBuilder);
            SupportedInterfaceRef.RegisterType(bpmnModelBuilder);
            Supports.RegisterType(bpmnModelBuilder);
            Target.RegisterType(bpmnModelBuilder);
            TargetRef.RegisterType(bpmnModelBuilder);
            TaskImpl.RegisterType(bpmnModelBuilder);
            TerminateEventDefinitionImpl.RegisterType(bpmnModelBuilder);
            TextImpl.RegisterType(bpmnModelBuilder);
            TextAnnotationImpl.RegisterType(bpmnModelBuilder);
            ThrowEventImpl.RegisterType(bpmnModelBuilder);
            TimeCycleImpl.RegisterType(bpmnModelBuilder);
            TimeDateImpl.RegisterType(bpmnModelBuilder);
            TimeDurationImpl.RegisterType(bpmnModelBuilder);
            TimerEventDefinitionImpl.RegisterType(bpmnModelBuilder);
            To.RegisterType(bpmnModelBuilder);
            TransactionImpl.RegisterType(bpmnModelBuilder);
            Transformation.RegisterType(bpmnModelBuilder);
            UserTaskImpl.RegisterType(bpmnModelBuilder);
            WhileExecutingInputRefs.RegisterType(bpmnModelBuilder);
            WhileExecutingOutputRefs.RegisterType(bpmnModelBuilder);

            // DC
            FontImpl.RegisterType(bpmnModelBuilder);
            PointImpl.RegisterType(bpmnModelBuilder);
            BoundsImpl.RegisterType(bpmnModelBuilder);

            // DI
            DiagramImpl.RegisterType(bpmnModelBuilder);
            DiagramElementImpl.RegisterType(bpmnModelBuilder);
            EdgeImpl.RegisterType(bpmnModelBuilder);
            impl.instance.di.ExtensionImpl.RegisterType(bpmnModelBuilder);
            LabelImpl.RegisterType(bpmnModelBuilder);
            LabeledEdgeImpl.RegisterType(bpmnModelBuilder);
            LabeledShapeImpl.RegisterType(bpmnModelBuilder);
            NodeImpl.RegisterType(bpmnModelBuilder);
            PlaneImpl.RegisterType(bpmnModelBuilder);
            ShapeImpl.RegisterType(bpmnModelBuilder);
            StyleImpl.RegisterType(bpmnModelBuilder);
            WaypointImpl.RegisterType(bpmnModelBuilder);

            // BPMNDI
            BpmnDiagramImpl.RegisterType(bpmnModelBuilder);
            BpmnEdgeImpl.RegisterType(bpmnModelBuilder);
            BpmnLabelImpl.RegisterType(bpmnModelBuilder);
            BpmnLabelStyleImpl.RegisterType(bpmnModelBuilder);
            BpmnPlaneImpl.RegisterType(bpmnModelBuilder);
            BpmnShapeImpl.RegisterType(bpmnModelBuilder);

            // camunda extensions
            CamundaConnectorImpl.RegisterType(bpmnModelBuilder);
            CamundaConnectorIdImpl.RegisterType(bpmnModelBuilder);
            CamundaConstraintImpl.RegisterType(bpmnModelBuilder);
            CamundaEntryImpl.RegisterType(bpmnModelBuilder);
            CamundaExecutionListenerImpl.RegisterType(bpmnModelBuilder);
            CamundaExpressionImpl.RegisterType(bpmnModelBuilder);
            CamundaFailedJobRetryTimeCycleImpl.RegisterType(bpmnModelBuilder);
            CamundaFieldImpl.RegisterType(bpmnModelBuilder);
            CamundaFormDataImpl.RegisterType(bpmnModelBuilder);
            CamundaFormFieldImpl.RegisterType(bpmnModelBuilder);
            CamundaFormPropertyImpl.RegisterType(bpmnModelBuilder);
            CamundaInImpl.RegisterType(bpmnModelBuilder);
            CamundaInputOutputImpl.RegisterType(bpmnModelBuilder);
            CamundaInputParameterImpl.RegisterType(bpmnModelBuilder);
            CamundaListImpl.RegisterType(bpmnModelBuilder);
            CamundaMapImpl.RegisterType(bpmnModelBuilder);
            CamundaOutputParameterImpl.RegisterType(bpmnModelBuilder);
            CamundaOutImpl.RegisterType(bpmnModelBuilder);
            CamundaPotentialStarterImpl.RegisterType(bpmnModelBuilder);
            CamundaPropertiesImpl.RegisterType(bpmnModelBuilder);
            CamundaPropertyImpl.RegisterType(bpmnModelBuilder);
            CamundaScriptImpl.RegisterType(bpmnModelBuilder);
            CamundaStringImpl.RegisterType(bpmnModelBuilder);
            CamundaTaskListenerImpl.RegisterType(bpmnModelBuilder);
            CamundaValidationImpl.RegisterType(bpmnModelBuilder);
            CamundaValueImpl.RegisterType(bpmnModelBuilder);
        }
Esempio n. 14
0
        public DebuggerAction GetAction(int ip, SourceRef sourceref)
        {
            try
            {
                if (m_FreeRunAfterAttach)
                {
                    m_FreeRunAfterAttach = false;
                    return(new DebuggerAction()
                    {
                        Action = DebuggerAction.ActionType.Run
                    });
                }

                m_InGetActionLoop = true;
                m_RequestPause    = false;

                if (m_HostBusySent)
                {
                    m_HostBusySent = false;
                    SendMessage("Host ready!");
                }

                if (sourceref != m_LastSentSourceRef)
                {
                    Send(xw =>
                    {
                        SendSourceRef(xw, sourceref);
                    });
                }

                while (true)
                {
                    DebuggerAction da = m_QueuedActions.Dequeue();

                    if (da.Action == DebuggerAction.ActionType.Refresh || da.Action == DebuggerAction.ActionType.HardRefresh)
                    {
                        lock (m_Lock)
                        {
                            HashSet <string> existing = new HashSet <string>();

                            // remove all not present anymore
                            m_Watches.RemoveAll(de => !m_WatchesChanging.Contains(de.ExpressionCode));

                            // add all missing
                            existing.UnionWith(m_Watches.Select(de => de.ExpressionCode));

                            m_Watches.AddRange(m_WatchesChanging
                                               .Where(code => !existing.Contains(code))
                                               .Select(code => CreateDynExpr(code)));
                        }

                        return(da);
                    }

                    if (da.Action == DebuggerAction.ActionType.ToggleBreakpoint || da.Action == DebuggerAction.ActionType.SetBreakpoint ||
                        da.Action == DebuggerAction.ActionType.ClearBreakpoint)
                    {
                        return(da);
                    }

                    if (da.Age < TimeSpan.FromMilliseconds(100))
                    {
                        return(da);
                    }
                }
            }
            finally
            {
                m_InGetActionLoop = false;
            }
        }
Esempio n. 15
0
 public Instruction(SourceRef sourceref)
 {
     SourceCodeRef = sourceref;
 }
Esempio n. 16
0
 internal Instruction(SourceRef sourceref)
 {
     SourceCodeRef = sourceref;
 }
Esempio n. 17
0
 private SourceRef RegisterSourceRef(SourceRef sourceRef)
 {
     LoadingContext.Source.Refs.Add(sourceRef);
     sourceRef.Type = this.GetType().Name;
     return(sourceRef);
 }
Esempio n. 18
0
 internal SyntaxErrorException(Script script, SourceRef sref, string format, params object[] args)
     : base(format, args)
 {
     DecorateMessage(script, sref);
 }
        internal string PerformMessageDecorationBeforeUnwind(DynValue messageHandler, string decoratedMessage, SourceRef sourceRef)
        {
            try
            {
                DynValue[] args = new DynValue[] { DynValue.NewString(decoratedMessage) };
                DynValue   ret  = DynValue.Nil;

                if (messageHandler.Type == DataType.Function)
                {
                    ret = this.Call(messageHandler, args);
                }
                else if (messageHandler.Type == DataType.ClrFunction)
                {
                    ScriptExecutionContext ctx = new ScriptExecutionContext(this, messageHandler.Callback, sourceRef);
                    ret = messageHandler.Callback.Invoke(ctx, args);
                }
                else
                {
                    throw new ScriptRuntimeException("error handler not set to a function");
                }

                string newmsg = ret.ToPrintString();
                if (newmsg != null)
                {
                    return(newmsg);
                }
            }
            catch (ScriptRuntimeException innerEx)
            {
                return(innerEx.Message + "\n" + decoratedMessage);
            }

            return(decoratedMessage);
        }
Esempio n. 20
0
 public DefRef(T def, SourceRef sourceRef)
 {
     Def       = def;
     SourceRef = sourceRef;
 }
        private int Internal_ExecCall(int argsCount, int instructionPtr, CallbackFunction handler = null, CallbackFunction continuation = null, bool thisCall = false, string debugText = null, DynValue unwindHandler = null)
        {
            DynValue fn = m_ValueStack.Peek(argsCount);

            if (fn.Type == DataType.ClrFunction)
            {
                IList <DynValue> args = new Slice <DynValue>(m_ValueStack, m_ValueStack.Count - argsCount, argsCount, false);

                // we expand tuples before callbacks
                // args = DynValue.ExpandArgumentsToList(args);
                SourceRef sref = GetCurrentSourceRef(instructionPtr);

                m_ExecutionStack.Push(new CallStackItem()
                {
                    ClrFunction              = fn.Callback,
                    ReturnAddress            = instructionPtr,
                    CallingSourceRef         = sref,
                    BasePointer              = -1,
                    ErrorHandler             = handler,
                    Continuation             = continuation,
                    ErrorHandlerBeforeUnwind = unwindHandler,
                });

                var ret = fn.Callback.Invoke(new ScriptExecutionContext(this, fn.Callback, sref), args, isMethodCall: thisCall);
                m_ValueStack.RemoveLast(argsCount + 1);
                m_ValueStack.Push(ret);

                m_ExecutionStack.Pop();

                return(Internal_CheckForTailRequests(null, instructionPtr));
            }
            else if (fn.Type == DataType.Function)
            {
                m_ValueStack.Push(DynValue.NewNumber(argsCount));
                m_ExecutionStack.Push(new CallStackItem()
                {
                    BasePointer              = m_ValueStack.Count,
                    ReturnAddress            = instructionPtr,
                    Debug_EntryPoint         = fn.Function.EntryPointByteCodeLocation,
                    CallingSourceRef         = GetCurrentSourceRef(instructionPtr),
                    ClosureScope             = fn.Function.ClosureContext,
                    ErrorHandler             = handler,
                    Continuation             = continuation,
                    ErrorHandlerBeforeUnwind = unwindHandler,
                });
                return(fn.Function.EntryPointByteCodeLocation);
            }
            else
            {
                var metatable = GetMetatable(fn);

                if (metatable != null)
                {
                    var m = metatable.RawGet("__call");

                    if (m != null && m.IsNotNil())
                    {
                        DynValue[] tmp = new DynValue[argsCount + 1];
                        for (int i = 0; i < argsCount + 1; i++)
                        {
                            tmp[i] = m_ValueStack.Pop();
                        }

                        m_ValueStack.Push(m);

                        for (int i = argsCount; i >= 0; i--)
                        {
                            m_ValueStack.Push(tmp[i]);
                        }

                        return(Internal_ExecCall(argsCount + 1, instructionPtr, handler, continuation));
                    }
                }

                throw ScriptRuntimeException.AttemptToCallNonFunc(fn.Type, debugText);
            }
        }
 internal ScriptExecutionContext(ExecutionControlToken ecToken, Processor p, CallbackFunction callBackFunction, SourceRef sourceRef, bool isDynamic = false)
 {
     IsDynamicExecution = isDynamic;
     m_Processor        = p;
     m_Callback         = callBackFunction;
     m_EcToken          = ecToken;
     CallingLocation    = sourceRef;
 }
Esempio n. 23
0
        internal int Undump(Stream stream, int sourceID, Table envTable, out bool hasUpvalues)
        {
            int       baseAddress = m_RootChunk.Code.Count;
            SourceRef sourceRef   = new SourceRef(sourceID, 0, 0, 0, 0, false);

            var   br         = new BinDumpReader(stream);
            ulong headerMark = br.ReadUInt64();

            if (headerMark != DUMP_CHUNK_MAGIC)
            {
                throw new ArgumentException("Not a MoonSharp chunk");
            }

            int version = br.ReadByte();

            if (version != DUMP_CHUNK_VERSION)
            {
                throw new ArgumentException("Invalid version");
            }

            hasUpvalues = br.ReadBoolean();

            int len = (int)br.ReadVarUInt32();

            int numSymbs = (int)br.ReadVarUInt32();

            SymbolRef[] allSymbs = new SymbolRef[numSymbs];

            for (int i = 0; i < numSymbs; i++)
            {
                allSymbs[i] = SymbolRef.ReadBinary(br);
            }

            for (int i = 0; i < numSymbs; i++)
            {
                allSymbs[i].ReadBinaryEnv(br, allSymbs);
            }

            for (int i = 0; i <= len; i++)
            {
                Instruction I = Instruction.ReadBinary(br, baseAddress, envTable, allSymbs);
                m_RootChunk.Code.Add(I);
            }
            for (int i = 0; i <= len; i++)
            {
                var c = br.ReadByte();
                if (c == 0)
                {
                    m_RootChunk.SourceRefs.Add(sourceRef);
                }
                else if (c == 1)
                {
                    m_RootChunk.SourceRefs.Add(m_RootChunk.SourceRefs[m_RootChunk.SourceRefs.Count - 1]);
                }
                else
                {
                    m_RootChunk.SourceRefs.Add(SourceRef.ReadBinary(br, sourceID));
                }
            }

            return(baseAddress);
        }