The IQ application will be briefly unavailable on Sunday, March 31st, starting at 10:00am ET. Access will be restored as quickly as possible.
Browse Prior Art Database

Adding Pointers to LIIVISEX

IP.com Disclosure Number: IPCOM000128362D
Original Publication Date: 1985-Dec-31
Included in the Prior Art Database: 2005-Sep-15
Document File: 6 page(s) / 21K

Publishing Venue

Software Patent Institute

Related People

Man-shan V. Wong: AUTHOR [+2]


This report shows how the present Unisex system is modified to handle Pascal pointer variables.

This text was extracted from a PDF file.
This is the abbreviated version, containing approximately 28% of the total text.

Page 1 of 6


Adding Pointers to LIIVISEX

Man-shan V. Wong Department of Computer Science May 1985


Adding Pointers to UNISEX

by Man-shan V. Wong Updated May 31, 1985.


This report shows how the present Unisex system is modified to handle Pascal pointer variables.


A new type pointer is added. The pointers may point to any types. There are three different kinds of pointer variables and they are represented internally (i.e. in the lisp environment) as follows:

(Equation Omitted)

where `#' denotes a number generated by the command "newsym" (for older version of Franz Lisp, "gen-sym" is used instead; it does not have much significance except for distinguishing between two different pointer variables) and NAME is the name of the pointer variable; it may be followed by a chain of fields (e.g., x".y".z).

At the time of declaration, storage is allocated to each ordinary variable in the global variable VARLIST. But for pointer variables, this is not so; a name in the form of ""undef#" is used instead. Also a new global variable PTRLIST which stores al) the information about the allocated pointer vari-ables is added to the lisp environment. Here is an example:

(Equation Omitted)

At this point VARLIST is (((Head (pointer (rec record)) "undefl) (0))) where (0) is the current block number (which is not of concern here); and PTRLIST is

however, things are different in the verify mode since all variables are initialized and a pointer variable can be "new"ed in another part of a program. In addition to the aforementioned internal representa-tions, there are some more:

":$NAME first initialization ":@NAME initialization after the beginning of a program segment " @NAME allocated

University of California at Santa Barbara Page 1 Dec 31, 1985

Page 2 of 6

Adding Pointers to LIIVISEX

The colons are not visible to the user. More details are discussed in the next section.


(A) New

After the statement


VARLIST becomes

(((Head (pointer (rec record)) "Headl) (0)))

and PTRLIST is

(('Headl (pointer (rec record)) ((info integer undefl) (next (pointer (rec record)) "undef2))

The head pointer is always stored in VARLIST while the links are stored in PTRLIST.

After the following statements

new(Head ".next); new(Head ".next ".next;

VARLIST remains the same while PTRLIST becomes

(("Ileadl (pointer (rec record)) ((info integer undefl) (next (pointer (rec record)) "Head".nextl)) ("head".nextl (pointer (rec record)) ((info integer undef2) (next (pointer (rec record)) ^Head ".next".nextl)) ('dead".next'.nextl (pointer (rec record)) ((info integer undef3) (next (pointer (rec record)) "undef4))

So any of the variables on the link can be accessed, for instance, Head".next".next".info can be reached in the following way:

"llcadl - 'head".nextl --* ^Head ".next'.nextl -* undef (B) Dispose

Dispose is done by changing the corresponding value of the pointer variable to the...