public virtual void visit(ISimpleArrayIndexingNode value)
 {
 }
Пример #2
0
        private void AddrOfArrayIndexing(ISimpleArrayIndexingNode value)
        {
            bool temp_is_addr = is_addr;
            bool temp_is_dot_expr = is_dot_expr;
            is_addr = false;
            is_dot_expr = false;
            var indices = value.indices;
            TypeInfo ti = helper.GetTypeReference(value.array.type);
            value.array.visit(this);
            il.Emit(OpCodes.Dup);
            FixPointer();
            //посещаем индекс
            //value.index.visit(this);
            ISimpleArrayNode arr_type = value.array.type as ISimpleArrayNode;
            TypeInfo elem_ti = null;
            Type elem_type = null;
            if (arr_type != null)
            {
                elem_ti = helper.GetTypeReference(arr_type.element_type);
                elem_type = elem_ti.tp;
            }
            else
                elem_type = ti.tp.GetElementType();
            MethodInfo get_meth = null;
            MethodInfo addr_meth = null;
            if (indices == null)
            {
                value.index.visit(this);
            }
            else
            {
                if (value.array.type is ICompiledTypeNode)
                {
                    addr_meth = ti.tp.GetMethod("Address");
                }
                else
                {
                    List<Type> lst = new List<Type>();
                    for (int i = 0; i < indices.Length; i++)
                        lst.Add(TypeFactory.Int32Type);
                    addr_meth = mb.GetArrayMethod(ti.tp, "Address", CallingConventions.HasThis, elem_type.MakeByRefType(), lst.ToArray());
                }
                for (int i = 0; i < indices.Length; i++)
                    indices[i].visit(this);
            }

            if (value.indices == null)
                il.Emit(OpCodes.Ldelema, elem_type);
            else
                il.Emit(OpCodes.Call, addr_meth);
            is_addr = temp_is_addr;
            is_dot_expr = temp_is_dot_expr;
        }
Пример #3
0
		public virtual void visit(ISimpleArrayIndexingNode value)
		{
			
		}
Пример #4
0
 public void visit(ISimpleArrayIndexingNode value)
 {
     string s = value.GetType().Name + ".";
     //prepare_node(value.array, s + "array");
     //prepare_node(value.index, s + "index");
     //prepare_node(value.type, s + "type");
 }
Пример #5
0
 public void visit(ISimpleArrayIndexingNode value)
 {
     value.index.visit(this);
     value.array.visit(this);
     ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeSimpleArrInd("array_indexing", value));
 }