SysDict.st
author claus
Wed, 15 Feb 1995 11:25:20 +0100
changeset 252 cf6eef7703ad
parent 95 d22739a0c6e9
child 379 5b5a130ccd09
permissions -rw-r--r--
(none)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
78
7ca635a615e8 Initial revision
claus
parents:
diff changeset
     1
"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1994 by Claus Gittinger
7ca635a615e8 Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
7ca635a615e8 Initial revision
claus
parents:
diff changeset
     4
7ca635a615e8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
7ca635a615e8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
7ca635a615e8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
7ca635a615e8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
7ca635a615e8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    11
"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    12
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    13
Collection subclass:#SystemDictionary
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'sysId'
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    15
       classVariableNames:''
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    16
       poolDictionaries:''
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    17
       category:'System-Support'
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    18
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    19
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    20
SystemDictionary comment:'
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    21
COPYRIGHT (c) 1994 by Claus Gittinger
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    22
             All Rights Reserved
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
    23
252
claus
parents: 95
diff changeset
    24
$Header: /cvs/stx/stx/libbasic/Attic/SysDict.st,v 1.4 1995-02-15 10:25:07 claus Exp $
78
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    25
'!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    26
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    27
!SystemDictionary class methodsFor:'documentation'!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    28
88
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    29
copyright
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    30
"
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    31
 COPYRIGHT (c) 1994 by Claus Gittinger
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    32
              All Rights Reserved
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    33
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    34
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    35
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    36
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    37
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    38
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    39
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    40
"
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    41
!
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    42
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    43
version
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    44
"
252
claus
parents: 95
diff changeset
    45
$Header: /cvs/stx/stx/libbasic/Attic/SysDict.st,v 1.4 1995-02-15 10:25:07 claus Exp $
88
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    46
"
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    47
!
81dacba7a63a *** empty log message ***
claus
parents: 78
diff changeset
    48
78
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    49
documentation
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    50
"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    51
    SystemDictionaries are nameSpaces, which are also known in the c-world
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    52
    somehow (i.e. names found in SystemDictionaries may also be known as
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    53
    a c-global).
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    54
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    55
    As you will notice, this is NOT a Dictionary
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    56
     - my implementation of globals is totally different
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    57
       (due to the need to be able to access globals from c-code as well).
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    58
    However, it provides the known enumeration protocol.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    59
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    60
    Instance variables:
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    61
        sysId           <SmallInteger>  the dictionaries id
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    62
"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    63
! !
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    64
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    65
!SystemDictionary methodsFor:'accessing'!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    66
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    67
at:aKey
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    68
    "retrieve the value stored under aKey, which must be some kind of symbol.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    69
     Return nil if not present."
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    70
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    71
%{  /* NOCONTEXT */
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    72
    extern OBJ _SYSDICT_GET();
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    73
252
claus
parents: 95
diff changeset
    74
    if (__isSmallInteger(_INST(sysId))) {
78
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    75
        RETURN ( _SYSDICT_GET(_intVal(_INST(sysId)), aKey) );
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    76
    }
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    77
%}.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    78
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    79
     the receiver is not a valid systemDictionary
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    80
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    81
    self pimitiveFailed
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    82
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    83
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    84
at:aKey ifAbsent:aBlock
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    85
    "retrieve the value stored under aKey.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    86
     If there is none stored this key, return the value of
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    87
     the evaluation of aBlock"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    88
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    89
    (self includesKey:aKey) ifTrue:[
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    90
        ^ self at:aKey
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    91
    ].
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    92
    ^ aBlock value
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    93
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    94
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    95
at:aKey put:aValue
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    96
    "store the argument aValue under aKey, which must be some kind of symbol."
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    97
7ca635a615e8 Initial revision
claus
parents:
diff changeset
    98
%{  /* NOCONTEXT */
252
claus
parents: 95
diff changeset
    99
    if (__isSmallInteger(_INST(sysId))) {
78
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   100
        _SYSDICT_SET(_intVal(_INST(sysId)), aKey, aValue, (OBJ *)0);
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   101
        RETURN (aValue);
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   102
    }
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   103
%}.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   104
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   105
     the receiver is not a valid systemDictionary
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   106
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   107
    self pimitiveFailed
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   108
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   109
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   110
removeKey:aKey
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   111
    "remove the argument from the globals dictionary"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   112
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   113
%{  /* NOCONTEXT */
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   114
    extern OBJ _SYSDICT_REMOVE();
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   115
252
claus
parents: 95
diff changeset
   116
    if (__isSmallInteger(_INST(sysId))) {
78
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   117
        RETURN ( _SYSDICT_REMOVE(_intVal(_INST(sysId)), aKey) );
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   118
    }
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   119
%}.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   120
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   121
     the receiver is not a valid systemDictionary
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   122
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   123
    self pimitiveFailed
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   124
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   125
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   126
includesKey:aKey
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   127
    "return true, if the key is known"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   128
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   129
%{  /* NOCONTEXT */
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   130
    extern OBJ _SYSDICT_KEYKNOWN();
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   131
252
claus
parents: 95
diff changeset
   132
    if (__isSmallInteger(_INST(sysId))) {
78
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   133
        RETURN ( _SYSDICT_KEYKNOWN(_intVal(_INST(sysId)), aKey) );
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   134
    }
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   135
%}.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   136
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   137
     the receiver is not a valid systemDictionary
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   138
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   139
    self pimitiveFailed
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   140
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   141
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   142
keyAtValue:anObject
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   143
    "return the symbol under which anObject is stored - or nil"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   144
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   145
    self allKeysDo:[:aKey |
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   146
        (self at:aKey) == anObject ifTrue:[^ aKey]
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   147
    ]
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   148
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   149
    "Smalltalk keyAtValue:Object"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   150
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   151
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   152
keys
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   153
    "return a collection with all keys in the Smalltalk dictionary"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   154
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   155
    |keys|
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   156
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   157
    keys := IdentitySet new.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   158
    self allKeysDo:[:k | keys add:k].
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   159
    ^ keys
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   160
! !
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   161
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   162
!SystemDictionary class methodsFor:'copying'!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   163
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   164
shallowCopy
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   165
    "redefine copy - there is only one instance of each dictionary"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   166
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   167
    ^ self
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   168
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   169
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   170
simpleDeepCopy
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   171
    "redefine copy - there is only one instance of each dictionary"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   172
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   173
    ^ self
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   174
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   175
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   176
deepCopyUsing:aDictionary
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   177
    "redefine copy - there is only one instance of each dictionary"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   178
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   179
    ^ self
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   180
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   181
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   182
deepCopy
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   183
    "redefine copy - there is only one instance of each dictionary"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   184
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   185
    ^ self
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   186
! !
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   187
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   188
!SystemDictionary methodsFor:'inspecting'!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   189
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   190
inspect
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   191
    "redefined to launch a DictionaryInspector on the receiver
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   192
     (instead of the default InspectorView)."
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   193
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   194
    DictionaryInspectorView isNil ifTrue:[
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   195
        super inspect
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   196
    ] ifFalse:[
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   197
        DictionaryInspectorView openOn:self
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   198
    ]
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   199
! !
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   200
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   201
!SystemDictionary methodsFor:'enumeration'!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   202
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   203
do:aBlock
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   204
    "evaluate the argument, aBlock for all values in the dictionary"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   205
%{
252
claus
parents: 95
diff changeset
   206
    if (__isSmallInteger(_INST(sysId))) {
78
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   207
        _SYSDICT_DO(_intVal(_INST(sysId)), &aBlock COMMA_CON);
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   208
    }
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   209
%}.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   210
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   211
     the receiver is not a valid systemDictionary
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   212
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   213
    self pimitiveFailed
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   214
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   215
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   216
     Smalltalk do:[:value | value class name printNL]
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   217
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   218
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   219
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   220
allKeysDo:aBlock
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   221
    "evaluate the argument, aBlock for all keys in the dictionary"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   222
%{
252
claus
parents: 95
diff changeset
   223
    if (__isSmallInteger(_INST(sysId))) {
78
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   224
        _SYSDICT_KEYSDO(_intVal(_INST(sysId)), &aBlock COMMA_CON);
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   225
    }
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   226
%}.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   227
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   228
     the receiver is not a valid systemDictionary
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   229
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   230
    self pimitiveFailed
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   231
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   232
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   233
     Smalltalk allKeysDo:[:key | key printNL]
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   234
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   235
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   236
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   237
associationsDo:aBlock
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   238
    "evaluate the argument, aBlock for all key/value pairs 
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   239
     in the dictionary"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   240
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   241
    self allKeysDo:[:aKey |
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   242
        aBlock value:(aKey -> (self at:aKey))
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   243
    ]
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   244
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   245
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   246
     Smalltalk associationsDo:[:assoc | assoc printNL]
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   247
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   248
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   249
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   250
keysAndValuesDo:aBlock
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   251
    "evaluate the two-arg block, aBlock for all keys and values"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   252
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   253
    self allKeysDo:[:aKey |
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   254
        aBlock value:aKey value:(self at:aKey)
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   255
    ]
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   256
! !
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   257
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   258
!SystemDictionary methodsFor:'queries'!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   259
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   260
cellAt:aKey
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   261
    "return the address of a global cell
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   262
     - used internally for compiler only"
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   263
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   264
%{  /* NOCONTEXT */
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   265
    extern OBJ _SYSDICT_GETCELL();
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   266
252
claus
parents: 95
diff changeset
   267
    if (__isSmallInteger(_INST(sysId))) {
78
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   268
        RETURN ( _SYSDICT_GETCELL(_intVal(_INST(sysId)), aKey) );
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   269
    }
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   270
%}.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   271
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   272
     the receiver is not a valid systemDictionary
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   273
    "
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   274
    self pimitiveFailed
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   275
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   276
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   277
references:anObject
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   278
    "return true, if I refer to the argument, anObject
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   279
     must be reimplemented since systemDictionaries are no real collections."
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   280
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   281
    self do:[:o |
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   282
        (o == anObject) ifTrue:[^ true]
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   283
    ].
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   284
    ^ false
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   285
! !
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   286
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   287
!SystemDictionary class methodsFor: 'binary storage'!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   288
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   289
addGlobalsTo:globalDictionary manager: manager
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   290
    |pools|
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   291
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   292
    pools := Set new.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   293
    self associationsDo:[:assoc |
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   294
	|value|
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   295
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   296
        value := assoc value.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   297
        value == self ifFalse:[
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   298
            value isClass ifTrue:[
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   299
                value addGlobalsTo:globalDictionary manager:manager.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   300
                pools addAll:value sharedPools
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   301
            ] ifFalse:[
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   302
                globalDictionary at:assoc put:self
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   303
            ].
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   304
            value isNil ifFalse:[
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   305
                globalDictionary at:value put:self
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   306
            ]
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   307
        ]
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   308
    ].
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   309
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   310
    pools do:[:poolDictionary|
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   311
        poolDictionary addGlobalsTo:globalDictionary manager:manager
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   312
    ]
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   313
!
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   314
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   315
storeBinaryDefinitionOf:anObject on:stream manager:manager
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   316
    |string|
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   317
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   318
    anObject class == Association ifTrue:[
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   319
        string := 'Smalltalk associationAt:', anObject key storeString
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   320
    ] ifFalse: [
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   321
        string := 'Smalltalk at:', (self keyAtValue: anObject) storeString
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   322
    ].
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   323
    stream nextNumber:2 put:string size.
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   324
    string do:[:char | stream nextPut:char asciiValue]
7ca635a615e8 Initial revision
claus
parents:
diff changeset
   325
! !