private MSA.Expression /*!*/ TransformRead(AstGenerator /*!*/ gen, int /*!*/ opKind)
{
MSA.Expression transformedName = TransformName(gen);
MSA.Expression transformedQualifier;
switch (TransformQualifier(gen, out transformedQualifier))
{
case StaticScopeKind.Global:
return((opKind == OpGet ? Methods.GetGlobalConstant : Methods.IsDefinedGlobalConstant).
OpCall(gen.CurrentScopeVariable, transformedName));
case StaticScopeKind.EnclosingModule:
return((opKind == OpGet ? Methods.GetUnqualifiedConstant : Methods.IsDefinedUnqualifiedConstant).
OpCall(gen.CurrentScopeVariable, transformedName));
case StaticScopeKind.Explicit:
if (opKind == OpGet)
{
return(Methods.GetQualifiedConstant.OpCall(AstFactory.Box(transformedQualifier), gen.CurrentScopeVariable, transformedName));
}
else
{
return(gen.TryCatchAny(
Methods.IsDefinedQualifiedConstant.OpCall(AstFactory.Box(transformedQualifier), gen.CurrentScopeVariable, transformedName),
Ast.Constant(false)
));
}
}
throw Assert.Unreachable;
}