lysis-java icon indicating copy to clipboard operation
lysis-java copied to clipboard

Missing braces around else statements in nested if-else decompilation

Open devilesk opened this issue 5 years ago • 0 comments

The else block in a nested if-else is missing braces around its statements in the decompilation, which means those statements will always execute even if the if condition is true. Seems to only affect second level if-else nesting. Example:

#pragma semicolon 1;

#include <sourcemod>

public OnPluginStart()
{
    new i = 1, j = 2, k = 3;

    // case 1
    if (i == 1)
        LogMessage("if 1");
    else
        LogMessage("else 1");

    // case 2
    if (i == 1)
    {
        if (j == 2)
            LogMessage("if 2");
        else
            LogMessage("else 2 bad");
    }

    // case 3
    if (i == 1)
    {
        if (j == 2)
        {
            LogMessage("if 3");
        }
        else
        {
            LogMessage("else 3 bad");
        }
    }

    // case 4
    if (i == 1)
    {
        if (j == 2)
        {
            if (k == 3)
                LogMessage("if 4");
            else
                LogMessage("else 4");
        }
        else
        {
            LogMessage("else 4 bad");
        }
    }

    // case 5
    if (i == 1)
    {
        if (j == 2)
        {
            if (k == 3)
            {
                LogMessage("if 5");
            }
            else
            {
                LogMessage("else 5");
            }
        }
        else
        {
            if (k == 3)
            {
                LogMessage("if 5");
            }
            else
            {
                LogMessage("else 5 bad");
            }
        }
    }
}

Decompilation:

public void:OnPluginStart()
{
	new i = 1;
	new j = 2;
	new k = 3;
	if (i == 1)
	{
		LogMessage("if 1");
	}
	else
	{
		LogMessage("else 1");
	}
	if (i == 1)
	{
		if (j == 2)
		{
			LogMessage("if 2");
		}
		LogMessage("else 2 bad");
	}
	if (i == 1)
	{
		if (j == 2)
		{
			LogMessage("if 3");
		}
		LogMessage("else 3 bad");
	}
	if (i == 1)
	{
		if (j == 2)
		{
			if (k == 3)
			{
				LogMessage("if 4");
			}
			else
			{
				LogMessage("else 4");
			}
		}
		LogMessage("else 4 bad");
	}
	if (i == 1)
	{
		if (j == 2)
		{
			if (k == 3)
			{
				LogMessage("if 5");
			}
			else
			{
				LogMessage("else 5");
			}
		}
		if (k == 3)
		{
			LogMessage("if 5");
		}
		LogMessage("else 5 bad");
	}
	return void:0;
}

devilesk avatar Sep 03 '19 11:09 devilesk