guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: vm branch now uses vm repl by default


From: Andy Wingo
Subject: Re: vm branch now uses vm repl by default
Date: Tue, 09 Sep 2008 19:59:50 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (gnu/linux)

Hi,

On Tue 09 Sep 2008 10:27, "Neil Jerram" <address@hidden> writes:

> 2008/9/9 Andy Wingo <address@hidden>:
>
>>    scheme@(guile-user)> (lambda () (pk a #:bar))
>>    $2 = #<program b755ecf8>
>>    scheme@(guile-user)> ,x $2
>>    Disassembly of #<program b755ecf8>:
>>
>>    nargs = 0  nrest = 0  nlocs = 0  nexts = 0
>>
>>    Bytecode:
>>
>>       0    (late-variable-ref 0)
>>       2    (late-variable-ref 1)
>>       4    (object-ref 2)                  ;; #:bar
>>       6    (tail-call 2)
>>
>>    Objects:
>>
>>       0    #<variable b80057f0 value: #<program b8005858>>
>>       1    #<variable b7569af0 value: (a . pair)>
>>       2    #:bar
>
> Where in the bytecode is `pk', or some kind of reference to it?

It's object 0:

    scheme@(guile-user)> ,x (lambda () (pk a #:bar))
    Disassembly of #<program b7fedfc8>:

    nargs = 0  nrest = 0  nlocs = 0  nexts = 0

    Bytecode:

       0    (late-variable-ref 0)
       2    (late-variable-ref 1)
       4    (object-ref 2)                  ;; #:bar
       6    (tail-call 2)

    Objects:

       0    pk
       1    a
       2    #:bar

    Sources:

       8    #(0 14 #f)

The objects are stored in a vector. When late-variable-ref or -set is
called and the top of the stack is a symbol, it gets looked up and the
resulting variable replaced into where the symbol was. See:

   
http://git.savannah.gnu.org/gitweb/?p=guile.git;a=blob;f=libguile/vm-i-system.c;h=54689116942bc5d5f942ebcc6500e1e9b610e4c9;hb=refs/heads/vm#l262

Andy
-- 
http://wingolog.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]