Skip to content

Terra/Lua ライブラリ

リスト操作 (list:*)

名前説明
list:subリストの部分を取得する(string.subに相当)
list:revリストを反転する
list:appすべての要素に指定した関数を適用する
list:mapすべての要素にmapを適用し、新しいリストを返す
list:filter指定した関数がtrueである要素のみの新しいリストを返す
list:flatmapすべての要素にmapを適用し、結果のリストを連結する
list:find条件を満たす最初の要素を見つける
list:partitionk,v = fn(e)を各要素に適用し、同じkの値vをグループ化
list:fold再帰的に初期値initとリストの各要素にfnを適用
list:reduceリストの各要素にfnを再帰的に適用
list:existsリストのいずれかの要素が条件を満たすか
list:allリストのすべての要素が条件を満たすか

terralib.*

オブジェクトの判別

名前説明
terralib.israwlist連続する整数キーのリストならtrueを返す
terralib.islistリストならtrueを返す
terralib.isfunction関数ならtrueを返す
terralib.types.istype型ならtrueを返す
terralib.isquote引用句ならtrueを返す
terralib.issymbolシンボルならtrueを返す
terralib.isconstant定数ならtrueを返す
terralib.ismacroマクロであればtrueを返す
terralib.isglobalvarグローバル変数ならtrueを返す
terralib.islabelラベルならtrueを返す
terralib.isoverloadedfunctionオーバーロード関数ならtrueを返す
terralib.istreeツリーならtrueを返す
terralib.typeデータ型を文字列で返す
名前説明
terralib.memoize関数の結果をメモ化します
terralib.externfunction外部で定義された関数にバインドされたTerra関数を作成します
terralib.includecC関数をインポートする
terralib.sizeofterratypeを完全にして、そのサイズを返す(ffi.sizeofのラッパー)
terralib.offsetofterratypeを完全にして、terratype内のfieldのオフセット(バイト単位)を返す(ffi.offsetofのラッパー)
terralib.typeofobjのTerra型を返します。objは、以前にTerra APIを使用して割り当てられたLuaJIT ctypeである必要があります。または、Terra関数の戻り値として返されるものです。
terralib.newLuaJITのffi.newのラッパーです。型terratypeの新しいオブジェクトを割り当てます。initはオプションの初期化子であり、Terra値とLua値の間での変換ルールに従います。このオブジェクトはLuaから到達不可能になるとガベージコレクションされます。
terralib.castffi.castのラッパーです。objをterratypeに変換し、Terra値とLua値の間での変換ルールに従います。
terralib.intrinsic指定したnameとtypeに対応するLLVMの組み込み関数を呼び出すTerra関数を返します。
terralib.attrloadaddrのアドレスからattrs属性付きでデータを読み込みます。
terralib.attrstoreaddrのアドレスにvalueの値をattrs属性付きで書き込みます。属性の指定方法はattrloadと同じです。
terralib.types.newstruct新しいユーザー定義型を作成します。
terralib.linklibraryファイルfilenameにある動的ライブラリを読み込みます
terralib.linkllvmLLVMビットコードファイルfilenameを.bc拡張子でリンク

実験的機能:

名前説明
terralib.types.pointer&typの代替で、LLVMアドレス空間を指定することが可能です。非ゼロアドレス空間の意味はターゲット固有です。
terralib.fenceフェンス操作を発行します。指定した属性によって、フェンスを境にした原子命令の順序変更を防ぎます。この操作の意味はLLVMによって決まります。
terralib.cmpxchgアドレスaddrでの原子比較交換(cmpxchg)操作を実行します。addrの値がcmpと同じ場合、newの値が書き込まれます。違う場合、値は変更されません。addrの元の値と交換が成功したかどうかを示すブール値のタプルを返します。
terralib.atomicrmwaddrのアドレスでvalue値と演算子opを使用した原子読み書き操作(RMW)を実行します。操作は原子的に行われます。addrの元の値を返します。

Terraコードの読み込み:

名前説明
terralib.loadC APIのterra_loadと同等のLua関数です。readerfnはLuaのload関数と同じ動作をします。
terralib.loadstringC APIのterra_loadstringと同等のLua関数です。
terralib.loadfileC APIのterra_loadfileと同等のLua関数です。
requireTerraコードモジュールmodulenameを読み込みます

コンパイルAPI:

名前説明
terralib.saveobjTerraコードを外部ファイル形式(オブジェクトファイルや実行ファイルなど)に保存します
terralib.newtargetターゲットオブジェクトを作成

デバッグ:

名前説明
terralib.currenttimeinseconds過去のある時点からの経過時間を秒で返す
terralib.tracebackTerraコードから呼び出してスタックトレースを出力する
terralib.backtrace低レベルのインターフェースで、マシンスタックからリターンアドレスを取得します
terralib.disas命令の逆アセンブルを出力
terralib.lookupsymbol任意の命令のポインタipを基に、Terra関数に関する情報を検索しようと試みます
terralib.lookuplineTerra命令に関する情報を検索しようと試みます
terralib.overloadedfunctionオーバーロード関数を作成する
terralib.includecstring文字列codeをCコードとしてインポート

関数 (func:*)

名前説明
func:isdefined関数に定義が存在する場合はtrueを返す
func:adddefinition
func:resetdefinition
func:isextern
func:printstats
func:disas
func:printpretty
func:compile
func:gettype
func:getpointer
func:getname
func:setname
func:setinlined
func:setoptimized
func:setcallingconv

オーバーロード関数

名前説明
overloaded_func:adddefinitionメソッドを追加する
overloaded_func:getdefinitions関数の定義のリストを返す

型 (type:*)

名前説明
vector
struct
tuple
type:isprimitiveプリミティブ型ならtrueを返す
type:isintegral整数型であればtrueを返します。
type:isfloatfloatまたはdoubleであればtrueを返します。
type:isarithmetic整数型または浮動小数点型であればtrueを返します。
type:islogicalboolであればtrueを返します(将来的に、ベクトル命令内のフラグに近いサイズのブール型をサポートする予定)。
type:canbeordorおよびand演算に使用できる場合(つまり整数型や論理型だが浮動小数点型ではない場合)、trueを返します。
type:ispointerポインタであればtrueを返します。type.typeは指している型です。
type:isarray配列であればtrueを返します。type.Nは長さを、type.typeは要素の型を表します。
type:isfunction関数(関数ポインタではない)であればtrueを返します。type.parametersはパラメータ型のリスト、type.returntypeは戻り値の型です。複数の値を返す関数の場合、戻り値の型はその値のtupleになります。
type:isstruct構造体であればtrueを返します。
type:ispointertostruct構造体へのポインタであればtrueを返します。
type:ispointertofunction関数へのポインタであればtrueを返します。
type:isaggregate配列または構造体であればtrueを返します(任意の型を保持できる型です)。
type:iscomplete完全に定義され、コードで使用できる状態であればtrueを返します。非集約型では常にtrueです。集約型の場合、その内部に含まれるすべての型が定義されていればtrueとなります。type:complete()を呼び出すと強制的に型が完全になります。
type:isvectorベクトルであればtrueを返します。type.Nは長さ、type.typeは要素の型です。
type:isunit空のタプルであればtrueを返します。空のタプルは、戻り値を持たない関数の戻り値型としても使用されます。
type:complete型を強制的に完全にします。構造体の場合、構造体のレイアウトを計算し(定義されていれば__getentriesや__staticinitializeを呼び出します)、この型が参照するすべての型を再帰的に完全にします。
type:printpretty型を出力し、構造体の場合はそのメンバーも含めて表示します。

クォート (quoteobj:*)

名前説明
quoteobj:gettypeTerra型を返します。
quoteobj:astypeTerra型オブジェクトとして解釈しようとします。通常、型を引数として受け取るマクロで使用されます(例:sizeof([&int]))。この関数は、quoteオブジェクトを型に変換します(例:&int)。
quoteobj:islvalue代入の左辺(l-value)として使用可能であればtrueを返します。
quoteobj:asvalue単純なLua値として解釈しようとします。通常、定数を引数として受け取るマクロで使用されます。特定の値のみで動作し、Constant式として利用可能な場合に限られます。生成コードに複雑なデータ構造を渡す場合、マクロよりもエスケープを使用することを検討してください。
quoteobj:printprettyコードの視覚表現を出力します。引用句は関数に挿入されるまで型チェックが行われないため、関数の型なしの表現が出力されます。

シンボル (symbol)

名前説明
symbol新しいシンボルを作成する

グローバル変数 (globalvar:*)

名前説明
global型typeと初期値initで新しいグローバル変数を作成します
globalvar:getpointerメモリ内でこのグローバル変数へのポインタであるctypeオブジェクトを返します(型を完了する)
globalvar:get値をLuaJITのctypeオブジェクトとして取得します(型を完了する)
globalvar:set指定した値をグローバル変数に設定する(型を完了する)
globalvar:setnameデバッグ名を設定する(グローバル変数の動作には影響しない)
globalvar:getnameデバッグ名を取得する(グローバル変数の動作には影響しない)
globalvar:gettypeTerra型を取得します
globalvar:setinitializer初期化式を設定または変更します。グローバル変数がコンパイルされる前にのみ有効です。例えば、クラスのvtableを格納するグローバル変数の場合、クラスにメソッドを追加するたびに値を追加することができます。

定数

名前説明
constant新しい定数を作成する

ラベル

名前説明
label新しいラベルを作成する

マクロ

名前説明
macro新しいマクロを作成する

LLVM

名前説明
llvmobj:extern