Exemple #1
0
        public ActionResult Factores()
        {
            if (Session["user"] == null)
            {
                return(RedirectToAction("Login"));
            }

            FACTOR        factor   = new FACTOR();
            List <FACTOR> factores = factor.getFactores();

            return(View(factores));
        }
Exemple #2
0
        public ActionResult Propuesta()
        {
            if (Session["user"] == null)
            {
                return(RedirectToAction("Login"));
            }

            FACTOR        factor   = new FACTOR();
            List <FACTOR> factores = factor.getFactores();

            ViewBag.factores = factores;

            PLAZO        plazo  = new PLAZO();
            List <PLAZO> plazos = plazo.getPrioridades();

            ViewBag.prioridades = plazos;

            return(View(new PROYECTO()));
        }
        /// <summary>
        /// Factor ::= Number 
        ///          | Identifier ["." Identifier" | "[" Expression "]" ] 
        ///          | "null" 
        ///          | "new" Identifier "(" ")" 
        ///          | "new" ("int" | Identifier) "[" Expression "]".
        /// </summary>
        private void generateFactor( ILGenerator il, FACTOR factor )
        {
            if ( factor is NUMBER )
            {
                int value = Int32.Parse((factor as NUMBER).number);
                il.Emit(OpCodes.Ldc_I4,value);
            }
            else if ( factor is NULL )
            {
                il.Emit(OpCodes.Ldnull);
            }
            else if ( factor is SELECTOR )
            {
                SELECTOR selector = factor as SELECTOR;
                if ( selector.field is FIELD )
                {
                    // Access to the member of an object

                    // 1. Loading the object itself
                    FIELD obj = selector.field as FIELD;
                    if      ( obj.isLocal )
                        il.Emit(OpCodes.Ldloc,obj.number);
                    else if ( obj.isParameter )
                    {
                        int off = currentMethod.isStatic ? 0 : 1;
                        il.Emit(OpCodes.Ldarg,obj.number+off);
                    }
                    else if ( obj.isMember )
                    {
                        if ( obj.isStatic )
                            il.Emit(OpCodes.Ldsfld,classes[currentClass.name].fieldBuilders[obj.name]);
                        else
                        {
                            il.Emit(OpCodes.Ldarg_0);
                            il.Emit(OpCodes.Ldfld,classes[currentClass.name].fieldBuilders[obj.name]);
                        }
                    }
                    // 2. Taking the member of the object
                    FIELD member = selector.member as FIELD;
                    if ( member == null )
                        errors.issue(25);
                    else
                        il.Emit(OpCodes.Ldfld,classes[currentClass.name].fieldBuilders[member.name]);
                }
                else if ( selector.field is CLASS )
                {
                    // Access to the static class member
                    il.Emit(OpCodes.Ldsfld,classes[currentClass.name].fieldBuilders[selector.sname]);
                }
            }
            else if ( factor is ARRAY_ELEM )
            {
                ARRAY_ELEM arrayElem = factor as ARRAY_ELEM;
                FIELD array = arrayElem.field as FIELD;
                if (array == null) errors.issue(30);

                // Loading the array
                if  ( array.isLocal )
                    il.Emit(OpCodes.Ldloc_S, array.number);
                else if ( array.isParameter )
                {
                    int off = currentMethod.isStatic ? 0 : 1;
                    il.Emit(OpCodes.Ldarg_S, array.number+off);
                }
                else if ( array.isMember )
                {
                    FieldBuilder fb = classes[currentClass.name].fieldBuilders[array.name];
                    if ( array.isStatic ) il.Emit(OpCodes.Ldsfld, fb);
                    else                { il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldfld,fb); }
                }
                generateExpression(il,arrayElem.number);
                TYPE elemType = array.type;
                if ( elemType.classRef == null ) il.Emit(OpCodes.Ldelem,typeof(int));
                else                             il.Emit(OpCodes.Ldelem,classes[elemType.classRef.name].typeBuilder);
            }
            else if ( factor is NAME ) // a simple name
            {
                FIELD field = (factor as NAME).field as FIELD;
                if      ( field.isLocal )
                    il.Emit(OpCodes.Ldloc_S,field.number);
                else if ( field.isParameter )
                {
                    int off = currentMethod.isStatic ? 0 : 1;
                    il.Emit(OpCodes.Ldarg_S,field.number+off);
                }
                else if ( field.isMember )
                {
                    FieldBuilder fb = classes[currentClass.name].fieldBuilders[field.name];
                    if ( field.isStatic ) il.Emit(OpCodes.Ldsfld,fb);
                    else                { il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldfld,fb); }
                }
            }
            else if ( factor is NEW_ARRAY )
            {
                NEW_ARRAY array = factor as NEW_ARRAY;
                generateExpression(il, array.size);
                if ( array.classRef == null ) // new int[expr]
                    il.Emit(OpCodes.Newarr,typeof(int));
                else // new obj[expr]
                {
                    Type arrType = classes[array.classRef.name].typeBuilder.MakeArrayType();
                    il.Emit(OpCodes.Newarr,arrType);
                }
            }
            else if ( factor is NEW )
            {
                NEW neww = factor as NEW;
                if ( neww.classRef == null ) // new int
                {
                    il.Emit(OpCodes.Ldc_I4_0);
                }
                else // new C
                {
                 // TypeBuilder typeBuilder = classes[neww.classRef.name].typeBuilder;
                    ConstructorBuilder cb = classes[neww.classRef.name].ctorBuilder;
                    il.Emit(OpCodes.Newobj,cb);
                }
            }
        }