Ejemplo n.º 1
0
 private void CheckReservedWord(ref string name, ISymbol symbol)
 {
     if (LuaSyntaxNode.IsReservedWord(name))
     {
         name = localReservedNames_[symbol];
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Initializes a depth-first preorder enumerator for the given node.
        /// </summary>
        protected void UsingNode(LuaSyntaxNode root)
        {
            VerifyEnumeratorConsumed();
            _node = root;
            var nodes = EnumerateNodes(root, dump: false);

            _treeEnumerator = nodes.GetEnumerator();
        }
Ejemplo n.º 3
0
 public virtual void Visit(LuaSyntaxNode node)
 {
     if (node is null)
     {
         return;
     }
     node.Accept(this);
 }
Ejemplo n.º 4
0
        protected void UsingNode(string text, LuaSyntaxNode node, DiagnosticDescription[] expectedErrors)
        {
            // we validate the text roundtrips
            Assert.Equal(text, node.ToFullString());
            var actualErrors = node.GetDiagnostics();

            actualErrors.Verify(expectedErrors);
            UsingNode(node);
        }
Ejemplo n.º 5
0
        private static SyntaxNode CheckSerializable(SyntaxNode node)
        {
            var stream = new MemoryStream();

            node.SerializeTo(stream);
            stream.Position = 0;
            _ = LuaSyntaxNode.DeserializeFrom(stream);
            return(node);
        }
Ejemplo n.º 6
0
 private bool CheckReservedWord(ref string name, SyntaxNode node)
 {
     if (LuaSyntaxNode.IsReservedWord(name))
     {
         name = GetUniqueIdentifier(name, node, 1);
         AddReservedMapping(name, node);
         return(true);
     }
     return(false);
 }
Ejemplo n.º 7
0
        private static SyntaxTree CheckSerializable(SyntaxTree tree)
        {
            var stream = new MemoryStream();
            var root   = tree.GetRoot();

            root.SerializeTo(stream);
            stream.Position = 0;
            _ = LuaSyntaxNode.DeserializeFrom(stream);
            return(tree);
        }
 private bool CheckLocalBadWord(ref string name, SyntaxNode node) {
   if (LuaSyntaxNode.IsReservedWord(name)) {
     name = GetUniqueIdentifier(name, node, 1);
     return true;
   }
   else if (Utility.IsIdentifierIllegal(ref name)) {
     name = GetUniqueIdentifier(name, node, 0);
     return true;
   }
   return false;
 }
Ejemplo n.º 9
0
        /// <summary>
        /// Called when the syntax walker visits a node.
        /// </summary>
        /// <param name="node"></param>
        public override void Visit(LuaSyntaxNode node)
        {
            if (node != null)
            {
                _recursionDepth++;
                StackGuard.EnsureSufficientExecutionStack(_recursionDepth);

                node.Accept(this);

                _recursionDepth--;
            }
        }
Ejemplo n.º 10
0
 /// <summary>
 /// Called when the walker walks into a node.
 /// </summary>
 /// <param name="node"></param>
 protected override void DefaultVisit(LuaSyntaxNode node)
 {
     foreach (var child in node.ChildNodesAndTokens())
     {
         if (child.IsToken)
         {
             if (Depth >= SyntaxWalkerDepth.Token)
             {
                 Visit((SyntaxToken)child);
             }
         }
         else
         {
             if (Depth >= SyntaxWalkerDepth.Node)
             {
                 Visit((LuaSyntaxNode)child);
             }
         }
     }
 }
Ejemplo n.º 11
0
        private IEnumerable <SyntaxNodeOrToken> EnumerateNodes(LuaSyntaxNode node, bool dump)
        {
            Print(node, dump);
            yield return(node);

            var stack = new Stack <ChildSyntaxList.Enumerator>(24);

            stack.Push(node.ChildNodesAndTokens().GetEnumerator());
            Open(dump);

            while (stack.Count > 0)
            {
                var en = stack.Pop();
                if (!en.MoveNext())
                {
                    // no more down this branch
                    Close(dump);
                    continue;
                }

                var current = en.Current;
                stack.Push(en); // put it back on stack (struct enumerator)

                Print(current, dump);
                yield return(current);

                if (current.IsNode)
                {
                    // not token, so consider children
                    stack.Push(current.ChildNodesAndTokens().GetEnumerator());
                    Open(dump);
                    continue;
                }
            }

            Done(dump);
        }
        public override LuaSyntaxNode VisitConstructorDeclaration(ConstructorDeclarationSyntax node)
        {
            IMethodSymbol ctorSymbol = semanticModel_.GetDeclaredSymbol(node);

            methodInfos_.Push(new MethodInfo(ctorSymbol));

            LuaConstructorAdapterExpressionSyntax function = new LuaConstructorAdapterExpressionSyntax();

            PushFunction(function);
            bool isStatic = node.Modifiers.IsStatic();

            function.AddParameter(LuaIdentifierNameSyntax.This);
            var parameterList = (LuaParameterListSyntax)node.ParameterList.Accept(this);

            function.ParameterList.Parameters.AddRange(parameterList.Parameters);

            if (node.Initializer != null)
            {
                var symbol      = (IMethodSymbol)semanticModel_.GetSymbolInfo(node.Initializer).Symbol;
                int ctroCounter = GetConstructorIndex(symbol);
                LuaInvocationExpressionSyntax otherCtorInvoke;
                if (node.Initializer.IsKind(SyntaxKind.ThisConstructorInitializer))
                {
                    Contract.Assert(ctroCounter != 0);
                    LuaIdentifierNameSyntax thisCtor = new LuaIdentifierNameSyntax(LuaSyntaxNode.SpecailWord(LuaSyntaxNode.Tokens.Ctor + ctroCounter));
                    otherCtorInvoke           = new LuaInvocationExpressionSyntax(thisCtor);
                    function.IsInvokeThisCtor = true;
                }
                else
                {
                    otherCtorInvoke = BuildCallBaseConstructor(symbol.ReceiverType, ctroCounter);
                }
                otherCtorInvoke.AddArgument(LuaIdentifierNameSyntax.This);
                var arguments = BuildArgumentList(symbol, symbol.Parameters, node.Initializer.ArgumentList);
                otherCtorInvoke.AddArguments(arguments);
                function.AddStatement(otherCtorInvoke);
            }
            else if (!isStatic)
            {
                var baseCtorInvoke = BuildCallBaseConstructor(ctorSymbol.ContainingType);
                if (baseCtorInvoke != null)
                {
                    function.AddStatement(baseCtorInvoke);
                }
            }

            LuaBlockSyntax block = (LuaBlockSyntax)node.Body.Accept(this);

            function.AddStatements(block.Statements);
            PopFunction();
            if (isStatic)
            {
                CurType.SetStaticCtor(function);
            }
            else
            {
                CurType.AddCtor(function, node.ParameterList.Parameters.Count == 0);
            }

            methodInfos_.Pop();
            return(function);
        }
Ejemplo n.º 13
0
 public virtual TResult Visit(LuaSyntaxNode node)
 => node is null ? default : node.Accept(this);
Ejemplo n.º 14
0
 protected virtual void DefaultVisit(LuaSyntaxNode node)
 {
 }