NewtObj.c

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

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "NewtCore.h"
#include "NewtGC.h"
#include "NewtIO.h"

ソースコードを見る。

関数

static newtRef NewtMakeSymbol0 (const char *s)
static bool NewtBSearchSymTable (newtRefArg r, const char *name, uint32_t hash, int32_t st, int32_t *indexP)
static newtObjRef NewtObjMemAlloc (newtPool pool, uint32_t n, bool literal)
static newtObjRef NewtObjRealloc (newtPool pool, newtObjRef obj, uint32_t n)
static void NewtGetObjData (newtRefArg r, uint8_t *data, uint32_t len)
static newtObjRef NewtObjBinarySetLength (newtObjRef obj, uint32_t n)
static uint32_t NewtObjSymbolLength (newtObjRef obj)
static uint32_t NewtObjStringLength (newtObjRef obj)
static newtObjRef NewtObjStringSetLength (newtObjRef obj, uint32_t n)
static void NewtMakeInitSlots (newtRefArg r, uint32_t st, uint32_t n, uint32_t step, newtRefVar v[])
static newtObjRef NewtObjSlotsSetLength (newtObjRef obj, uint32_t n, newtRefArg v)
static int NewtInt32Compare (newtRefArg r1, newtRefArg r2)
static int NewtRealCompare (newtRefArg r1, newtRefArg r2)
static int NewtStringCompare (newtRefArg r1, newtRefArg r2)
static int NewtBinaryCompare (newtRefArg r1, newtRefArg r2)
static uint16_t NewtArgsType (newtRefArg r1, newtRefArg r2)
static newtRef NewtMakeThrowSymbol (int32_t err)
static bool NewtObjHasProto (newtObjRef obj)
static bool NewtMapIsSorted (newtRefArg r)
static void NewtObjRemoveArraySlot (newtObjRef obj, int32_t n)
static void NewtDeeplyCopyMap (newtRef *dst, int32_t *pos, newtRefArg src)
static newtRef NewtDeeplyCloneMap (newtRefArg map, int32_t len)
static void NewtObjRemoveFrameSlot (newtObjRef obj, newtRefArg slot)
static bool NewtStrNBeginsWith (char *str, uint32_t len, char *sub, uint32_t sublen)
static bool NewtStrIsSubclass (char *sub, uint32_t sublen, char *supr, uint32_t suprlen)
static bool NewtStrHasSubclass (char *sub, uint32_t sublen, char *supr, uint32_t suprlen)
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 obj, 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 NewtBinarySetLength (newtRefArg r, uint32_t n)
newtRef NewtMakeSymbol (const char *s)
newtRef NewtMakeString (const char *s, bool literal)
newtRef NewtMakeString2 (const char *s, uint32_t len, bool literal)
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.c で定義されています。


関数

newtRef NewtARef ( newtRefArg  r,
uint32_t  p 
)

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

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

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

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

参照元 iter_next()NcARef().

関数の呼び出しグラフ:

uint16_t NewtArgsType ( newtRefArg  r1,
newtRefArg  r2 
) [static]

計算可能な引数ならば計算結果のオブジェクトタイプを返す

引数:
r1 [in] オブジェクト1
r2 [in] オブジェクト2
戻り値:
オブジェクトタイプ 計算可能
kNewtUnknownType 計算不可

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

参照先 kNewtInt30kNewtInt32kNewtRealkNewtUnknownTypeNewtGetRefType().

参照元 NewtObjectCompare()NewtRefEqual().

関数の呼び出しグラフ:

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().

関数の呼び出しグラフ:

int NewtBinaryCompare ( newtRefArg  r1,
newtRefArg  r2 
) [static]

バイナリオブジェクトの比較

引数:
r1 [in] バイナリオブジェクト1
r2 [in] バイナリオブジェクト2
戻り値:
-1 r1 < r2
0 r1 = r2
1 r1 > r2

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

参照先 NewtBinaryLength()NewtRefToBinary.

参照元 NewtObjectCompare().

関数の呼び出しグラフ:

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().

関数の呼び出しグラフ:

bool NewtBSearchSymTable ( newtRefArg  r,
const char *  name,
uint32_t  hash,
int32_t  st,
int32_t *  indexP 
) [static]

シンボルテーブルの位置検索

引数:
r [in] シンボルテーブル
name [in] シンボル文字列
hash [in] ハッシュ値
st [in] 開始位置
indexP [out]位置
戻り値:
true 成功
false 失敗

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

参照先 newtSymData::hashnewtSymData::nameNewtArrayLengthNewtRefToSlotsNewtRefToSymbolNewtSymbolHashFunction().

参照元 NewtFindArrayIndex()NewtLookupSymbol()NewtObjSetSlot().

関数の呼び出しグラフ:

void NewtClearMapFlags ( newtRefArg  map,
int32_t  bit 
)

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

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

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

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

参照元 NewtObjRemoveFrameSlot().

関数の呼び出しグラフ:

newtRef NewtDeeplyCloneMap ( newtRefArg  map,
int32_t  len 
) [static]

マップを深くクローン複製する

引数:
map [in] マップオブジェクト
len [in] 長さ
戻り値:
クローン複製されたオブジェクト

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

参照先 kNewtRefNILNcClassOf()NcSetClass()NewtDeeplyCopyMap()NewtMakeInteger()NewtMakeMap()NewtRefToInteger()NewtRefToSlots.

参照元 NewtObjRemoveFrameSlot().

関数の呼び出しグラフ:

void NewtDeeplyCopyMap ( newtRef dst,
int32_t *  pos,
newtRefArg  src 
) [static]

マップを深くコピーする

引数:
dst [out]コピー先
pos [i/o]コピー位置
src [in] コピー元
戻り値:
なし

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

参照先 NewtGetArraySlot()NewtLength()NewtRefIsNotNILNewtRefToSlots.

参照元 NewtDeeplyCloneMap().

関数の呼び出しグラフ:

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  ) 

環境変数の取得

引数: