public void ArrayAccessExpression(CParser.ArrayAccessExpression ArrayAccessExpression)
{
var LeftExpression = ArrayAccessExpression.Left;
var LeftCType = (LeftExpression.GetCachedCType(this) as CBasePointerType);
var LeftType = ConvertCTypeToType(LeftCType);
var ElementCType = LeftCType.ElementCType;
var ElementType = ConvertCTypeToType(ElementCType);
var IndexExpression = ArrayAccessExpression.Index;
DoGenerateAddress(false, () =>
{
Traverse(LeftExpression);
});
DoGenerateAddress(false, () =>
{
Traverse(new CParser.BinaryExpression(IndexExpression, "*", new CParser.SizeofTypeExpression(ElementCType)));
//Traverse(IndexExpression);
});
//SafeILGenerator.Sizeof(ElementType);
//SafeILGenerator.BinaryOperation(SafeBinaryOperator.MultiplySigned);
SafeILGenerator.BinaryOperation(SafeBinaryOperator.AdditionSigned);
// For fixed array types, get always the address?
if (ElementCType is CArrayType && (ElementCType as CArrayType).Size != 0)
{
}
else if (!GenerateAddress)
{
SafeILGenerator.LoadIndirect(ConvertCTypeToType(ElementCType));
}
}