1
0
mirror of synced 2026-01-21 10:32:13 +00:00

145 lines
4.9 KiB
Plaintext

;; Function To Be Tested: . (MASTERSCOPE) (Programmer's Assistant Command)
;;
;; Source: Xerox Common Lisp Implementation Notes (Lyric Beta Release)
;; Section 20.2 (The Evaluator), Page 28
;; Section: The Evaluator
;;
;; Created By: John Park
;;
;; Creation Date: Feb 25, 1987
;;
;; Last Update:
;;
;; Filed As: {ERIS}<lispcore>test>exec>masterscope.u
;;
;;
;; Syntax: . &rest LINE
;;
;; Function Description: Make a MASTERSCOPE query. Masterscope is an interactive
;; program for analyzing and cross referencing user programs. It contains
;; facilities for analyzing user functions to determine what other functions are
;; called, how and where variables are bound, set, or referenced, as well as
;; which functions use particular record declarations. Masterscope is able to
;; analyze definitions directly from a file as well as in-core definitions.
;;
;; Argument(s): Masterscope commands (SEE IRM, Vol 3, Section 19)
;;
;; Returns: (SEE IRM, Vol 3, Section 19)
;;
;; Constraints/Limitations: Due to the nature of Programmer's Assistant commands,
;; testing them will not be totally automatic. Comments are incorporated within
;; each command file, which will be run by using the function bksysbuf.
;; Each test setup is titled "COMMAND-TEST-SETUP", which executes the command
;; string. The do-test form within the command file will return T or "test
;; failed" This test file requires TEDIT and MASTERSCOPE package
;; The tree structure of the functions being analyzed are as follows:
;;
;; Top-Function
;; |
;; Func-A------------------------Fun-B
;; | |
;; --------------------- --------------------
;; | | | | | |
;; Func-A1 Func-A2 Func-A3 Func-B1 Func-B2 Func-B3
;; |
;; --------------
;; | |
;; Func-C1 Func-A1
;;
;; Messages will be printed before each command in the command files is executed
;; for user monitoring. Test result is logged on
;; {eris}<lispcore>test>exec>test.report.
(DO-TEST "MASTERSCOPE-TEST-SETUP"
(PROGN
(SETQ MESS1 "Now do-test will determine if correct results have been returned for the analysis of user functions...")
(SETQ TEST-RESULT "{ERIS}<LISPCORE>TEST>EXEC>TEST.REPORT")
(DEFUN R-FORMAT (STATUS)
(FORMAT *OUTPUT* "~2%COMMAND:MASTERSCOPE~%STATUS: ~A DATE: ~A TESTER: ~A~%" STATUS (IL:DATE) IL:USERNAME))
(DEFUN TOP-FUNCTION NIL (AND (FUNC-A) (FUNC-B)))
(DEFUN FUNC-A NIL (OR (FUNC-A1) (FUNC-A2) (FUNC-A3)))
(DEFUN FUNC-B NIL (OR (FUNC-B1) (FUNC-B2) (FUNC-B3)))
(DEFUN FUNC-A1 NIL T)
(DEFUN FUNC-A2 NIL NIL)
(DEFUN FUNC-A3 NIL T)
(DEFUN FUNC-B1 NIL (AND (FUNC-C1)(FUNC-A1)))
(DEFUN FUNC-B2 NIL NIL)
(DEFUN FUNC-B3 NIL T)
(DEFUN FUNC-C1 NIL NIL)
(SETQ {CORE}WHO-CALLS "{CORE}WHO-CALLS")
(SETQ {CORE}PATHS "{CORE}PATHS")
(SETQ MASTERSCOPE-COMMAND-STRING
"; Start analyzing functions in top-function
. ANALYZE TOP-FUNCTION
. ANALYZE FUNC-A
. ANALYZE FUNC-B
. ANALYZE FUNC-B1
. WHO CALLS FUNC-A1
(IF (EQUAL * '(FUNC-A FUNC-B1)) (SETQ FUNC-A1-CALL T) (SETQ FUNC-A1-CALL NIL))
. WHO CALLS TOP-FUNCTION
(IF (EQUAL * NIL) (SETQ TOP-FUNC-CALL T) (SETQ TOP-FUNC-CALL NIL))
. WHO CALLS FUNC-A
(IF (EQUAL * '(TOP-FUNCTION)) (SETQ FUNC-A-CALL T) (SETQ FUNC-A-CALL NIL))
. WHO CALLS FUNC-B2
(IF (EQUAL * '(FUNC-B)) (SETQ FUNC-B-CALL T) (SETQ FUNC-B-CALL NIL))
(DRIBBLE '{CORE}WHO-CALLS)
. WHO CALLS WHO
(DRIBBLE)
(DRIBBLE '{CORE}PATHS)
. SHOW PATHS TO FUNC-A1 FROM TOP-FUNCTION
(DRIBBLE)
; analyzing the file that contains the previous masterscope interactions
; (who calls?)
(SETQ CALL-LIST '(|func-b -- (func-b1 func-b2 func-b3)|
|func-b1 -- (func-c1 func-a1)|
|func-a -- (func-a1 func-a2 func-a3)|
|top-function -- (func-a func-b)|))
(SETQ WHO-CALLS-FLG NIL)
(SETQ WHO-CALLS (OPEN {CORE}WHO-CALLS))
(READ-LINE WHO-CALLS)
(READ-LINE WHO-CALLS)
(DOLIST (Y CALL-LIST) (IF (STRING-EQUAL Y (READ-LINE WHO-CALLS))
(PUSH T WHO-CALLS-FLG)
(PUSH NIL WHO-CALLS-FLG)))
(CLOSE WHO-CALLS)
; analyzing the file that contains the masterscope interaction (show paths)
(SETQ PATHS (OPEN {CORE}PATHS))
(DO (( i 0 (1+ i)))
((= i 5) t)
(READ-LINE PATHS))
(IF (AND (STRING-EQUAL (READ-LINE PATHS) '|1.func-a1 func-a top-function|)
(STRING-EQUAL (READ-LINE PATHS) '|2. func-b1 func-b top-function|))
(SETQ PATHS-FLG T)(SETQ PATHS-FLG NIL))
(CLOSE PATHS)
(DELETE-FILE '{CORE}PATHS)
(DELETE-FILE '{CORE}WHO-CALLS)
(FORMAT NIL MESS1)
(DO-TEST 'MASTERSCOPE-TEST-RESULT
(PROG2 (SETQ *OUTPUT* (OPEN TEST-RESULT :DIRECTION :OUTPUT
:IF-EXISTS :APPEND))
(IF (AND (EQ FUNC-A1-CALL T)
(EQ TOP-FUNC-CALL T)
(EQ FUNC-A-CALL T)
(EQ FUNC-B-CALL T)
(EQ PATHS-FLG T)
(NOTANY #'NULL WHO-CALLS-FLG))
(PROGN (R-FORMAT 'SUCCESS) T)
(PROGN (R-FORMAT 'FAIL) NIL))
(CLOSE *OUTPUT*)
)
)
")
(IL:BKSYSBUF MASTERSCOPE-COMMAND-STRING)
)
)
STOP