All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opalj.br.fpcf.properties.pointsto.package.scala Maven / Gradle / Ivy

The newest version!
/* BSD 2-Clause License - see OPAL/LICENSE for details. */
package org.opalj
package br
package fpcf
package properties

package object pointsto {
    // we encode allocation sites (method, pc, emptyArray, typeid tuples) as longs
    // MSB 20 bit TypeID | 1 bit is empty array | 16 bit PC | 27 bit ContextID LSB
    type AllocationSite = Long

    @inline def allocationSiteToLong(
        context:      Context,
        pc:           Int,
        tpe:          ReferenceType,
        isEmptyArray: Boolean       = false
    ): Long = {
        val contextId = if (context eq NoContext) 0x7FFFFFF else context.id
        val typeId = tpe.id
        val emptyArray = if (isEmptyArray) 1L else 0L
        assert(pc >= 0 && pc <= 0xFFFF)
        assert(contextId >= 0 && contextId <= 0x7FFFFFF)
        assert(typeId >= -0x80000 && typeId <= 0x7FFFF)
        contextId.toLong | (pc.toLong << 27) | (emptyArray << 43) | (typeId.toLong << 44)
    }

    @inline def allocationSiteLongToTypeId(encodedAllocationSite: AllocationSite): Int = {
        (encodedAllocationSite >> 44).toInt
    }

    @inline def isEmptyArrayAllocationSite(encodedAllocationSite: AllocationSite): Boolean = {
        (encodedAllocationSite >> 43) % 2 == -1
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy