public override void OnReferenceExpression(ReferenceExpression node)
{
var entity = TypeSystemServices.GetEntity(node);
switch (entity.EntityType)
{
case EntityType.Local:
{
if (!AstUtil.IsIndirection(node.ParentNode))
LoadLocal((InternalLocal)entity);
else
LoadIndirectLocal((InternalLocal)entity);
break;
}
case EntityType.Parameter:
{
var param = (InternalParameter)entity;
LoadParam(param);
if (param.Parameter.IsByRef)
{
var code = GetLoadRefParamCode(param.Type);
if (code.Value == OpCodes.Ldobj.Value)
_il.Emit(code, GetSystemType(param.Type));
else
_il.Emit(code);
}
PushType(param.Type);
break;
}
case EntityType.Array:
case EntityType.Type:
{
EmitGetTypeFromHandle(GetSystemType(node));
break;
}
default:
{
NotImplemented(node, entity.ToString());
break;
}
}
}