def list_type(cls): """ Return an ASTNode subclass that represent a list of "cls". """ element_type = cls def add_to_context(cls): if cls in get_context().types: return get_context().types.add(cls) get_context().list_types.add(cls.element_type()) # Make sure the type this list contains is already declared cls.element_type().add_to_context() return type( '{}ListType'.format(element_type.name()), (StructMetaClass.root_grammar_class, ), { 'is_ptr': True, 'name': classmethod( lambda cls: names.Name('List') + cls.element_type().name() ), 'add_to_context': classmethod(add_to_context), 'nullexpr': classmethod(lambda cls: null_constant()), 'is_list_type': True, 'is_collection': classmethod(lambda cls: True), 'element_type': classmethod(lambda cls: element_type), })
def nullexpr(cls): """ Return a value that can be considered as "null" for this AST node type. It indicates the absence of AST node. """ if cls.is_ptr: return null_constant() else: return names.Name('No') + cls.name()
def nullexpr(cls): null_constant()