Global Metrics

path: .metrics.nom.closures
old: 2.0
new: 0.0

path: .metrics.nom.total
old: 99.0
new: 1.0

path: .metrics.nom.functions
old: 97.0
new: 1.0

path: .metrics.mi.mi_sei
old: -288.7955007065229
new: -7.850142330858812

path: .metrics.mi.mi_original
old: -232.0054927160864
new: 34.15032124304594

path: .metrics.mi.mi_visual_studio
old: 0.0
new: 19.9709480953485

path: .metrics.halstead.volume
old: 167622.50942935207
new: 5826.37911365173

path: .metrics.halstead.estimated_program_length
old: 9304.98423620366
new: 624.8673108888682

path: .metrics.halstead.effort
old: 26695706.610422462
new: 301178.9818749202

path: .metrics.halstead.level
old: 0.006279006279006278
new: 0.019345238095238096

path: .metrics.halstead.n1
old: 45.0
new: 28.0

path: .metrics.halstead.vocabulary
old: 965.0
new: 106.0

path: .metrics.halstead.N2
old: 6512.0
new: 288.0

path: .metrics.halstead.purity_ratio
old: 0.5503628222750139
new: 0.7215557862458063

path: .metrics.halstead.N1
old: 10395.0
new: 578.0

path: .metrics.halstead.time
old: 1483094.8116901368
new: 16732.16565971779

path: .metrics.halstead.n2
old: 920.0
new: 78.0

path: .metrics.halstead.difficulty
old: 159.2608695652174
new: 51.69230769230769

path: .metrics.halstead.length
old: 16907.0
new: 866.0

path: .metrics.halstead.bugs
old: 29.7741719686726
new: 1.497712723196856

path: .metrics.cognitive.average
old: 13.404040404040405
new: 68.0

path: .metrics.cognitive.sum
old: 1327.0
new: 68.0

path: .metrics.nargs.average
old: 1.585858585858586
new: 5.0

path: .metrics.nargs.sum
old: 157.0
new: 5.0

path: .metrics.cyclomatic.average
old: 8.811881188118813
new: 17.0

path: .metrics.cyclomatic.sum
old: 890.0
new: 34.0

path: .metrics.nexits.sum
old: 300.0
new: 1.0

path: .metrics.nexits.average
old: 3.0303030303030303
new: 1.0

path: .metrics.loc.ploc
old: 3000.0
new: 128.0

path: .metrics.loc.sloc
old: 4358.0
new: 178.0

path: .metrics.loc.cloc
old: 812.0
new: 7.0

path: .metrics.loc.lloc
old: 1586.0
new: 84.0

path: .metrics.loc.blank
old: 546.0
new: 43.0

Spaces Data

Minimal test - lines (12, 144)

path: .spaces[0].metrics.cyclomatic.average
old: 15.0
new: 33.0

path: .spaces[0].metrics.cyclomatic.sum
old: 15.0
new: 33.0

path: .spaces[0].metrics.mi.mi_original
old: 52.79718843280804
new: 39.23341524311069

path: .spaces[0].metrics.mi.mi_sei
old: 35.0796657849169
new: -9.042520178294431

path: .spaces[0].metrics.mi.mi_visual_studio
old: 30.875548791115815
new: 22.94351768602964

path: .spaces[0].metrics.nargs.average
old: 1.5
new: 5.0

path: .spaces[0].metrics.nargs.sum
old: 3.0
new: 5.0

path: .spaces[0].metrics.nexits.average
old: 4.5
new: 1.0

path: .spaces[0].metrics.nexits.sum
old: 9.0
new: 1.0

path: .spaces[0].metrics.loc.ploc
old: 68.0
new: 121.0

path: .spaces[0].metrics.loc.sloc
old: 101.0
new: 133.0

path: .spaces[0].metrics.loc.cloc
old: 22.0
new: 1.0

path: .spaces[0].metrics.loc.lloc
old: 34.0
new: 84.0

path: .spaces[0].metrics.cognitive.average
old: 15.5
new: 68.0

path: .spaces[0].metrics.cognitive.sum
old: 31.0
new: 68.0

path: .spaces[0].metrics.halstead.bugs
old: 0.5307017463934979
new: 1.5244225029453269

path: .spaces[0].metrics.halstead.N2
old: 140.0
new: 280.0

path: .spaces[0].metrics.halstead.difficulty
old: 29.056603773584907
new: 54.44444444444444

path: .spaces[0].metrics.halstead.vocabulary
old: 75.0
new: 100.0

path: .spaces[0].metrics.halstead.N1
old: 211.0
new: 575.0

path: .spaces[0].metrics.halstead.length
old: 351.0
new: 855.0

path: .spaces[0].metrics.halstead.effort
old: 63526.899150200814
new: 309271.50563401345

path: .spaces[0].metrics.halstead.n1
old: 22.0
new: 28.0

path: .spaces[0].metrics.halstead.estimated_program_length
old: 401.68727970187007
new: 578.8405379214594

path: .spaces[0].metrics.halstead.time
old: 3529.2721750111564
new: 17181.750313000746

path: .spaces[0].metrics.halstead.level
old: 0.03441558441558441
new: 0.018367346938775512

path: .spaces[0].metrics.halstead.volume
old: 2186.315360364054
new: 5680.49704225739

path: .spaces[0].metrics.halstead.purity_ratio
old: 1.1444082042788322
new: 0.677006477101122

path: .spaces[0].metrics.halstead.n2
old: 53.0
new: 72.0

path: .spaces[0].metrics.nom.total
old: 2.0
new: 1.0

path: .spaces[0].metrics.nom.closures
old: 1.0
new: 0.0

Code

PrepareAndDispatch(nsXPTCStubBase* self, uint32_t methodIndex,
                   uint32_t* a_gpr, uint64_t *a_fpr, uint32_t *a_ov)
{

    nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
    const nsXPTMethodInfo* info;
    uint8_t paramCount;
    uint8_t i;

    NS_ASSERTION(self,"no self");

    self->mEntry->GetMethodInfo(uint16_t(methodIndex), &info);
    NS_ASSERTION(info,"no info");

    paramCount = info->GetParamCount();

    const uint8_t indexOfJSContext = info->IndexOfJSContext();

    uint32_t gpr = 1, fpr = 0;

    for(i = 0; i < paramCount; i++)
    {
        const nsXPTParamInfo& param = info->GetParam(i);
        const nsXPTType& type = param.GetType();
        nsXPTCMiniVariant* dp = ¶mBuffer[i];

        if (i == indexOfJSContext) {
            if (gpr < 5)
                a_gpr++, gpr++;
            else
                a_ov++;
        }

        if(param.IsOut() || !type.IsArithmetic())
        {
            if (gpr < 5)
                dp->val.p = (void*) *a_gpr++, gpr++;
            else
                dp->val.p = (void*) *a_ov++;
            continue;
        }
        // else
        switch(type)
        {
        case nsXPTType::T_I8     :
            if (gpr < 5)
                dp->val.i8  = *((int32_t*) a_gpr), a_gpr++, gpr++;
            else
                dp->val.i8  = *((int32_t*) a_ov ), a_ov++;
            break;
        case nsXPTType::T_I16    :
            if (gpr < 5)
                dp->val.i16 = *((int32_t*) a_gpr), a_gpr++, gpr++;
            else
                dp->val.i16 = *((int32_t*) a_ov ), a_ov++;
            break;
        case nsXPTType::T_I32    :
            if (gpr < 5)
                dp->val.i32 = *((int32_t*) a_gpr), a_gpr++, gpr++;
            else
                dp->val.i32 = *((int32_t*) a_ov ), a_ov++;
            break;
        case nsXPTType::T_I64    :
            if (gpr < 4)
                dp->val.i64 = *((int64_t*) a_gpr), a_gpr+=2, gpr+=2;
            else
                dp->val.i64 = *((int64_t*) a_ov ), a_ov+=2, gpr=5;
            break;
        case nsXPTType::T_U8     :
            if (gpr < 5)
                dp->val.u8  = *((uint32_t*)a_gpr), a_gpr++, gpr++;
            else
                dp->val.u8  = *((uint32_t*)a_ov ), a_ov++;
            break;
        case nsXPTType::T_U16    :
            if (gpr < 5)
                dp->val.u16 = *((uint32_t*)a_gpr), a_gpr++, gpr++;
            else
                dp->val.u16 = *((uint32_t*)a_ov ), a_ov++;
            break;
        case nsXPTType::T_U32    :
            if (gpr < 5)
                dp->val.u32 = *((uint32_t*)a_gpr), a_gpr++, gpr++;
            else
                dp->val.u32 = *((uint32_t*)a_ov ), a_ov++;
            break;
        case nsXPTType::T_U64    :
            if (gpr < 4)
                dp->val.u64 = *((uint64_t*)a_gpr), a_gpr+=2, gpr+=2;
            else
                dp->val.u64 = *((uint64_t*)a_ov ), a_ov+=2, gpr=5;
            break;
        case nsXPTType::T_FLOAT  :
            if (fpr < 2)
                dp->val.f   = *((float*)   a_fpr), a_fpr++, fpr++;
            else
                dp->val.f   = *((float*)   a_ov ), a_ov++;
            break;
        case nsXPTType::T_DOUBLE :
            if (fpr < 2)
                dp->val.d   = *((double*)  a_fpr), a_fpr++, fpr++;
            else
                dp->val.d   = *((double*)  a_ov ), a_ov+=2;
            break;
        case nsXPTType::T_BOOL   :
            if (gpr < 5)
                dp->val.b   = *((uint32_t*)a_gpr), a_gpr++, gpr++;
            else
                dp->val.b   = *((uint32_t*)a_ov ), a_ov++;
            break;
        case nsXPTType::T_CHAR   :
            if (gpr < 5)
                dp->val.c   = *((uint32_t*)a_gpr), a_gpr++, gpr++;
            else
                dp->val.c   = *((uint32_t*)a_ov ), a_ov++;
            break;
        case nsXPTType::T_WCHAR  :
            if (gpr < 5)
                dp->val.wc  = *((uint32_t*)a_gpr), a_gpr++, gpr++;
            else
                dp->val.wc  = *((uint32_t*)a_ov ), a_ov++;
            break;
        default:
            NS_ERROR("bad type");
            break;
        }
    }

    nsresult result = self->mOuter->CallMethod((uint16_t)methodIndex, info,
                                               paramBuffer);

    return result;
}