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))