Beispiel #1
0
 public ALittleScriptAllExprElement GetAllExpr()
 {
     if (m_flag_AllExpr)
     {
         return(m_cache_AllExpr);
     }
     m_flag_AllExpr = true;
     foreach (var child in m_childs)
     {
         if (child is ALittleScriptAllExprElement)
         {
             m_cache_AllExpr = child as ALittleScriptAllExprElement;
             break;
         }
     }
     return(m_cache_AllExpr);
 }
Beispiel #2
0
        // 检查表达式是否有return
        public static ABnfGuessError CheckAllExpr(List <ABnfGuess> return_list, ALittleScriptAllExprElement all_expr, out bool result)
        {
            result = false;
            if (all_expr.GetIfExpr() != null)
            {
                var if_expr      = all_expr.GetIfExpr();
                var sub_all_expr = if_expr.GetAllExpr();
                var if_body      = if_expr.GetIfBody();
                if (sub_all_expr != null)
                {
                    var error = CheckAllExpr(return_list, sub_all_expr, out bool sub_result);
                    if (error != null)
                    {
                        return(error);
                    }
                    if (!sub_result)
                    {
                        return(null);
                    }
                }
                else if (if_body != null)
                {
                    var error = CheckAllExprList(return_list, if_body.GetAllExprList(), out bool sub_result);
                    if (error != null)
                    {
                        return(error);
                    }
                    if (!sub_result)
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }

                var else_if_expr_list = if_expr.GetElseIfExprList();
                foreach (var else_if_expr in else_if_expr_list)
                {
                    sub_all_expr = else_if_expr.GetAllExpr();
                    var else_if_body = else_if_expr.GetElseIfBody();
                    if (sub_all_expr != null)
                    {
                        var error = CheckAllExpr(return_list, sub_all_expr, out bool sub_result);
                        if (error != null)
                        {
                            return(error);
                        }
                        if (!sub_result)
                        {
                            return(null);
                        }
                    }
                    else if (else_if_body != null)
                    {
                        var error = CheckAllExprList(return_list, else_if_body.GetAllExprList(), out bool sub_result);
                        if (error != null)
                        {
                            return(error);
                        }
                        if (!sub_result)
                        {
                            return(null);
                        }
                    }
                    else
                    {
                        return(null);
                    }
                }

                var else_expr = if_expr.GetElseExpr();
                if (else_expr == null)
                {
                    return(null);
                }

                sub_all_expr = else_expr.GetAllExpr();
                var else_body = else_expr.GetElseBody();
                if (sub_all_expr != null)
                {
                    return(CheckAllExpr(return_list, sub_all_expr, out result));
                }
                else if (else_body != null)
                {
                    return(CheckAllExprList(return_list, else_body.GetAllExprList(), out result));
                }
                else
                {
                    return(null);
                }
            }

/*
 *          if (all_expr.GetForExpr() != null)
 *          {
 *              var for_expr = all_expr.GetForExpr();
 *              var sub_all_expr = for_expr.GetAllExpr();
 *              var for_body = for_expr.GetForBody();
 *              if (sub_all_expr != null)
 *                  return CheckAllExpr(return_list, sub_all_expr, out result);
 *              else if (for_body != null)
 *                  return CheckAllExprList(return_list, for_body.GetAllExprList(), out result);
 *              else
 *                  return null;
 *          }
 *
 *          if (all_expr.GetWhileExpr() != null)
 *          {
 *              var while_expr = all_expr.GetWhileExpr();
 *              var sub_all_expr = while_expr.GetAllExpr();
 *              var while_body = while_expr.GetWhileBody();
 *              if (sub_all_expr != null)
 *                  return CheckAllExpr(return_list, sub_all_expr, out result);
 *              else if (while_body != null)
 *                  return CheckAllExprList(return_list, while_body.GetAllExprList(), out result);
 *              else
 *                  return null;
 *          }
 */
            if (all_expr.GetDoWhileExpr() != null)
            {
                var do_while_expr = all_expr.GetDoWhileExpr();
                var do_while_body = do_while_expr.GetDoWhileBody();
                if (do_while_body != null)
                {
                    return(CheckAllExprList(return_list, do_while_body.GetAllExprList(), out result));
                }
                else
                {
                    return(null);
                }
            }

            if (all_expr.GetReturnExpr() != null)
            {
                result = true;
                // 这里检查return
                return(null);
            }

            if (all_expr.GetWrapExpr() != null)
            {
                var wrap_expr = all_expr.GetWrapExpr();
                return(CheckAllExprList(return_list, wrap_expr.GetAllExprList(), out result));
            }

            if (all_expr.GetThrowExpr() != null)
            {
                result = true;
                return(null);
            }

            return(null);
        }