private bool TryDecompileProcedure(EvaluatedProcedure evaluatedProcedure, out ProcedureDeclaration declaration)
        {
            LogInfo($"Decompiling procedure: {evaluatedProcedure.Procedure.Name}");
            InitializeProcedureDecompilationState(evaluatedProcedure);

            if (!TryCompositeEvaluatedInstructions(evaluatedProcedure.Statements, out var statements))
            {
                LogError("Failed to composite evaluated instructions");
                declaration = null;
                return(false);
            }

            declaration = new ProcedureDeclaration(
                new TypeIdentifier(evaluatedProcedure.ReturnKind),
                new Identifier(ValueKind.Procedure, evaluatedProcedure.Procedure.Name),
                evaluatedProcedure.Parameters,
                new CompoundStatement(statements));

            return(true);
        }
 //
 // Procedure decompilation
 //
 private void InitializeProcedureDecompilationState(EvaluatedProcedure procedure)
 {
     mEvaluatedProcedure = procedure;
 }