Reading Gauche/vm/insn/GSET


Top / Reading Gauche / vm / insn / GSET

GSET

GSET symbol

説明

symbol が束縛している値を VAL0 で上書きする。

symbol が識別子(Identifier)であれば束縛を探索し、見つかった束縛(GLOC)を上書きする。
このとき symbol を見つかったGLOC(束縛)で置き換えている(手続きオブジェクトの改変)。
既に symbol がGLOCであればそのまま上書きする事ができる。そのため束縛の探索を減らすことができる。

束縛を探索するときに

  1. SCM_LIMIT_MODULE_MUTATIONフラグが立っており他のモジュールの束縛を探索しないため
  2. symbolが未定義のため

束縛が見つからない場合はエラーとなる。

使用例

(disasm (lambda () (set! x 1)))

;; 0 CONSTI(1)

;; 1 GSET #<identifier user#x>; x

;; 3 RET

メモ

set!を使用する手続きの定義

gosh> (define (hoge) (set! x 1))
hoge

xが未定義なのでエラーが返ってくる

gosh> (hoge)
*** ERROR: symbol not defined: #<identifier user#x>
Stack Trace:
_______________________________________

このときはIdentifier

gosh> (disasm hoge)
     0 CONSTI(1) 
     1 GSET #<identifier user#x>; x
     3 RET 

xを定義し実行

gosh> (define x 4)
x
gosh> (hoge)
1

xを見つかった束縛に置き換えた結果 identifier から gloc に変わっている

gosh> (disasm hoge)
     0 CONSTI(1) 
     1 GSET #<gloc user##x>     ; x
     3 RET 

再定義

gosh> (define (hoge) (set! x 1))
hoge
gosh> (disasm hoge)
     0 CONSTI(1) 
     1 GSET #<identifier user#x>; x
     3 RET 

関連項目

関連インストラクション

コメント

コメントはありません。 コメント/Reading Gauche/vm/insn/GSET?

お名前:

MENU

now: 3

リンク


最新の20件
2019-02-26 2018-10-07 2018-09-20 2018-05-09 2017-09-29 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-05-29 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 2877, today: 1, yesterday: 0

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-06-16 (月) 23:13:53 (4018d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.042 sec.