4545 Integer ,
4646 Rational ,
4747 Real ,
48+ SymbolFalse ,
4849 SymbolList ,
50+ SymbolTrue ,
4951)
5052from mathics .core .rules import Rule
5153from mathics .core .pattern import Pattern , StopGenerator
@@ -451,6 +453,9 @@ class PatternTest(BinaryOperator, PatternObject):
451453 = True
452454 >> MatchQ[-3, _Integer?(#>0&)]
453455 = False
456+ >> MatchQ[3, Pattern[3]]
457+ : First element in pattern Pattern[3] is not a valid pattern name.
458+ = False
454459 """
455460
456461 operator = "?"
@@ -660,16 +665,23 @@ class MatchQ(Builtin):
660665 = False
661666 >> MatchQ[_Integer][123]
662667 = True
668+ >> MatchQ[3, Pattern[3]]
669+ : First element in pattern Pattern[3] is not a valid pattern name.
670+ = False
663671 """
664672
665673 rules = {"MatchQ[form_][expr_]" : "MatchQ[expr, form]" }
666674
667675 def apply (self , expr , form , evaluation ):
668676 "MatchQ[expr_, form_]"
669677
670- if match (expr , form , evaluation ):
671- return Symbol ("True" )
672- return Symbol ("False" )
678+ try :
679+ if match (expr , form , evaluation ):
680+ return SymbolTrue
681+ return SymbolFalse
682+ except PatternError as e :
683+ evaluation .message (e .name , e .tag , * (e .args ))
684+ return SymbolFalse
673685
674686
675687class Verbatim (PatternObject ):
@@ -786,6 +798,7 @@ class Pattern_(PatternObject):
786798 "nodef" : (
787799 "No default setting found for `1` in " "position `2` when length is `3`."
788800 ),
801+ "argr" : "Pattern called with 1 argument; 2 arguments are expected." ,
789802 }
790803
791804 rules = {
@@ -801,10 +814,13 @@ class Pattern_(PatternObject):
801814 }
802815
803816 def init (self , expr ):
804- super (Pattern_ , self ).init (expr )
805- self .varname = expr .leaves [0 ].get_name ()
806- if self .varname is None :
817+ if len (expr .leaves ) != 2 :
818+ self .error ("patvar" , expr )
819+ varname = expr .leaves [0 ].get_name ()
820+ if varname is None or varname == "" :
807821 self .error ("patvar" , expr )
822+ super (Pattern_ , self ).init (expr )
823+ self .varname = varname
808824 self .pattern = Pattern .create (expr .leaves [1 ])
809825
810826 def __repr__ (self ):
0 commit comments