separate (Compilation_Unit.Produce_Metrics)
procedure Common_Body (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                       Program_Unit : in Program_Unit_State_Machine;
                       Halstead : in Halstead_State_Machine;
                       Loc : in Loc_State_Machine;
                       Mccabe : in Mccabe_State_Machine) is

    --==========================================================
    -- process a block with an optional declaration section
    --
    -- Common_Body ::= [ Declarative_Part ] Begin_End_Block
    --==========================================================

begin
    -- Common_Body

    if "/=" (Token_Package.Value_Of (Peek (From => Current_Compilation_Unit)),
             Token_Package.Begin_Token) then

        Declarative_Part (Current_Compilation_Unit => Current_Compilation_Unit,
                          Program_Unit => Program_Unit,
                          Halstead => Halstead,
                          Loc => Loc,
                          Mccabe => Mccabe);
    end if;

    Begin_End_Block (Current_Compilation_Unit => Current_Compilation_Unit,
                     Program_Unit => Program_Unit,
                     Halstead => Halstead,
                     Loc => Loc,
                     Mccabe => Mccabe);

end Common_Body;