Self Handbook v2 for Self 4.4 documentation

Mirrors

Contents

Mirrors

collection
        mirror
                mirrors smallInt
                mirrors float
                mirrors vectorish
                        mirrors vector
                        mirrors byteVector
                                mirrors canonicalString
                                mirrors mirror
                mirrors block
                mirrors method
                mirrors blockMethod
                        mirrors activation liveOnes
                                mirrors activation
                                        mirrors deadActivation
                                        mirrors methodActivation
                                        mirrors blockMethodActivation
                mirrors process
                mirrors assignment
                mirrors slots
                mirrors profiler

Mirrors allow programs to examine and manipulate objects. (Mirrors get their name from the fact that a program can use a mirror to examine—that is, reflect upon—itself.) A mirror on an object x is obtained by sending the message reflect: x to any object that inherits defaultBehavior. The object x is called the mirror’s reflectee. A mirror behaves like a keyed collection whose keys are slot names and whose values are mirrors on the contents of slots of the reflectee. A mirror can be queried to discover the number and names of the slots in its reflectee, and which slots are parent slots. A mirror can be used to add and remove slots of its reflectee. Iterating through a mirror enumerates objects representing slots of the reflected object (such facets are called “fake” slots). For example, a method mirror includes fake slots for the method’s byte code and literal vectors and elements of vectors and byteVectors.

There is one kind of mirror for each kind of object known to the virtual machine: small integers, floats, canonical strings, object and byte vectors, mirrors, blocks, ordinary and block methods, ordinary and block method activations, processes, profilers, the assignment primitive, and ordinary objects (called “slots” because an ordinary object is just a set of slots). The prototypes for these mirrors are part of the initial Self world that exists before reading in any script files. The file init.self moves these prototypes to the mirrors subcategory of the prototypes category of the lobby namespace. Because mirrors is not a parent slot, the names of the mirror prototypes always include the “mirrors” prefix.

Modules: mirror, slot, init

Contents