protected override List <AssemblyElement> VisitVarArrayDeclaration(VarArrayDeclarationNode node)
        {
            List <AssemblyElement> instructions = new List <AssemblyElement>();

            if (node.ElementNodes != null)
            {
                int index = 0;
                foreach (ExpressionNode elementNode in node.ElementNodes)
                {
                    instructions.AddRange(Visit(elementNode));
                    if (index > 0)
                    {
                        instructions.Add(new PushArrayVar(node.Symbol, index));
                    }
                    else
                    {
                        instructions.Add(new PushVar(node.Symbol));
                    }
                    instructions.Add(GetAssignInstruction(node.Symbol));
                    index++;
                }
            }


            return(instructions);
        }
        protected override void VisitVarArrayDeclaration(VarArrayDeclarationNode node)
        {
            if (node.ElementNodes != null)
            {
                ASTNode ancestorNode = node.GetFirstSignificantAncestorNode();
                switch (ancestorNode)
                {
                case PrototypeDefinitionNode _:
                case InstanceDefinitionNode _:
                case FunctionDefinitionNode _:
                    break;

                default:
                    node.Annotations.Add(new VarAssignmentNotAllowedHereError(node.Location));
                    break;
                }
            }
            //base.VisitVarArrayDeclaration(node);
        }