def get_next_mangled_name(self):
        """
        1. Do not shadow a mangled name from a parent scope
           if we reference the original name from that scope
           in this scope or any sub-scope.

        2. Do not shadow an original name from a parent scope
           if it's not mangled and we reference it in this scope
           or any sub-scope.

        """
        while True:
            mangled = next(self.base54)

            # case 1
            ancestor = self._get_scope_with_mangled(mangled)
            if (ancestor is not None
                and self.refs.get(ancestor.rev_mangled[mangled]) is ancestor
                ):
                continue

            # case 2
            ancestor = self._get_scope_with_symbol(mangled)
            if (ancestor is not None
                and self.refs.get(mangled) is ancestor
                and mangled not in ancestor.mangled
                ):
                continue

            # make sure a new mangled name is not a reserved word
            if mangled.upper() in Lexer.keywords:
                continue

            return mangled
def get_next_mangled_name ( self ) : while True : mangled = next ( self . base54 ) ancestor = self . _get_scope_with_mangled ( mangled ) if ( ancestor is not None and self . refs . get ( ancestor . rev_mangled [ mangled ] ) is ancestor ) : continue ancestor = self . _get_scope_with_symbol ( mangled ) if ( ancestor is not None and self . refs . get ( mangled ) is ancestor and mangled not in ancestor . mangled ) : continue if mangled . upper ( ) in Lexer . keywords : continue return mangled
1. Do not shadow a mangled name from a parent scope
           if we reference the original name from that scope
           in this scope or any sub-scope.

        2. Do not shadow an original name from a parent scope
           if it's not mangled and we reference it in this scope
           or any sub-scope.