On Fri, 2003-09-05 at 08:19, Craig Lanning wrote:
> On Fri, 2003-09-05 at 05:49, Gerd Moellmann wrote:
> > Craig Lanning <[EMAIL PROTECTED]> writes:
> > 
> > > I'm still seeing these:
> > > 
> > > ; Note: Ignoring free ignore declaration for PCL::.METHOD-ARGS..
> > 
> > That looks like some PCL macro is generating superfluous declarations.
> > If you could extract something showing when this happens, I'd
> > appreciate that very much.
> 
> This app uses a lot of methods and has quite a few :around methods.  My
> guess is that it might be related to compiling combined methods which
> contain uses of (call-next-method).
> 
> I'll see what I can do to isolate one of these and see where it really
> is happening.

It's amazing what one finds when debugging messages are turned on.

Below are a block of output from the application and the macro expansion
of the code being run.

Craig

---------------------------------------------

This is an extract from the output I saw:

>  Instance: #<EXPRESSO-USER::AE.COMPONENT_2D_LOCATION&AE.MANAGED_DESIGN_OBJECT
>              {497582B5}>

Instance being processed.

>  Checking Entity #<EXPRESSO-USER::AE.COMPONENT_2D_LOCATION&AE.MANAGED_DESIGN_OBJECT
>                    {497582B5}><AE.COMPONENT_2D_LOCATION>
>  Running WHERE Rule WR1...
>  WR1 Function: #<Closure Over Function "LAMBDA (PCL::.PV-CELL. 
> PCL::.NEXT-METHOD-CALL. INSTANCE)"
>                  {4D015731}>

WHERE rules are snipits of EXPRESS code that return TRUE, FALSE, or
UNKNOWN.  In Express Engine they get turned into :after methods.

It looks like the messages below are being generated by compiling the
combined method for the WHERE rule.

>; 
>; Note: Ignoring free ignore declaration for PCL::.METHOD-ARGS..
>; 
>; Note: Ignoring free ignore declaration for PCL::.NEXT-METHODS..
>; 
>; Note: Ignoring free ignore declaration for PCL::.METHOD-ARGS..
>; 
>; Note: Ignoring free ignore declaration for PCL::.NEXT-METHODS..
>; 
>; Note: Ignoring free ignore declaration for PCL::.METHOD-ARGS..
>; 
>; Note: Ignoring free ignore declaration for PCL::.NEXT-METHODS..
>
>Instance #160 WHERE rule WR1 of COMPONENT_2D_LOCATION failed.

Apparently the rule return FALSE.

---------------------------------------------

;; This is the macro expansion of the defwhere-rules definition.  I'm
;; expanding it one level at a time (macroexpand-1).

* (macroexpand-1
    '(defwhere-rules AE.COMPONENT_2D_LOCATION
      (with-partial-context (AE.COMPONENT_2D_LOCATION)
        (where-rules-mac AE.COMPONENT_2D_LOCATION
          ("WR1" (express-or (express-not (%substrate_location instance nil))
                             (express-equal (%mirror (%transformation instance nil) 
'nil) nil)))))))

(DEFMETHOD WHERE-RULES
           :AFTER
           ((INSTANCE AE.COMPONENT_2D_LOCATION))
           (DBG-MESSAGE :VALIDATE
                        3
                        "~%  Checking Entity ~S<~A>"
                        INSTANCE
                        'AE.COMPONENT_2D_LOCATION)
           (WITH-PARTIAL-CONTEXT (AE.COMPONENT_2D_LOCATION)
                                 (WHERE-RULES-MAC AE.COMPONENT_2D_LOCATION
                                                  ("WR1"
                                                   (EXPRESS-OR
                                                    (EXPRESS-NOT
                                                     (%SUBSTRATE_LOCATION
                                                      INSTANCE
                                                      NIL))
                                                    (EXPRESS-EQUAL
                                                     (%MIRROR
                                                      (%TRANSFORMATION INSTANCE
                                                                       NIL)
                                                      'NIL)
                                                     NIL))))))
T

;; So far so good.

* (macroexpand-1
    '(DEFMETHOD WHERE-RULES :AFTER ((INSTANCE AE.COMPONENT_2D_LOCATION))
       (DBG-MESSAGE :VALIDATE 3 "~%  Checking Entity ~S<~A>"
                    INSTANCE 'AE.COMPONENT_2D_LOCATION)
       (WITH-PARTIAL-CONTEXT (AE.COMPONENT_2D_LOCATION)
         (WHERE-RULES-MAC AE.COMPONENT_2D_LOCATION
           ("WR1" (EXPRESS-OR (EXPRESS-NOT (%SUBSTRATE_LOCATION INSTANCE NIL))
                              (EXPRESS-EQUAL (%MIRROR (%TRANSFORMATION INSTANCE NIL) 
'NIL)
                                             NIL)))))))

(PROGN
 (PCL::PROCLAIM-DEFGENERIC 'WHERE-RULES '(INSTANCE))
 (PCL::LOAD-DEFMETHOD 'STANDARD-METHOD
                      'WHERE-RULES
                      '(:AFTER)
                      (LIST 'AE.COMPONENT_2D_LOCATION)
                      '(INSTANCE)
                      (LIST* :FAST-FUNCTION
                             (LAMBDA
                                 (PCL::.PV-CELL. PCL::.NEXT-METHOD-CALL.
                                  INSTANCE)
                               (DECLARE
                                (IGNORABLE PCL::.PV-CELL.
                                 PCL::.NEXT-METHOD-CALL.))
                               (DECLARE
                                (PCL:METHOD-LAMBDA-LIST
                                 (INSTANCE AE.COMPONENT_2D_LOCATION)))
                               (DECLARE
                                (PCL::METHOD-NAME
                                 (WHERE-RULES (:AFTER)
                                              (AE.COMPONENT_2D_LOCATION))))
                               (DECLARE (IGNORABLE INSTANCE))
                               (MACROLET ((PCL::PV-ENV
                                              ((PCL::PV PCL::CALLS
                                                PCL::PV-TABLE-SYMBOL
                                                PCL::PV-PARAMETERS)
                                               &REST PCL::FORMS)
                                            (DECLARE
                                             (IGNORE PCL::PV-TABLE-SYMBOL
                                              PCL::PV-PARAMETERS))
                                            `(LET ((,PCL::PV
                                                    (CAR PCL::.PV-CELL.))
                                                   (,PCL::CALLS
                                                    (CDR PCL::.PV-CELL.)))
                                               (DECLARE
                                                (TYPE LIST PCL::.PV-CELL.))
                                               (DECLARE
                                                (IGNORABLE ,PCL::PV
                                                 ,PCL::CALLS))
                                               ,@PCL::FORMS)))
                                 (PCL::FAST-LEXICAL-METHOD-FUNCTIONS
                                  ((INSTANCE) PCL::.NEXT-METHOD-CALL.
                                   (INSTANCE) NIL :METHOD-NAME-DECLARATION
                                   ((WHERE-RULES (:AFTER)
                                                 (AE.COMPONENT_2D_LOCATION)))
                                   :CALL-NEXT-METHOD-P NIL :NEXT-METHOD-P-P NIL
                                   :CLOSUREP NIL :APPLYP NIL)
                                  (DECLARE
                                   (CLASS INSTANCE AE.COMPONENT_2D_LOCATION))
                                  (BLOCK WHERE-RULES
                                    (DBG-MESSAGE :VALIDATE
                                                 3
                                                 "~%  Checking Entity ~S<~A>"
                                                 INSTANCE
                                                 'AE.COMPONENT_2D_LOCATION)
                                    (WITH-PARTIAL-CONTEXT
                                     (AE.COMPONENT_2D_LOCATION)
                                     (WHERE-RULES-MAC AE.COMPONENT_2D_LOCATION
                                                      ("WR1"
                                                       (EXPRESS-OR
                                                        (EXPRESS-NOT
                                                         (%SUBSTRATE_LOCATION
                                                          INSTANCE
                                                          NIL))
                                                        (EXPRESS-EQUAL
                                                         (%MIRROR
                                                          (%TRANSFORMATION
                                                           INSTANCE
                                                           NIL)
                                                          'NIL)
                                                         NIL)))))))))
                             '(:PLIST (:ARG-INFO (1))))
                      'NIL
                      'NIL
                      'NIL))
T

;; The expansion above is as far as it would go which left several
;; internal macros unexpanded.  They are expanded below.

* (macroexpand-1 '(WITH-PARTIAL-CONTEXT (AE.COMPONENT_2D_LOCATION)
                    (WHERE-RULES-MAC AE.COMPONENT_2D_LOCATION
                      ("WR1" (EXPRESS-OR
                               (EXPRESS-NOT (%SUBSTRATE_LOCATION INSTANCE NIL))
                               (EXPRESS-EQUAL (%MIRROR (%TRANSFORMATION INSTANCE NIL) 
'NIL)
                                              NIL))))))

(LET ((*FOCUS-PARTIAL-CONTEXT* '(AE.COMPONENT_2D_LOCATION)))
  (WHERE-RULES-MAC AE.COMPONENT_2D_LOCATION
                   ("WR1"
                    (EXPRESS-OR
                     (EXPRESS-NOT (%SUBSTRATE_LOCATION INSTANCE NIL))
                     (EXPRESS-EQUAL
                      (%MIRROR (%TRANSFORMATION INSTANCE NIL) 'NIL)
                      NIL)))))
T

;; This wouldn't exand any further either so I expanded the internal
;; macro separately.

* (macroexpand-1 '(WHERE-RULES-MAC AE.COMPONENT_2D_LOCATION
                   ("WR1"
                    (EXPRESS-OR
                     (EXPRESS-NOT (%SUBSTRATE_LOCATION INSTANCE NIL))
                     (EXPRESS-EQUAL (%MIRROR (%TRANSFORMATION INSTANCE NIL) 'NIL)
                                    NIL)))))

(LET ((EXPRESSO::RULES
       (LIST
        (LIST "WR1"
              #'(LAMBDA ()
                  (EXPRESS-OR (EXPRESS-NOT (%SUBSTRATE_LOCATION INSTANCE NIL))
                              (EXPRESS-EQUAL
                               (%MIRROR (%TRANSFORMATION INSTANCE NIL) 'NIL)
                               NIL)))))))
  (SET-SPECIAL EXPRESSO::WHERE-RULE-ENTITY
               (STRIP-SCHEMA-QUALIFIER 'AE.COMPONENT_2D_LOCATION))
  (LOOP EXPRESSO::FOR (EXPRESSO::LABEL FUNC) IN EXPRESSO::RULES
        DO
        (SET-SPECIAL EXPRESSO::WHERE-RULE-LABEL EXPRESSO::LABEL)
        (WHEN (STRING-EQUAL EXPRESSO::LABEL "NIL") (SETF EXPRESSO::LABEL NIL))
        (DBG-MESSAGE :VALIDATE 2 "~&  Running WHERE Rule ~A...~%"
                     (OR EXPRESSO::LABEL "(no label)"))
        (DBG-MESSAGE :VALIDATE 3 "~&  ~A Function: ~S~%"
                     (OR EXPRESSO::LABEL "(no label)")
                     FUNC)
        (CATCH 'EXPRESSO::NEXT-WHERE-RULE-CHECK
          (LET ((#:G67197
                 (HANDLER-CASE (FUNCALL FUNC)
                               (ERROR (EXPRESSO::ERR)
                                      (EXPRESS-ERROR BAD-ENTITY
                                                     "~&[EMAIL PROTECTED] #~D ~]WHERE 
rule ~A of ~A~%  Error: ~A"
                                                     (UNLESS
                                                         (EQUAL " "
                                                                
EXPRESSO::*CURRENT-ENTITY*)
                                                       (ENTITY-ID
                                                        EXPRESSO::*CURRENT-ENTITY*
                                                        *DATASET*))
                                                     (OR EXPRESSO::LABEL
                                                         "(unlabeled)")
                                                     "COMPONENT_2D_LOCATION"
                                                     EXPRESSO::ERR)))))
            (COND
             ((EQL #:G67197 :?)
              (WHEN (GET-OPTION EXPRESSO::VALIDATION-REPORT-?-UNKNOWN-OPT)
                (INFO-MESSAGE
                 "~&[EMAIL PROTECTED] #~D ~]WHERE rule ~A of ~A returns an 
indeterminate value.~%"
                 (UNLESS (EQUAL " " EXPRESSO::*CURRENT-ENTITY*)
                   (ENTITY-ID EXPRESSO::*CURRENT-ENTITY* *DATASET*))
                 (OR EXPRESSO::LABEL "(unlabeled)")
                 "COMPONENT_2D_LOCATION")))
             ((EQL #:G67197 :U)
              (WHEN (GET-OPTION EXPRESSO::VALIDATION-REPORT-?-UNKNOWN-OPT)
                (INFO-MESSAGE
                 "~&[EMAIL PROTECTED] #~D ~]WHERE rule ~A of ~A returns logical value 
UNKNOWN.~%"
                 (UNLESS (EQUAL " " EXPRESSO::*CURRENT-ENTITY*)
                   (ENTITY-ID EXPRESSO::*CURRENT-ENTITY* *DATASET*))
                 (OR EXPRESSO::LABEL "(unlabeled)")
                 "COMPONENT_2D_LOCATION")))
             ((OR (NULL #:G67197) (EQL #:G67197 :F))
              (EXPRESS-ERROR BAD-ENTITY
                             "~&[EMAIL PROTECTED] #~D ~]WHERE rule ~A of ~A failed."
                             (UNLESS (EQUAL " " EXPRESSO::*CURRENT-ENTITY*)
                               (ENTITY-ID EXPRESSO::*CURRENT-ENTITY*
                                          *DATASET*))
                             (OR EXPRESSO::LABEL "(unlabeled)")
                             "COMPONENT_2D_LOCATION"))
             (T T))))))
T

;; Now that I have all the pieces, I'll put them together.  Below is
;; the full expansion above with the two internal macro expansion
;; included.

(PROGN
 (PCL::PROCLAIM-DEFGENERIC 'WHERE-RULES '(INSTANCE))
 (PCL::LOAD-DEFMETHOD 'STANDARD-METHOD
                      'WHERE-RULES
                      '(:AFTER)
                      (LIST 'AE.COMPONENT_2D_LOCATION)
                      '(INSTANCE)
                      (LIST* :FAST-FUNCTION
                             (LAMBDA
                                 (PCL::.PV-CELL. PCL::.NEXT-METHOD-CALL.
                                  INSTANCE)
                               (DECLARE
                                (IGNORABLE PCL::.PV-CELL.
                                 PCL::.NEXT-METHOD-CALL.))
                               (DECLARE
                                (PCL:METHOD-LAMBDA-LIST
                                 (INSTANCE AE.COMPONENT_2D_LOCATION)))
                               (DECLARE
                                (PCL::METHOD-NAME
                                 (WHERE-RULES (:AFTER)
                                              (AE.COMPONENT_2D_LOCATION))))
                               (DECLARE (IGNORABLE INSTANCE))
                               (MACROLET ((PCL::PV-ENV
                                              ((PCL::PV PCL::CALLS
                                                PCL::PV-TABLE-SYMBOL
                                                PCL::PV-PARAMETERS)
                                               &REST PCL::FORMS)
                                            (DECLARE
                                             (IGNORE PCL::PV-TABLE-SYMBOL
                                              PCL::PV-PARAMETERS))
                                            `(LET ((,PCL::PV
                                                    (CAR PCL::.PV-CELL.))
                                                   (,PCL::CALLS
                                                    (CDR PCL::.PV-CELL.)))
                                               (DECLARE
                                                (TYPE LIST PCL::.PV-CELL.))
                                               (DECLARE
                                                (IGNORABLE ,PCL::PV
                                                 ,PCL::CALLS))
                                               ,@PCL::FORMS)))
                                 (PCL::FAST-LEXICAL-METHOD-FUNCTIONS
                                  ((INSTANCE) PCL::.NEXT-METHOD-CALL.
                                   (INSTANCE) NIL :METHOD-NAME-DECLARATION
                                   ((WHERE-RULES (:AFTER)
                                                 (AE.COMPONENT_2D_LOCATION)))
                                   :CALL-NEXT-METHOD-P NIL :NEXT-METHOD-P-P NIL
                                   :CLOSUREP NIL :APPLYP NIL)
                                  (DECLARE
                                   (CLASS INSTANCE AE.COMPONENT_2D_LOCATION))
                                  (BLOCK WHERE-RULES
                                    (DBG-MESSAGE :VALIDATE
                                                 3
                                                 "~%  Checking Entity ~S<~A>"
                                                 INSTANCE
                                                 'AE.COMPONENT_2D_LOCATION)
                                    (LET ((*FOCUS-PARTIAL-CONTEXT* 
'(AE.COMPONENT_2D_LOCATION)))
  (LET ((EXPRESSO::RULES
       (LIST
        (LIST "WR1"
              #'(LAMBDA ()
                  (EXPRESS-OR (EXPRESS-NOT (%SUBSTRATE_LOCATION INSTANCE NIL))
                              (EXPRESS-EQUAL
                               (%MIRROR (%TRANSFORMATION INSTANCE NIL) 'NIL)
                               NIL)))))))
  (SET-SPECIAL EXPRESSO::WHERE-RULE-ENTITY
               (STRIP-SCHEMA-QUALIFIER 'AE.COMPONENT_2D_LOCATION))
  (LOOP EXPRESSO::FOR (EXPRESSO::LABEL FUNC) IN EXPRESSO::RULES
        DO
        (SET-SPECIAL EXPRESSO::WHERE-RULE-LABEL EXPRESSO::LABEL)
        (WHEN (STRING-EQUAL EXPRESSO::LABEL "NIL") (SETF EXPRESSO::LABEL NIL))
        (DBG-MESSAGE :VALIDATE 2 "~&  Running WHERE Rule ~A...~%"
                     (OR EXPRESSO::LABEL "(no label)"))
        (DBG-MESSAGE :VALIDATE 3 "~&  ~A Function: ~S~%"
                     (OR EXPRESSO::LABEL "(no label)")
                     FUNC)
        (CATCH 'EXPRESSO::NEXT-WHERE-RULE-CHECK
          (LET ((#:G67197
                 (HANDLER-CASE (FUNCALL FUNC)
                               (ERROR (EXPRESSO::ERR)
                                      (EXPRESS-ERROR BAD-ENTITY
                                                     "~&[EMAIL PROTECTED] #~D ~]WHERE 
rule ~A of ~A~%  Error: ~A"
                                                     (UNLESS
                                                         (EQUAL " "
                                                                
EXPRESSO::*CURRENT-ENTITY*)
                                                       (ENTITY-ID
                                                        EXPRESSO::*CURRENT-ENTITY*
                                                        *DATASET*))
                                                     (OR EXPRESSO::LABEL
                                                         "(unlabeled)")
                                                     "COMPONENT_2D_LOCATION"
                                                     EXPRESSO::ERR)))))
            (COND
             ((EQL #:G67197 :?)
              (WHEN (GET-OPTION EXPRESSO::VALIDATION-REPORT-?-UNKNOWN-OPT)
                (INFO-MESSAGE
                 "~&[EMAIL PROTECTED] #~D ~]WHERE rule ~A of ~A returns an 
indeterminate value.~%"
                 (UNLESS (EQUAL " " EXPRESSO::*CURRENT-ENTITY*)
                   (ENTITY-ID EXPRESSO::*CURRENT-ENTITY* *DATASET*))
                 (OR EXPRESSO::LABEL "(unlabeled)")
                 "COMPONENT_2D_LOCATION")))
             ((EQL #:G67197 :U)
              (WHEN (GET-OPTION EXPRESSO::VALIDATION-REPORT-?-UNKNOWN-OPT)
                (INFO-MESSAGE
                 "~&[EMAIL PROTECTED] #~D ~]WHERE rule ~A of ~A returns logical value 
UNKNOWN.~%"
                 (UNLESS (EQUAL " " EXPRESSO::*CURRENT-ENTITY*)
                   (ENTITY-ID EXPRESSO::*CURRENT-ENTITY* *DATASET*))
                 (OR EXPRESSO::LABEL "(unlabeled)")
                 "COMPONENT_2D_LOCATION")))
             ((OR (NULL #:G67197) (EQL #:G67197 :F))
              (EXPRESS-ERROR BAD-ENTITY
                             "~&[EMAIL PROTECTED] #~D ~]WHERE rule ~A of ~A failed."
                             (UNLESS (EQUAL " " EXPRESSO::*CURRENT-ENTITY*)
                               (ENTITY-ID EXPRESSO::*CURRENT-ENTITY*
                                          *DATASET*))
                             (OR EXPRESSO::LABEL "(unlabeled)")
                             "COMPONENT_2D_LOCATION"))
             (T T)))))))))))
                             '(:PLIST (:ARG-INFO (1))))
                      'NIL
                      'NIL
                      'NIL))



Reply via email to