Plan 9 from Bell Labs’s /usr/web/sources/contrib/bichued/root/sys/src/cmd/python/Tools/bgen/bgen/bgenStackBuffer.py

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


"""Buffers allocated on the stack."""


from bgenBuffer import FixedInputBufferType, FixedOutputBufferType


class StackOutputBufferType(FixedOutputBufferType):

    """Fixed output buffer allocated on the stack -- passed as (buffer, size).

    Instantiate with the buffer size as parameter.
    """

    def passOutput(self, name):
        return "%s__out__, %s" % (name, self.size)


class VarStackOutputBufferType(StackOutputBufferType):

    """Output buffer allocated on the stack -- passed as (buffer, &size).

    Instantiate with the buffer size as parameter.
    """

    def getSizeDeclarations(self, name):
        return []

    def getAuxDeclarations(self, name):
        return ["int %s__len__ = %s" % (name, self.size)]

    def passOutput(self, name):
        return "%s__out__, &%s__len__" % (name, name)

    def mkvalueArgs(self, name):
        return "%s__out__, (int)%s__len__" % (name, name)


class VarVarStackOutputBufferType(VarStackOutputBufferType):

    """Output buffer allocated on the stack -- passed as (buffer, size, &size).

    Instantiate with the buffer size as parameter.
    """

    def passOutput(self, name):
        return "%s__out__, %s__len__, &%s__len__" % (name, name, name)


class ReturnVarStackOutputBufferType(VarStackOutputBufferType):

    """Output buffer allocated on the stack -- passed as (buffer, size) -> size.

    Instantiate with the buffer size as parameter.
    The function's return value is the size.
    (XXX Should have a way to suppress returning it separately, too.)
    """

    def passOutput(self, name):
        return "%s__out__, %s__len__" % (name, name)

    def mkvalueArgs(self, name):
        return "%s__out__, (int)_rv" % name

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.