def _token_of(self, input):
        """
        Returns the token type of the input.

        :param input: Input whose type is to be determined
        :return TOKENS: Token type of the input
        """

        if isinstance(input, dict):

            # Intrinsic functions are always dicts
            if is_intrinsics(input):
                # Intrinsic functions are handled *exactly* like a primitive type because
                # they resolve to a primitive type when creating a stack with CloudFormation
                return self.TOKEN.PRIMITIVE
            else:
                return self.TOKEN.DICT

        elif isinstance(input, list):
            return self.TOKEN.LIST

        else:
            return self.TOKEN.PRIMITIVE
    def _token_of(self, input):
        """
        Returns the token type of the input.

        :param input: Input whose type is to be determined
        :return TOKENS: Token type of the input
        """

        if isinstance(input, dict):

            # Intrinsic functions are always dicts
            if is_intrinsics(input):
                # Intrinsic functions are handled *exactly* like a primitive type because
                # they resolve to a primitive type when creating a stack with CloudFormation
                return self.TOKEN.PRIMITIVE
            else:
                return self.TOKEN.DICT

        elif isinstance(input, list):
            return self.TOKEN.LIST

        else:
            return self.TOKEN.PRIMITIVE