public override void SurroundWith(Environment environment) { base.SurroundWith(environment); var jumpLabel = Env.FindJumpLabelByName(_labelName ?? ""); if (null == jumpLabel) { Errors.AddAndThrow($"{MetaData.GetErrorHeader()}cannot return outside a lambda"); } else { JumpLabel = jumpLabel; JumpLabel.StatementsUsingThis.Add(this); } }
public override void SurroundWith(Environment environment) { // base.SurroundWith(environment); Env = environment; Expression.SurroundWith(Env); if (null != ReturnLabel) { return; } var returnLabel = Env.FindReturnLabelByName(_labelName ?? ""); if (null == returnLabel) { Errors.AddAndThrow($"{MetaData.GetErrorHeader()}cannot return outside a lambda"); } else { ReturnLabel = returnLabel; ReturnLabel.StatementsUsingThis.Add(this); } if (Expression is AtomicExpression) { return; } var variableName = $"genRet{(ulong) GetHashCode()}"; ConvertedVariableDeclaration = new VariableDeclaration(MetaData, variableName, Expression, type: Expression.GetExpressionType()); ConvertedReturnStatement = new ReturnStatement(MetaData, new VariableExpression(MetaData, variableName), _labelName) { ReturnLabel = ReturnLabel }; ConvertedStatementList = new StatementList(MetaData, ConvertedVariableDeclaration, ConvertedReturnStatement); }