Navigation Menu

Skip to content

Commit

Permalink
bug fix #432
Browse files Browse the repository at this point in the history
  • Loading branch information
ibond84 committed Jun 29, 2017
1 parent 379232b commit 636301a
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 3 deletions.
12 changes: 9 additions & 3 deletions Optimizer/Optimizer.cs
Expand Up @@ -16,7 +16,8 @@ public class Optimizer
private bool extended_mode = true;
private common_type_node current_type;
private bool condition_block = false;

private bool has_returns = false;

public Optimizer()
{
}
Expand Down Expand Up @@ -133,6 +134,7 @@ private void VisitMethod(common_method_node cmn)
foreach (common_in_function_function_node nested in cmn.functions_nodes_list)
VisitNestedFunction(nested);
current_function = cmn;
has_returns = false;
VisitStatement(cmn.function_code);
foreach (var_definition_node vdn2 in cmn.var_definition_nodes_list)
{
Expand Down Expand Up @@ -250,6 +252,7 @@ private void VisitCommonNamespaceFunctionNode(common_namespace_function_node cnf
foreach (common_in_function_function_node nested in cnfn.functions_nodes_list)
VisitNestedFunction(nested);
current_function = cnfn;
has_returns = false;
VisitStatement(cnfn.function_code);
foreach (var_definition_node vdn2 in cnfn.var_definition_nodes_list)
{
Expand Down Expand Up @@ -318,6 +321,7 @@ private void VisitNestedFunction(common_in_function_function_node cnfn)
foreach (common_in_function_function_node nested in cnfn.functions_nodes_list)
VisitNestedFunction(nested);
current_function = cnfn;
has_returns = false;
VisitStatement(cnfn.function_code);
foreach (var_definition_node vdn2 in cnfn.var_definition_nodes_list)
{
Expand Down Expand Up @@ -431,13 +435,13 @@ private RetVal GetConstantValue(expression_node en)

private void CheckInfiniteRecursion(common_namespace_function_call cnfc)
{
if (!condition_block && cnfc.function_node == current_function)
if (!condition_block && !has_returns && cnfc.function_node == current_function)
warns.Add(new InfiniteRecursion(cnfc.location));
}

private void CheckInfiniteRecursion(common_static_method_call cnfc)
{
if (!condition_block && cnfc.function_node == current_function)
if (!condition_block && !has_returns && cnfc.function_node == current_function)
warns.Add(new InfiniteRecursion(cnfc.location));
}

Expand Down Expand Up @@ -606,6 +610,7 @@ private void VisitThrow(throw_statement_node stmt)
{
VisitExpression(stmt.excpetion);
is_break_stmt = true;
has_returns = true;
}

private void VisitTryBlock(try_block stmt)
Expand Down Expand Up @@ -782,6 +787,7 @@ private void VisitExpression(expression_node en)
{
case semantic_node_type.exit_procedure:
/*ничего писать не надо*/
has_returns = true;
break;
case semantic_node_type.typeof_operator:
//VisitTypeOfOperator((typeof_operator)en);
Expand Down
6 changes: 6 additions & 0 deletions _BuildDebug.bat
@@ -0,0 +1,6 @@
if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\msbuild.exe" (
"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\msbuild.exe" PascalABCNET.sln
) else (
"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe" PascalABCNET.sln
)
@IF %ERRORLEVEL% NEQ 0 PAUSE

0 comments on commit 636301a

Please sign in to comment.