internal override MSA.Expression/*!*/ MakeDefinitionExpression(AstGenerator/*!*/ gen) {
MSA.Expression transformedQualifier;
MSA.Expression name = QualifiedName.TransformName(gen);
MSA.Expression transformedSuper = (_superClass != null) ? AstUtils.Box(_superClass.TransformRead(gen)) : AstUtils.Constant(null);
switch (QualifiedName.TransformQualifier(gen, out transformedQualifier)) {
case StaticScopeKind.Global:
return Methods.DefineGlobalClass.OpCall(gen.CurrentScopeVariable, name, transformedSuper);
case StaticScopeKind.EnclosingModule:
return Methods.DefineNestedClass.OpCall(gen.CurrentScopeVariable, name, transformedSuper);
case StaticScopeKind.Explicit:
return Methods.DefineClass.OpCall(gen.CurrentScopeVariable, transformedQualifier, name, transformedSuper);
}
throw Assert.Unreachable;
}
}