On 03 Sep 2014, at 17:29, Eliot Miranda <eliot.miranda@gmail.com> wrote:
Hi Uko,
On Wed, Sep 3, 2014 at 8:16 AM, Yuriy Tymchuk <yuriy.tymchuk@me.com> wrote: 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?
You check for the binding. e.g. self systemNavigation allCallsOn: (Undeclared bindingOf: #Foo)
Are you sure refersToLiteral: answers true for a method that directly refers to a binding but not directly to its key? This sounds like a bug to me.
Hi My bad. I didnât know that literal in this case is a full binding i.e. association. Thank you. Now Iâve got a bit smarter. Uko
Uko
On 03 Sep 2014, at 13:47, Marcus Denker <marcus.denker@inria.fr> wrote:
On Wed, Sep 3, 2014 at 11:24 AM, Yuriy Tymchuk <yuriy.tymchuk@me.com> 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 -- denker@acm.org http://www.marcusdenker.de
-- best, Eliot