File tree Expand file tree Collapse file tree 3 files changed +23
-11
lines changed
Expand file tree Collapse file tree 3 files changed +23
-11
lines changed Original file line number Diff line number Diff line change @@ -208,7 +208,8 @@ def signatures(self):
208208 regs = {}
209209 for fn , priority in self .regs ():
210210 ss = self .specialization_self
211- lcl = {} if ss is MISSING else vars (ss )
211+ cgf = getattr (ss , "_ovld_codegen_fields" , ())
212+ lcl = {f : getattr (ss , f ) for f in cgf }
212213 sig = replace (Signature .extract (fn , lcl ), priority = priority )
213214
214215 def _set (sig , fn ):
Original file line number Diff line number Diff line change @@ -337,15 +337,20 @@ def unmeld_classes(main: type, exclude: type):
337337
338338
339339def meld_classes (classes ):
340+ def key (cls ):
341+ return getattr (cls , "_ovld_specialization_parent" , None ) or cls
342+
340343 medleys = {}
341344 for cls in classes :
342- medleys .update ({x : True for x in getattr (cls , "_ovld_medleys" , [cls ])})
345+ medleys .update ({key ( x ): x for x in getattr (cls , "_ovld_medleys" , [cls ])})
343346 for cls in classes :
347+ cls = key (cls )
344348 if not hasattr (cls , "_ovld_medleys" ):
345349 for base in cls .mro ():
346350 if base is not cls and base in medleys :
347351 del medleys [base ]
348- medleys = tuple (medleys )
352+
353+ medleys = tuple (medleys .values ())
349354 if len (medleys ) == 1 :
350355 return medleys [0 ]
351356
@@ -372,7 +377,7 @@ def meld_classes(classes):
372377
373378 result = make_dataclass (
374379 cls_name = "+" .join (sorted (c .__name__ for c in medleys )),
375- bases = tuple ( medleys ) ,
380+ bases = medleys ,
376381 fields = dc_fields ,
377382 kw_only = True ,
378383 namespace = merged ,
Original file line number Diff line number Diff line change @@ -546,16 +546,17 @@ class Lust(Lost):
546546 assert lu .xs == []
547547
548548
549- def test_configure_dependent ():
550- class Monkey (Medley ):
551- regex : CodegenParameter [str ] = "monk[iey]+"
549+ class Monkey (Medley ):
550+ regex : CodegenParameter [str ] = "monk[iey]+"
551+
552+ def hi (self , x : Regexp [regex ]):
553+ return "hello!"
552554
553- def hi (self , x : Regexp [ regex ] ):
554- return "hello !"
555+ def hi (self , x : str ):
556+ return "goodbye !"
555557
556- def hi (self , x : str ):
557- return "goodbye!"
558558
559+ def test_configure_dependent ():
559560 m1 = Monkey ()
560561 m2 = Monkey (regex = "go+rilla" )
561562
@@ -566,3 +567,8 @@ def hi(self, x: str):
566567 assert m2 .hi ("monki" ) == "goodbye!"
567568 assert m2 .hi ("monkeeeee" ) == "goodbye!"
568569 assert m2 .hi ("goorilla" ) == "hello!"
570+
571+
572+ def test_configure_dependent_pileon ():
573+ m = Monkey (regex = "chimpanze+" ) + Monkey (regex = "go+rilla" )
574+ assert m .hi ("goorilla" ) == "hello!"
You can’t perform that action at this time.
0 commit comments