Ejemplo n.º 1
0
def isMarshalConstant(constant_value):
    """ Decide if we want to use marshal to create a constant.

        The reason we do this, is because creating dictionaries with 700
        elements creates a lot of C code, while gaining usually no performance
        at all. The MSVC compiler is especially notorious about hanging like
        forever with this active, due to its optimizer not scaling.

        Therefore we use a constant "weight" (how expensive it is), and apply
        that to decide.

        If marshal is not possible, or constant "weight" is too large, we
        don't do it. Also, for some constants, marshal can fail, and return
        other values. Check that too. In that case, we have to create it.
    """

    if not decideMarshal(constant_value):
        return False

    if getConstantWeight(constant_value) < 20:
        return False

    marshal_value = marshal.dumps(constant_value)
    restored = marshal.loads(marshal_value)

    # TODO: Potentially warn about these.
    return constant_value == restored
Ejemplo n.º 2
0
def isMarshalConstant(constant_value):
    """ Decide if we want to use marshal to create a constant.

        The reason we do this, is because creating dictionaries with 700
        elements creates a lot of C code, while gaining usually no performance
        at all. The MSVC compiler is especially notorious about hanging like
        forever with this active, due to its optimizer not scaling.

        Therefore we use a constant "weight" (how expensive it is), and apply
        that to decide.

        If marshal is not possible, or constant "weight" is too large, we
        don't do it. Also, for some constants, marshal can fail, and return
        other values. Check that too. In that case, we have to create it.
    """

    if not decideMarshal(constant_value):
        return False

    if getConstantWeight(constant_value) < 20:
        return False

    marshal_value = marshal.dumps(constant_value)
    restored = marshal.loads(marshal_value)

    # TODO: Potentially warn about these.
    return constant_value == restored
Ejemplo n.º 3
0
def decideMarshal(constant_value):
    if False and type(constant_value) is unicode:
        return True

    # Do it for sufficiently large constants, typically tuples of 20 elements,
    # or dicts of more than 10.
    if getConstantWeight(constant_value) < 20:
        return False

    return True
Ejemplo n.º 4
0
def decideMarshal(constant_value):
    if False and type(constant_value) is unicode:
        return True

    # Do it for sufficiently large constants, typically tuples of 20 elements,
    # or dicts of more than 10.
    if getConstantWeight(constant_value) < 20:
        return False

    return True
Ejemplo n.º 5
0
def isMarshalConstant(constant_value):
    if not decideMarshal(constant_value):
        return False

    if getConstantWeight(constant_value) < 20:
        return False

    marshal_value = marshal.dumps(constant_value)
    restored = marshal.loads(marshal_value)

    return constant_value == restored
Ejemplo n.º 6
0
def isMarshalConstant(constant_value):
    if not decideMarshal(constant_value):
        return False

    if getConstantWeight(constant_value) < 20:
        return False

    marshal_value = marshal.dumps(constant_value)
    restored = marshal.loads(marshal_value)

    return constant_value == restored