public override void GenCode(ICodeGenerator cg)
        {
            var       gen       = cg.GetGenerator;
            ArrayType arrayType = (LValue.ReturnType.PrimitiveType as ArrayType);

            LValue.GenCode(cg);
            IndexInstruction.GenCode(cg);
            gen.Emit(OpCodes.Ldelem, arrayType.BaseType.ILType);
        }
        public void AssignValue(ICodeGenerator cg)
        {
            var          gen       = cg.GetGenerator;
            ArrayType    arrayType = (LValue.ReturnType.PrimitiveType as ArrayType);
            LocalBuilder aux       = gen.DeclareLocal(arrayType.BaseType.ILType);

            gen.Emit(OpCodes.Stloc, aux);
            LValue.GenCode(cg);
            IndexInstruction.GenCode(cg);
            gen.Emit(OpCodes.Ldloc, aux);
            gen.Emit(OpCodes.Stelem, arrayType.BaseType.ILType);
        }
 public override bool CheckSemantic(List <Error> errors, SymbolTable symbolTable)
 {
     if (base.CheckSemantic(errors, symbolTable) & IndexInstruction.CheckSemantic(errors, symbolTable))
     {
         TypeExpression resultType = LValue.ReturnType.SubscriptAt(IndexInstruction.ReturnType);
         if (resultType is ErrorType)
         {
             errors.Add(new Error((resultType as ErrorType).Message, Line, CharPositionInLine));
         }
         else
         {
             ReturnType = resultType;
             _isLValue  = (LValue is IAssignable);
             Scope      = symbolTable.TopScope.Clone();
             return(true);
         }
     }
     ReturnType = TypeExpression.ErrorType;
     return(false);
 }