Пример #1
0
        /// <exception cref="ArgumentNullException"><paramref name="context" /> is <c>null</c>.</exception>
        internal LSLStateScopeNode(LSLParser.DefinedStateContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            StateName = context.state_name.Text;

            SourceRange = new LSLSourceCodeRange(context);

            SourceRangeOpenBrace    = new LSLSourceCodeRange(context.open_brace);
            SourceRangeCloseBrace   = new LSLSourceCodeRange(context.close_brace);
            SourceRangeStateName    = new LSLSourceCodeRange(context.state_name);
            SourceRangeStateKeyword = new LSLSourceCodeRange(context.state_keyword);

            SourceRangesAvailable = true;
        }
Пример #2
0
        /// <exception cref="ArgumentNullException"><paramref name="eventHandlers" /> is <c>null</c>.</exception>
        internal LSLStateScopeNode(LSLParser.DefinedStateContext context, IEnumerable <LSLEventHandlerNode> eventHandlers)
            : this(context)
        {
            if (eventHandlers == null)
            {
                throw new ArgumentNullException("eventHandlers");
            }

            StateName = context.state_name.Text;

            foreach (var lslEventHandlerNode in eventHandlers)
            {
                Add(lslEventHandlerNode);
            }

            SourceRange = new LSLSourceCodeRange(context);

            SourceRangeOpenBrace    = new LSLSourceCodeRange(context.open_brace);
            SourceRangeCloseBrace   = new LSLSourceCodeRange(context.close_brace);
            SourceRangeStateName    = new LSLSourceCodeRange(context.state_name);
            SourceRangeStateKeyword = new LSLSourceCodeRange(context.state_keyword);

            SourceRangesAvailable = true;
        }
Пример #3
0
        public override bool VisitDefinedState(LSLParser.DefinedStateContext context)
        {
            if (context == null || Utility.AnyNull(context.children, context.state_name))
            {
                throw LSLCodeValidatorInternalException.VisitContextInvalidState("VisitDefinedState", true);
            }


            if (context.state_name.Text == "default")
            {
                GenSyntaxError().RedefinedDefaultState(
                    new LSLSourceCodeRange(context.state_name));

                return(false);
            }


            if (_scopingManager.StatePreDefined(context.state_name.Text))
            {
                GenSyntaxError().RedefinedStateName(
                    new LSLSourceCodeRange(context.state_name),
                    context.state_name.Text);

                return(false);
            }


            _scopingManager.PreDefineState(context.state_name.Text);


            if (!context.eventHandler().Any())
            {
                GenSyntaxError().StateHasNoEventHandlers(
                    new LSLSourceCodeRange(context.state_name),
                    context.state_name.Text);

                return(false);
            }


            var eventHandlerNames = new HashSet <string>();

            foreach (var ctx in context.eventHandler())
            {
                if (ctx.handler_name == null)
                {
                    throw LSLCodeValidatorInternalException
                          .VisitContextInInvalidState("VisitDefinedState",
                                                      typeof(LSLParser.EventHandlerContext), true);
                }

                if (eventHandlerNames.Contains(ctx.handler_name.Text))
                {
                    GenSyntaxError().RedefinedEventHandler(
                        new LSLSourceCodeRange(ctx.handler_name),
                        ctx.handler_name.Text,
                        context.state_name.Text);


                    return(false);
                }
                eventHandlerNames.Add(ctx.handler_name.Text);
            }


            return(true);
        }
Пример #4
0
 /// <summary>
 /// Exit a parse tree produced by <see cref="LSLParser.definedState"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitDefinedState([NotNull] LSLParser.DefinedStateContext context)
 {
 }
Пример #5
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="LSLParser.definedState"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitDefinedState([NotNull] LSLParser.DefinedStateContext context)
 {
     return(VisitChildren(context));
 }