public static IEnumerable <SyntaxNode> BuildReturn(this RoslynEcsTranslator translator,
                                                    ReturnNodeModel returnModel, IPortModel portModel)
 {
     if (translator.context is CoroutineContext coroutineContext)
     {
         if (returnModel.ParentStackModel.OwningFunctionModel is CoroutineStackModel)
         {
             yield return(ReturnStatement(LiteralExpression(SyntaxKind.TrueLiteralExpression)));
         }
         else
         {
             coroutineContext.SkipStateBuilding = true;
             yield return(ReturnStatement(LiteralExpression(SyntaxKind.FalseLiteralExpression)));
         }
     }
     else
     {
         if (returnModel.InputPort == null)
         {
             yield return(ReturnStatement());
         }
         else
         {
             yield return(ReturnStatement(
                              translator.BuildPort(returnModel.InputPort).FirstOrDefault() as ExpressionSyntax));
         }
     }
 }
        public IEnumerator MovingAStackMovesStackedNodeConnectedFloatingNode([Values] TestingMode mode)
        {
            var                     stackModel0   = GraphModel.CreateStack(string.Empty, new Vector2(-100, -100));
            ReturnNodeModel         ret           = stackModel0.CreateStackedNode <ReturnNodeModel>("return");
            BinaryOperatorNodeModel operatorModel = GraphModel.CreateBinaryOperatorNode(BinaryOperatorKind.Add, new Vector2(-100, -100));
            IConstantNodeModel      intModel      = GraphModel.CreateConstantNode("int", typeof(int).GenerateTypeHandle(GraphModel.Stencil), new Vector2(-150, -100));

            GraphModel.CreateEdge(ret.InputPort, operatorModel.OutputPort);
            GraphModel.CreateEdge(operatorModel.InputPortA, intModel.OutputPort);

            yield return(TestMove(mode,
                                  mouseDelta: new Vector2(20, 10),
                                  movedNodes: new INodeModel[] { stackModel0 },
                                  expectedMovedDependencies: new INodeModel[] { operatorModel, intModel }
                                  ));
        }
 public static IEnumerable <SyntaxNode> BuildReturn(this RoslynTranslator translator, ReturnNodeModel returnModel, IPortModel portModel)
 {
     if (returnModel.InputPort == null)
     {
         yield return(SyntaxFactory.ReturnStatement());
     }
     else
     {
         yield return(SyntaxFactory.ReturnStatement(
                          translator.BuildPort(returnModel.InputPort).FirstOrDefault() as ExpressionSyntax));
     }
 }
        public static IEnumerable <SyntaxNode> BuildReturn(this RoslynEcsTranslator translator, ReturnNodeModel returnModel, IPortModel portModel)
        {
            // TODO Implement Return statement in coroutine
            if (translator.context is CoroutineContext)
            {
                translator.AddError(returnModel, "Return node isn't allowed in Coroutine (e.g. Wait) execution stack for now. This feature is coming in a further release");
                yield break;
            }

            if (returnModel.InputPort == null)
            {
                yield return(ReturnStatement());
            }
            else
            {
                yield return(ReturnStatement(
                                 translator.BuildPort(returnModel.InputPort).FirstOrDefault() as ExpressionSyntax));
            }
        }
 public static IEnumerable <SyntaxNode> BuildReturn(this RoslynTranslator translator, ReturnNodeModel returnModel, IPortModel portModel)
 {
     if (returnModel.ParentStackModel.OwningFunctionModel.ReturnType == typeof(void).GenerateTypeHandle(translator.Stencil))
     {
         yield return(SyntaxFactory.ReturnStatement());
     }
     else
     {
         yield return(SyntaxFactory.ReturnStatement(
                          translator.BuildPort(returnModel.InputPort).FirstOrDefault() as ExpressionSyntax));
     }
 }