#  Copyright (c) PARRRATE T&V 2021. All rights reserved.

from bu4.parsing.codes import CODE_MAKE
from bu4.parsing.constructs.plambda import PLambda
from bu4.parsing.extensions.extension import Extension
from bu4.parsing.states.parsestate import ParseState
from bu4.parsing.states.psafter import PSAfter
from bu4.parsing.states.psfinal import PSFinal
from bu4.parsing.states.psread import PSRead

__all__ = ('XMake',)

from bu4.parsing.targets.pslambda import PSLambda


class XMake(Extension, code=CODE_MAKE):
    def apply(self, state: PSAfter) -> ParseState:
        name = self.parser.parse_name()
        state.state = PSAfter(
            PSRead(),
            PSLambda(
                lambda value: PSFinal(PLambda(name, value))
            )
        )
        return state