Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
        }