NewtObj.h

オブジェクトシステム [詳細]

#include "NewtType.h"

ソースコードを見る。

マクロ定義

#define NOBJ_ADDR_SHIFT   0
 addr <--> integer 時のシフト
#define NewtRefIsInt30(r)   ((r & 3) == 0)
 30bit整数オブジェクトか?
#define NewtRefToInt30(r)   (int32_t)((int32_t)r >> 2)
 オブジェクトを 30bit整数に変換
#define NewtMakeInt30(v)   (newtRef)((int32_t)(v) << 2)
 30bit整数オブジェクトを作成
#define NewtRefIsPointer(r)   ((r & 3) == 1)
 ポインタオブジェクトか?
#define NewtRefToPointer(r)   (newtObjRef)((uint32_t)r - 1)
 オブジェクト参照をポインタに変換
#define NewtMakePointer(v)   (newtRef)((uint32_t)(v) + 1)
 ポインタオブジェクトを作成
#define NewtRefIsCharacter(r)   ((r & 0xF) == 6)
 文字オブジェクトか?
#define NewtRefToCharacter(r)   (int)(((uint32_t)r >> 4) & 0xFFFF)
 オブジェクト参照を文字に変換
#define NewtMakeCharacter(v)   (newtRef)(((uint32_t)(v) << 4) | 6)
 文字オブジェクトを作成
#define NewtRefIsSpecial(r)   ((r & 0xF) == 2)
 特殊オブジェクトか?
#define NewtRefToSpecial(r)   (int32_t)((uint32_t)r >> 2)
 オブジェクト参照を特殊値に変換
#define NewtRefIsMagicPointer(r)   ((r & 3) == 3)
 マジックポインタか?
#define NewtMakeNamedMP(r)   ((newtRef)((uint32_t)NewtMakeSymbol(r) | 3))
 名前付マジックポインタを作成
#define NewtMPToSymbol(r)   ((newtRef)((uint32_t)r & 0xFFFFFFFD))
 名前付マジックポインタをシンボルに変換
#define NewtSymbolToMP(r)   ((newtRef)((uint32_t)r | 3))
 シンボルを名前付マジックポインタに変換
#define NewtRefIsNotNIL(v)   (! NewtRefIsNIL(v))
 NIL 以外か?
#define NewtMakeBoolean(v)   ((newtRef)((v)?(kNewtRefTRUE):(kNewtRefNIL)))
 ブール値オブジェクトを作成
#define NewtRefToBinary(r)   ((uint8_t *)NewtRefToData(r))
 バイナリデータへのポインタを取得
#define NewtRefToSymbol(r)   ((newtSymDataRef)NewtRefToData(r))
 シンボルデータへのポインタを取得
#define NewtRefToString(r)   ((char *)NewtRefToData(r))
 文字列データへのポインタを取得
#define NewtRefToSlots(r)   ((newtRef *)NewtRefToData(r))
 スロットデータへのポインタを取得
#define NewtArrayLength(r)   NewtSlotsLength(r)
 配列の長さを取得
#define NewtFrameLength(r)   NewtSlotsLength(r)
 フレームの長さを取得
#define NewtObjType(v)   (v->header.h & 3)
 オブジェクトタイプを取得
#define NewtObjIsSlotted(v)   ((v->header.h & kNewtObjSlotted) != 0)
 オブジェクトデータがスロットか?
#define NewtObjIsArray(v)   (NewtObjType(v) == 1)
 オブジェクトデータが配列か?
#define NewtObjIsFrame(v)   (NewtObjType(v) == 3)
 オブジェクトデータがフレームか?
#define NewtObjIsLiteral(v)   ((v->header.h & kNewtObjLiteral) == kNewtObjLiteral)
 リテラルか?
#define NewtObjIsSweep(v, mark)   (((v->header.h & kNewtObjSweep) == kNewtObjSweep) == mark)
 スウィープ対象か?
#define NewtObjSize(v)   (v->header.h >> 8)
 オブジェクトデータのサイズを取得
#define NewtObjBinaryClass(v)   (v->as.klass)
 Low-level API. Use NewtObjClassOf when needed.
#define NewtObjArrayClass(v)   (v->as.klass)
 Low-level API. Use NewtObjClassOf when needed.
#define NewtObjToBinary(v)   ((uint8_t *)NewtObjData(v))
 バイナリデータ部へのポインタ
#define NewtObjToSymbol(v)   ((newtSymDataRef)NewtObjData(v))
 シンボルデータ部へのポインタ
#define NewtObjToString(v)   ((char *)NewtObjData(v))
 文字列データ部へのポインタ
#define NewtObjToSlots(v)   ((newtRef *)NewtObjData(v))
 スロットデータ部へのポインタ
#define NewtHasVar(name)   NVMHasVar(name)
 変数の存在チェック
#define NewtObjIsReadonly(obj)   NewtObjIsLiteral(obj)
 オブジェクトデータがリードオンリーか?
#define NewtRefIsReadonly(r)   NewtRefIsLiteral(r)
 オブジェクトがリードオンリーか?
#define NewtMakeNativeFunc(funcPtr, numArgs, doc)   NewtMakeNativeFunc0(funcPtr, numArgs, false, doc)
#define NewtDefGlobalFunc(sym, funcPtr, numArgs, doc)   NewtDefGlobalFunc0(sym, funcPtr, numArgs, false, doc)

型定義

typedef void(*) newt_install_t (void)
 拡張ライブラリのインストール用エントリ関数

列挙型

enum  { kNewtNotFunction = 0, kNewtCodeBlock, kNewtNativeFn, kNewtNativeFunc }

関数

uint32_t NewtSymbolHashFunction (const char *name)
newtRef NewtLookupSymbol (newtRefArg r, const char *name, uint32_t hash, int32_t st)
newtRef NewtLookupSymbolArray (newtRefArg r, newtRefArg name, int32_t st)
const char * NewtSymbolGetName (newtRefArg inSymbol)
uint16_t NewtGetRefType (newtRefArg r, bool detail)
uint16_t NewtGetObjectType (newtObjRef obj, bool detail)
uint32_t NewtObjCalcDataSize (uint32_t n)
newtObjRef NewtObjAlloc (newtRefArg r, uint32_t n, uint16_t type, bool literal)
newtObjRef NewtObjResize (newtObjRef r, uint32_t n)
void * NewtObjData (newtObjRef obj)
newtRef NewtObjClone (newtRefArg r)
newtRef NewtPackLiteral (newtRefArg r)
bool NewtRefIsLiteral (newtRefArg r)
bool NewtRefIsSweep (newtRefArg r, bool mark)
bool NewtRefIsNIL (newtRefArg r)
bool NewtRefIsSymbol (newtRefArg r)
uint32_t NewtRefToHash (newtRefArg r)
bool NewtRefIsString (newtRefArg r)
bool NewtRefIsInteger (newtRefArg r)
int32_t NewtRefToInteger (newtRefArg r)
bool NewtRefIsInt32 (newtRefArg r)
bool NewtRefIsReal (newtRefArg r)
double NewtRefToReal (newtRefArg r)
bool NewtRefIsBinary (newtRefArg r)
void * NewtRefToData (newtRefArg r)
bool NewtRefIsArray (newtRefArg r)
bool NewtRefIsFrame (newtRefArg r)
bool NewtRefIsFrameOrArray (newtRefArg r)
bool NewtRefIsImmediate (newtRefArg r)
bool NewtRefIsCodeBlock (newtRefArg r)
bool NewtRefIsNativeFn (newtRefArg r)
bool NewtRefIsNativeFunc (newtRefArg r)
bool NewtRefIsFunction (newtRefArg r)
int NewtRefFunctionType (newtRefArg r)
bool NewtRefIsRegex (newtRefArg r)
void * NewtRefToAddress (newtRefArg r)
newtRef NewtMakeBinary (newtRefArg klass, uint8_t *data, uint32_t size, bool literal)
newtRef NewtMakeSymbol (const char *s)
newtRef NewtMakeString (const char *s, bool literal)
newtRef NewtMakeString2 (const char *s, uint32_t len, bool literal)
newtRef NewtBinarySetLength (newtRefArg r, uint32_t n)
newtRef NewtStringSetLength (newtRefArg r, uint32_t n)
newtRef NewtMakeInteger (int32_t v)
newtRef NewtMakeInt32 (int32_t v)
newtRef NewtMakeReal (double v)
newtRef NewtMakeArray (newtRefArg klass, uint32_t n)
newtRef NewtMakeArray2 (newtRefArg klass, uint32_t n, newtRefVar v[])
newtRef NewtMakeMap (newtRefArg superMap, uint32_t n, newtRefVar v[])
void NewtSetMapFlags (newtRefArg map, int32_t bit)
void NewtClearMapFlags (newtRefArg map, int32_t bit)
uint32_t NewtMapLength (newtRefArg map)
newtRef NewtMakeFrame (newtRefArg map, uint32_t n)
newtRef NewtMakeFrame2 (uint32_t n, newtRefVar v[])
newtRef NewtMakeSlotsObj (newtRefArg r, uint32_t n, uint16_t type)
uint32_t NewtObjSlotsLength (newtObjRef obj)
newtRef NewtObjAddArraySlot (newtObjRef obj, newtRefArg v)
newtRef NewtSlotsSetLength (newtRefArg r, uint32_t n, newtRefArg v)
newtRef NewtSetLength (newtRefArg r, uint32_t n)
newtRef NewtMakeAddress (void *addr)
newtRef NewtThrow0 (int32_t err)
newtRef NewtThrow (int32_t err, newtRefArg value)
newtRef NewtThrowSymbol (int32_t err, newtRefArg symbol)
newtRef NewtErrOutOfBounds (newtRefArg value, int32_t index)
void NewtErrMessage (int32_t err)
int NewtSymbolCompareLex (newtRefArg r1, newtRefArg r2)
int16_t NewtObjectCompare (newtRefArg r1, newtRefArg r2)
bool NewtRefEqual (newtRefArg r1, newtRefArg r2)
bool NewtObjectEqual (newtRefArg r1, newtRefArg r2)
bool NewtSymbolEqual (newtRefArg r1, newtRefArg r2)
uint32_t NewtLength (newtRefArg r)
uint32_t NewtDeeplyLength (newtRefArg r)
uint32_t NewtBinaryLength (newtRefArg r)
uint32_t NewtSymbolLength (newtRefArg r)
uint32_t NewtStringLength (newtRefArg r)
uint32_t NewtSlotsLength (newtRefArg r)
uint32_t NewtDeeplyFrameLength (newtRefArg r)
newtRef NewtObjGetSlot (newtObjRef obj, newtRefArg slot)
newtRef NewtObjSetSlot (newtObjRef obj, newtRefArg slot, newtRefArg v)
void NewtObjRemoveSlot (newtObjRef obj, newtRefArg slot)
newtRef NewtGetMapIndex (newtRefArg r, uint32_t index, uint32_t *indexP)
int32_t NewtFindArrayIndex (newtRefArg r, newtRefArg v, uint16_t st)
bool NewtFindMapIndex (newtRefArg r, newtRefArg v, uint32_t *indexP)
newtRef NewtFrameMap (newtRefArg r)
int32_t NewtFindSlotIndex (newtRefArg frame, newtRefArg slot)
bool NewtHasProto (newtRefArg frame)
bool NewtHasSlot (newtRefArg frame, newtRefArg slot)
newtRef NewtSlotsGetPath (newtRefArg r, newtRefArg p)
bool NewtHasPath (newtRefArg r, newtRefArg p)
newtRef NewtGetPath (newtRefArg r, newtRefArg p, newtRefVar *slotP)
newtRef NewtGetBinarySlot (newtRefArg r, uint32_t p)
newtRef NewtSetBinarySlot (newtRefArg r, uint32_t p, newtRefArg v)
newtRef NewtGetStringSlot (newtRefArg r, uint32_t p)
newtRef NewtSetStringSlot (newtRefArg r, uint32_t p, newtRefArg v)
newtRef NewtSlotsGetSlot (newtRefArg r, uint32_t p)
newtRef NewtSlotsSetSlot (newtRefArg r, uint32_t p, newtRefArg v)
newtRef NewtSlotsInsertSlot (newtRefArg r, uint32_t p, newtRefArg v)
newtRef NewtGetArraySlot (newtRefArg r, uint32_t p)
newtRef NewtSetArraySlot (newtRefArg r, uint32_t p, newtRefArg v)
newtRef NewtInsertArraySlot (newtRefArg r, uint32_t p, newtRefArg v)
newtRef NewtGetFrameSlot (newtRefArg r, uint32_t p)
newtRef NewtSetFrameSlot (newtRefArg r, uint32_t p, newtRefArg v)
newtRef NewtGetFrameKey (newtRefArg inFrame, uint32_t inIndex)
newtRef NewtARef (newtRefArg r, uint32_t p)
newtRef NewtSetARef (newtRefArg r, uint32_t p, newtRefArg v)
bool NewtAssignment (newtRefArg start, newtRefArg name, newtRefArg value)
bool NewtLexicalAssignment (newtRefArg start, newtRefArg name, newtRefArg value)
bool NewtHasLexical (newtRefArg start, newtRefArg name)
bool NewtHasVariable (newtRefArg r, newtRefArg name)
void * NewtRefToNativeFn (newtRefArg r)
newtRef NewtMakeNativeFn0 (void *funcPtr, uint32_t numArgs, bool indefinite, char *doc)
newtRef NewtDefGlobalFn0 (newtRefArg sym, void *funcPtr, uint32_t numArgs, bool indefinite, char *doc)
newtRef NewtMakeNativeFunc0 (void *funcPtr, uint32_t numArgs, bool indefinite, char *doc)
newtRef NewtDefGlobalFunc0 (newtRefArg sym, void *funcPtr, uint32_t numArgs, bool indefinite, char *doc)
bool NewtHasSubclass (newtRefArg sub, newtRefArg supr)
bool NewtIsSubclass (newtRefArg sub, newtRefArg supr)
bool NewtIsInstance (newtRefArg obj, newtRefArg r)
newtRef NewtStrCat (newtRefArg r, char *s)
newtRef NewtStrCat2 (newtRefArg r, char *s, uint32_t slen)
newtRef NewtGetEnv (const char *s)


説明

オブジェクトシステム

作者:
M.Nukui
日付:
2003-11-07
Copyright (C) 2003-2004 M.Nukui All rights reserved.

NewtObj.h で定義されています。


関数

newtRef NewtARef ( newtRefArg  r,
uint32_t  p 
)

オブジェクトの指定された位置から値を取得

引数:
r [in] オブジェクト
p [in] 位置
戻り値:
値オブジェクト

NewtObj.c3464 行で定義されています。

参照先 kNewtArraykNewtBinarykNewtRefNILkNewtStringNewtGetArraySlot()NewtGetBinarySlot()NewtGetRefType()NewtGetStringSlot().

参照元 iter_next()NcARef().

関数の呼び出しグラフ:

bool NewtAssignment ( newtRefArg  start,
newtRefArg  name,
newtRefArg  value 
)

検索された変数の保存場所に値をセットする

引数:
start [in] 開始オブジェクト
name [in] 変数名シンボル
value [in] 値オブジェクト
戻り値:
true 値がセットできた
false 値がセットできなかった

NewtObj.c3532 行で定義されています。

参照先 kNewtRefUnbindNcGetSlotNcResolveMagicPointer()NcSetSlotNewtHasSlot()NewtRefIsMagicPointerNewtRefIsNotNILNSSYM0.

参照元 is_find_and_set_var()NsSetVariable().

関数の呼び出しグラフ:

uint32_t NewtBinaryLength ( newtRefArg  r  ) 

バイナリオブジェクトの長さを取得

引数:
r [in] オブジェクト
戻り値:
オブジェクトの長さ

NewtObj.c2391 行で定義されています。

参照先 NewtObjSizeNewtRefToPointer.

参照元 NewtBinaryCompare()NewtGetBinarySlot()NewtLength()NewtSetBinarySlot()NewtSetStringSlot()NPSAddARef()NSOFWriteBinary()NsReadNSOF().

newtRef NewtBinarySetLength ( newtRefArg  r,
uint32_t  n 
)

バイナリオブジェクトのサイズを変更する

引数:
r [in] オブジェクト
n [in] サイズ
戻り値:
オブジェクト

NewtObj.c1222 行で定義されています。

参照先 NewtObjBinarySetLength()NewtRefToPointer.

参照元 NewtSetLength()NPSAddARef()NPSMakeBinary()NsSetLength().

関数の呼び出しグラフ:

void NewtClearMapFlags ( newtRefArg  map,
int32_t  bit 
)

マップのフラグをクリアする

引数:
map [in] マップオブジェクト
bit [in] フラグ
戻り値:
なし

NewtObj.c1552 行で定義されています。

参照先 NcClassOf()NcSetClass()NewtMakeInteger()NewtRefToInteger().

参照元 NewtObjRemoveFrameSlot().

関数の呼び出しグラフ:

uint32_t NewtDeeplyFrameLength ( newtRefArg  r  ) 

プロト継承でフレームオブジェクトの長さ(スロットの数)を取得

引数:
r [in] オブジェクト
戻り値:
オブジェクトの長さ

NewtObj.c2466 行で定義されています。

参照先 NcGetSlotNewtFrameLengthNewtRefIsNIL()NSSYM0.

参照元 NewtDeeplyLength().

関数の呼び出しグラフ:

uint32_t NewtDeeplyLength ( newtRefArg  r  ) 

オブジェクトの(深い)長さを取得

引数:
r [in] オブジェクト
戻り値:
オブジェクトの長さ
覚え書き:
フレームの場合はプロト継承で長さを計算する

NewtObj.c2364 行で定義されています。

参照先 kNewtFrameNewtDeeplyFrameLength()NewtGetRefType()NewtLength().

参照元 NsDeeplyLength().

関数の呼び出しグラフ:

newtRef NewtDefGlobalFn0 ( newtRefArg  sym,
void *  funcPtr,
uint32_t  numArgs,
bool  indefinite,
char *  doc 
)

ネイティブ関数(rcvrなし)のグローバル関数を登録する

引数:
sym [in] グローバル関数名
funcPtr [in] 関数のポインタ
numArgs [in] 引数の数
indefinite [in] 不定長フラグ
doc [in] 説明文
戻り値:
関数オブジェクト

NewtObj.c3736 行で定義されています。

参照先 NcDefGlobalFnNewtMakeNativeFn0().

関数の呼び出しグラフ:

newtRef NewtDefGlobalFunc0 ( newtRefArg  sym,
void *  funcPtr,
uint32_t  numArgs,
bool  indefinite,
char *  doc 
)

ネイティブ関数(rcvrあり)のグローバル関数を登録する

引数:
sym [in] グローバル関数名
funcPtr [in] 関数のポインタ
numArgs [in] 引数の数
indefinite [in] 不定長フラグ
doc [in] 説明文
戻り値:
関数オブジェクト

NewtObj.c3792 行で定義されています。

参照先 NcDefGlobalFnNewtMakeNativeFunc0().

関数の呼び出しグラフ:

void NewtErrMessage ( int32_t  err  ) 

エラーメッセージを表示する

引数:
err [in] エラー番号
戻り値:
なし

NewtObj.c1959 行で定義されています。

参照先 kNErrNonekNErrObjectReadOnlyNewtFprintf().

参照元 newt_info()newt_result_message().

関数の呼び出しグラフ:

newtRef NewtErrOutOfBounds ( newtRefArg  value,
int32_t  index 
)

Out Of Bounds エラーを発生する

引数:
value [in] 値オブジェクト
index [in] 位置
戻り値:
kNewtRefUnbind

NewtObj.c1934 行で定義されています。

参照先 kNErrOutOfBoundsNcMakeFrameNcMakeSymbolNcSetSlotNcThrowNewtMakeInteger()NewtStrCat()NSSTRNSSYM0.

参照元 NewtSetBinarySlot()NewtSetStringSlot()NewtSlotsSetSlot().

関数の呼び出しグラフ:

int32_t NewtFindArrayIndex ( newtRefArg  r,
newtRefArg  v,
uint16_t  st 
)

配列から値を検索する

引数:
r [in] 配列
v [in] 値オブジェクト
st [in] 開始位置
戻り値:
位置 成功
-1 失敗

NewtObj.c2863 行で定義されています。

参照先 newtSymData::hashnewtSymData::nameNewtArrayLengthNewtBSearchSymTable()NewtMapIsSorted()NewtRefToSlotsNewtRefToSymbol.

参照元 NBCGenCodeEnvL()NBCGenExists()NewtFindMapIndex()NewtObjRemoveFrameSlot().

関数の呼び出しグラフ:

bool NewtFindMapIndex ( newtRefArg  r,
newtRefArg  v,
uint32_t *  indexP 
)

マップから値を検索する

引数:
r [in] マップオブジェクト
v [in] スロットシンボル
indexP [out]位置
戻り値:
true 成功
false 失敗

NewtObj.c2915 行で定義されています。

参照先 NewtArrayLengthNewtFindArrayIndex()NewtFindMapIndex()NewtGetArraySlot()NewtRefIsNIL().

参照元 NewtFindMapIndex()NewtFindSlotIndex()NewtHasSlot()NewtObjGetSlot()NewtObjRemoveFrameSlot()NewtObjSetSlot().

関数の呼び出しグラフ:

int32_t NewtFindSlotIndex ( newtRefArg  frame,
newtRefArg  slot 
)

フレームオブジェクトからスロットの位置を探す

引数:
frame [in] フレーム
slot [in] スロットシンボル
戻り値:
スロットの位置 みつかった場合
-1 みつからなかった場合

NewtObj.c2978 行で定義されています。

参照先 NewtFindMapIndex()NewtFrameMap()NewtRefIsNIL().

参照元 NBCDefLocal()NBCGenFor()NBCGenForeach()NBCGenGetVar().

関数の呼び出しグラフ:

newtRef NewtFrameMap ( newtRefArg  r  ) 

フレームオブジェクトのマップを取得

引数:
r [in] フレーム
戻り値:
マップ

NewtObj.c2954 行で定義されています。

参照先 newtObj::askNewtRefNILnewtObj::mapNewtRefToPointer.

参照元 iter_new()iter_next()NewtFindSlotIndex()NewtGetFrameKey()NewtHasSlot()NSOFWriteFrame().

newtRef NewtGetArraySlot ( newtRefArg  r,
uint32_t  p 
)

配列の指定位置から値を取得する

引数:
r [in] 配列オブジェクト
p [in] 位置
戻り値:
値オブジェクト

NewtObj.c3369 行で定義されています。

参照先 NewtSlotsGetSlot().

参照元 iter_done()iter_next()liter_get()NBCGenFor()NBCGenForeach()NBCGenIfThenElse()NcRequire0()NcResolveMagicPointer()NewtARef()NewtDeeplyCopyMap()NewtFindMapIndex()NewtGetMapIndex()NewtGetPath()NewtLookupSymbol()NewtMapLength()NewtParamStr()NewtSlotsGetPath()NSOFReadNSOF()NVMMessageSendWithArgArray().

関数の呼び出しグラフ:

newtRef NewtGetBinarySlot ( newtRefArg  r,
uint32_t  p 
)

バイナリオブジェクトの指定位置から値を取得する

引数:
r [in] バイナリオブジェクト
p [in] 位置
戻り値:
値オブジェクト

NewtObj.c3134 行で定義されています。

参照先 kNewtRefUnbindNewtBinaryLength()NewtMakeInteger()NewtRefToBinary.

参照元 NewtARef()NsExtractByte().

関数の呼び出しグラフ:

newtRef NewtGetEnv ( const char *  s  ) 

環境変数の取得

引数:
s [in] 文字列
戻り値:
文字列オブジェクト

NewtObj.c4023 行で定義されています。

参照先 kNewtRefUnbindNSSTRCONST.

参照元 NewtInitSysEnv()NsGetEnv().

newtRef NewtGetFrameKey ( newtRefArg  inFrame,
uint32_t  inIndex 
)

Return the slot key for a given index. This method can be used with/like NewtGetFrameSlot to iterate on the slots (until we get optimized FOREACH/FOREACH_WITH_TAG/END_FOREACH macros).

引数:
inFrame frame to access the slot from
inIndex index of the slot to return the key of
戻り値:
the key of the slot or unbind if there isn't that many slots.

NewtObj.c3448 行で定義されています。

参照先 NewtFrameMap()NewtGetMapIndex().

関数の呼び出しグラフ: