internal MSA.Expression/*!*/ Return(MSA.Expression/*!*/ expression) {
MSA.LabelTarget returnLabel = ReturnLabel;
if (returnLabel.Type != typeof(void) && expression.Type == typeof(void)) {
expression = Ast.Block(expression, AstUtils.Constant(null, typeof(object)));
} else if (returnLabel.Type != expression.Type) {
if (!CanAssign(returnLabel.Type, expression.Type)) {
// Add conversion step to the AST
expression = Ast.Convert(expression, returnLabel.Type);
}
}
return Ast.Return(returnLabel, expression);
}