public void TestConvenienceExpandoQueries()
		{
			// we have two objects with parameters in them
			var o = new { Id = 1, Text = "foo" };
			var p = new { Id = 2, Guest = "boo" };

			var list = _connection.QuerySql("SELECT ID=CONVERT (int, @ID), Text=@Text, Guest=@Guest", o.Expand(p));
			FastExpando f = list[0];
			dynamic d = f;

			Assert.AreEqual(3, f.Count());
			Assert.AreEqual(2, d.ID);
			Assert.AreEqual("foo", d.Text);
			Assert.AreEqual("boo", d.GUEST);
		}
示例#2
0
        public void Vector_Expand_By_Vector()
        {
            Vector v1 = new[] { 1, 2, 3 };
            Vector v2 = new[] { 4, 5, 6 };
            Vector v3 = new[] { 7, 8, 9 };

            Vector sl = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            Vector an = v1
                        .Expand(v2)
                        .Expand(v3);

            Assert.Equal(sl, an);
        }
示例#3
0
        public void Vector_Expand_By_N()
        {
            Vector v1 = new[] { 1, 2, 3 };

            Vector sl = new[] { 1, 2, 3, 0, 0, 0 };
            Vector an = v1.Expand(3);

            Assert.Equal(sl, an);
        }
        //void Main() int x,i; {val = new Table;....}
        /* MethodDecl = ( Type | "void" ) ident "(" [ FormPars ] ")"
         *              { VarDecl } Block .
         */
        // First(MethodDecl)={ident, void}; Follow(MethodDecl)={"}"}
        static void MethodDecl(System.Windows.Forms.TreeNode padre)
        {
            /////// padre = "MethodDeclsOpc"
            System.Windows.Forms.TreeNode hijo1 = new System.Windows.Forms.TreeNode("MethodDecl"); //luego hay que sacarlo y modificar la rama del ident
            //padre.Nodes.Add(hijo1);
            ////////
            //MessageBoxCon3Preg();
            System.Windows.Forms.TreeNode methodDecl = new System.Windows.Forms.TreeNode("MethodDecl"); //cuelga ESTE NODO DESPUES DE pintar el void

            Struct type = new Struct(Struct.Kinds.None); //Pone por defecto void
            if (la == Token.VOID || la == Token.IDENT)
            {
            if (la == Token.VOID)
            {

                Check(Token.VOID); //token = void laToken = Main
                Code.coloreaConRojo("token");
                //Code.coloreaConRojo(true);  //pinta void //incluye if (muestraProducciones) MessageBoxCon3Preg();
                //Code.cargaProgDeLaGram("MethodDeclsOpc = MethodDecl MethodDeclsOpc.");

                //Una vez que encuentra "void", infiere que debe usar la opcion: methodDecl.... etc
                padre.Nodes.Add(methodDecl);
                padre.Expand();
                ////////
                if (muestraProducciones) MessageBoxCon3Preg();

                Code.seleccLaProdEnLaGram(8);  //MethodDecl = TypeOrVoid  ident "(" PossFormPars ")" Block.
                if (muestraProducciones) MessageBoxCon3Preg();

                System.Windows.Forms.TreeNode typeOrVoid = new System.Windows.Forms.TreeNode("TypeOrVoid"); //ya ha pintado el void
                methodDecl.Nodes.Add(typeOrVoid);
                methodDecl.Expand();
                if (muestraProducciones) MessageBoxCon3Preg();

                //Code.cargaProgDeLaGram("MethodDecl = TypeOrVoid ident '(' Pars ')' PosDeclars Block.");

                Code.seleccLaProdEnLaGram(9);  // 9.TypeOrVoid  = Type | "void“.
                if (muestraProducciones) MessageBoxCon3Preg();

                //como ya ha verificado "void",

                typeOrVoid.Nodes.Add("'void'");
                typeOrVoid.Expand();
                if (muestraProducciones) MessageBoxCon3Preg();

                type = Tab.noType; //  para void
            }
            else
                if (la == Token.IDENT)
                {
                    Type(out type);  //  token = UnTipo laToken = Main
                    Code.cargaProgDeLaGram("TypeOrVoid  = Type.");
                    Code.coloreaConRojo("token");
                    //Code.coloreaConRojo(true);
                    ///////////
                    //hay que cambiar hijo1 por methodDecl, e hijo2 por...
                    System.Windows.Forms.TreeNode hijo2 = new System.Windows.Forms.TreeNode("TypeOrVoid = Type");
                    hijo1.Nodes.Add(hijo2);
                    hijo2.Nodes.Add("Type= "+type.kind.ToString());
                    //////////
                }
            ///////
            methodDecl.Nodes.Add("ident");
            if (muestraProducciones) MessageBoxCon3Preg();

            Check(Token.IDENT);  //Main por ej.  //token = Main, laToken = "("
            Code.coloreaConRojo("token");
            //Code.coloreaConRojo(true);

            //hijo1.Nodes.Add("ident");
            //////
            curMethod = Tab.Insert(Symbol.Kinds.Meth, token.str, type);//inserta void Main
            // que pasa si hubieran parametros?
            Tab.OpenScope(curMethod);
            // tengo que insertar un método en la tabla de símbolo
            // todos los parámetros son locales
            //tipoSimbolo = Symbol.Kinds.Local;
            ////
            methodDecl.Nodes.Add("'('");
            if (muestraProducciones) MessageBoxCon3Preg();
            ////

            Check(Token.LPAR);  //Si Main() => no tiene FormPars
            Code.coloreaConRojo("token");
            //Code.coloreaConRojo(true);

            /////////
            System.Windows.Forms.TreeNode pars = new System.Windows.Forms.TreeNode("Pars");
            methodDecl.Nodes.Add(pars);
            if (muestraProducciones) MessageBoxCon3Preg();

            Code.seleccLaProdEnLaGram(10);  //10.Pars = . | FormPar CommaFormParsOpc.
            if (muestraProducciones) MessageBoxCon3Preg();

            if (la == Token.IDENT) //
            {

                FormPars(pars);  //Aqui hay que crear los symbolos para los args

                methodDecl.Nodes.Add("')'");
                if (muestraProducciones) MessageBoxCon3Preg();

                Check(Token.RPAR);
                Code.coloreaConRojo("token");
                //Code.coloreaConRojo(true);  //pinta el ")"
            }
            //y colgarlos de curMethod.locals
            else
            {
                //infiere que no hay params => 1) debe venir un ")". 2) La pocion de la produccion es "."
                //Code.cargaProgDeLaGram("Pars = .");
                Check(Token.RPAR);
                Code.coloreaConRojo("token");
                //Code.coloreaConRojo(true);  //pinta el ")"

                pars.Nodes.Add(".");
                pars.Expand();
                if (muestraProducciones) MessageBoxCon3Preg();

                methodDecl.Nodes.Add("')'");
                if (muestraProducciones) MessageBoxCon3Preg();
            }

            System.Windows.Forms.TreeNode posDeclars = new System.Windows.Forms.TreeNode("PosDeclars");
            methodDecl.Nodes.Add(posDeclars);
            if (muestraProducciones) MessageBoxCon3Preg();

            Code.seleccLaProdEnLaGram(1);  //1.Declarations =  .| Declaration Declarations.
            if (muestraProducciones) MessageBoxCon3Preg();

            //Code.cargaProgDeLaGram("PosDeclars =  .| Declaration PosDeclars.");
            ////////////
            System.Windows.Forms.TreeNode hijo22 = new System.Windows.Forms.TreeNode("PosDeclars");
            hijo1.Nodes.Add(hijo22);

            bool banderita=false;
            ///////////
            Code.CreateMetadata(curMethod);  //genera il
            //Declaraciones  por ahora solo decl de var, luego habria q agregar const y clases
            while (la != Token.LBRACE && la != Token.EOF)
                //void Main()==> int x,i; {val = new Table;....}
            {
                //Code.cargaProgDeLaGram("Block =	'{'  StatementsOpc '}'.");

                if (la == Token.IDENT)
                {
                    banderita = true;
                    Code.coloreaConRojo("latoken");
                    //Code.coloreaConRojo(false); //colorea "int"  en int i;

                    //Infiere la 2° opcion de PosDeclars   aaaaaaaa
                    System.Windows.Forms.TreeNode declaration = new System.Windows.Forms.TreeNode("Declaration");
                    posDeclars.Nodes.Add(declaration);
                    posDeclars.Expand();
                    if (muestraProducciones) MessageBoxCon3Preg();

                    //Code.cargaProgDeLaGram("PosDeclars = Declaration PosDeclars.");
                    Code.seleccLaProdEnLaGram(2);
                    if (muestraProducciones) MessageBoxCon3Preg();
                    //Code.cargaProgDeLaGram("Declaration = ConstDecl | VarDecl | ClassDecl.");

                    //Code.seleccLaProdEnLaGram(2);
                    Code.cargaProgDeLaGram("Declaration =  VarDecl.");
                    ////////
                    //Puesto q leyò un ident, infiere  q la opcion de la produccion es "VarDecl"

                    System.Windows.Forms.TreeNode varDecl = new System.Windows.Forms.TreeNode("VarDecl");
                    declaration.Nodes.Add(varDecl);
                    declaration.Expand();
                    if (muestraProducciones) MessageBoxCon3Preg();

                    ///////////
                    VardDecl(Symbol.Kinds.Local, varDecl); // int x,i; en MethodDecl()  con int ya consumido
                    //cantVarLocales++;
                    ///////

                }
                else { token = laToken; Errors.Error("espero una declaracion de variable"); }
            }
            Code.seleccLaProdEnLaGram(1);
            Code.coloreaConRojo("latoken");
            //Code.coloreaConRojo(false); "{"
            if (banderita == false)
            {
                Code.cargaProgDeLaGram("PosDeclars =  .");
                hijo22.Nodes.Add("PosDeclars =  .");
            }
            //if (muestraProducciones) MessageBoxCon3Preg();

            if (cantVarLocales > 0)
            {
                string instrParaVarsLocs = ".locals init(int32 V_0";

                for (int i = 1; i < cantVarLocales; i++)
                {
                    instrParaVarsLocs = instrParaVarsLocs + "," + "\n          int32 V_" + i.ToString(); // +"  ";
                }
                instrParaVarsLocs = instrParaVarsLocs + ")";

                Code.cargaInstr(instrParaVarsLocs);
            }
            //////////////////////////////////////////////////////////////////////////////////////////////////
            //////////////////////////////////////////////////////////////////////////////////////////////////
              Block(hijo1);  //Bloque dentro de MethodDecl()
            //////////////////////////////////////////////////////////////////////////////////////////////////
            //////////////////////////////////////////////////////////////////////////////////////////////////
            curMethod.nArgs = Tab.topScope.nArgs;
            curMethod.nLocs = Tab.topScope.nLocs;
            curMethod.locals = Tab.topScope.locals;
            Tab.CloseScope();
            Tab.mostrarTab();

            Code.il.Emit(Code.RET);  //si lo saco se clava en el InvokeMember

            Parser.nroDeInstrCorriente++;
            Parser.cil[Parser.nroDeInstrCorriente].accionInstr = Parser.AccionInstr.ret;
            Code.cargaInstr("ret");
            }
        }
 /// <summary>
 /// Expands the tree node.
 /// </summary>
 /// <param name="parentNode">The Expand method expands the current TreeNode down to the next level of nodes.</param>
 public virtual void ExpandNode(System.Windows.Forms.TreeNode parentNode)
 {
     if (_treeView.InvokeRequired)
     {
         _treeView.Invoke(new ExpandNodeDelegate(ExpandNode), new object[] { parentNode });
         return;
     }
     System.Diagnostics.Debug.Assert(parentNode != null);
     parentNode.Expand();
 }
            private System.Windows.Forms.TreeNode Add(System.Windows.Forms.TreeNode parent)
            {
                string strText = "Node" + NextNode++.ToString();
                System.Windows.Forms.TreeNode newnode;
                Microsoft.Web.UI.WebControls.TreeNodeCollection col;
                Microsoft.Web.UI.WebControls.TreeNode webNode;

                if (parent == null)
                {
                    newnode = tvNodes.Nodes.Add(strText);
                    col = tvWebNodes.Nodes;
                }
                else
                {
                    newnode = parent.Nodes.Add(strText);
                    parent.Expand();
                    col = ((Microsoft.Web.UI.WebControls.TreeNode)parent.Tag).Nodes;
                }

                webNode = new Microsoft.Web.UI.WebControls.TreeNode();
                webNode.Text = strText;
                col.Add(webNode);
                newnode.Tag = webNode;

                btnApply.Enabled = true;

                return newnode;
            }