-
- if type(val) == types.TupleType or type(val) == types.ListType :
- # on est en présence d'un MCFACT multiple !
- l=self.list_instance()
- l.init(nom = nom,parent=parent)
- for v in val:
- objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent)
- l.append(objet)
- return l
+ elif is_sequence(val) and len(val) == 0 and self.statut == 'o':
+ # On est dans le cas où le mcfact est présent mais est une liste/tuple
+ # vide. Il est obligatoire donc on l'initialise. Les règles, mots-clés
+ # obligatoires diront si un mcfact vide est accepté.
+ val = {}
+
+ # On cree toujours une liste de mcfact
+ l=self.list_instance()
+ l.init(nom = nom,parent=parent)
+ if type(val) in (types.TupleType, types.ListType, self.list_instance) :
+ for v in val:
+ if type(v) == types.DictType or isinstance(v, _F):
+ objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent)
+ l.append(objet)
+ elif isinstance(v, self.class_instance):
+ l.append(v)
+ else:
+ l.append(N_OBJECT.ErrorObj(self,v,parent,nom))
+ elif type(val) == types.DictType or isinstance(val, _F):
+ objet=self.class_instance(nom=nom,definition=self,val=val,parent=parent)
+ l.append(objet)
+ elif isinstance(val, self.class_instance):
+ l.append(val)