one more question. How can you find out if method references a thing like that?
Because if you do: #refersToLiteral: and pass a key from Undeclared you may also match a symbol which is completely ok. Is there a way to check only for variables? Uko On 03 Sep 2014, at 13:47, Marcus Denker <[email protected]> wrote: > > > > On Wed, Sep 3, 2014 at 11:24 AM, Yuriy Tymchuk <[email protected]> wrote: > Hi, can someone explain me how Undeclared dictionary works? > > > So imagine you want to load code where a variable is not defined (e.g. due to > loading old code, > or because it references a variable that will only be loaded in a second > step). > > In interactive mode, the compiler tells you. But in non-interactive mode > (file in, mc load), > it just loads the wrong code and for every undeclared variable, it adds an > entry in the > Undeclared dictionary. > (the bytecode to read and write is the same as used for Globals and Class > variables: > pushLiteralVariable, which means "push the value of the association", the > store bytecode > for assignment therefore is "store in the value of that association". > > So if you actually run code that has Undeclared, it will work: it will be nil > by default, > but when you assign it will store into the Undeclared dictionary. > > When you add a new Global to the SystemDictionary, it will check Undeclared > and > move the value over. Same for Class vars. > (this means that loading a class will automatically fix all Undeclared > references to it) > > > Because as I look at it, all the values are nil. Is it possible for them to > be not nil? > > yes. > > Maybe we should have a “global variable comments” for this situations :) > > > Ideed. > > -- > Marcus Denker -- [email protected] > http://www.marcusdenker.de
