TinyCC

TinyCCを使う(5)

Squeakから共有ライブラリ構築を行うクラスの動作確認メモ。 リストからFFI呼び出しメソッドを作成 | lib | lib := SharedLibraryBuilder new. lib pluginName: 'libfoo'. lib targetClass: 'Foo'. lib addFunctionArray: #('int' 'foo' 'int,int'). lib bui…

TinyCCを使う(4)

SqueakからTinyCCを使って共有ライブラリを作るSharedLibraryBuilderなるものの実装がほぼ終わった。あまり使い勝手はよくないが、APIを記述した関数リストをあたえるとFFIコール部が作成される機能と、Cプログラムを与えるとコンパイル・ファイル書き出しを…

TinyCCを使う(3)

前回はTinyCCでオンメモリに展開したオブジェクトをFFI経由でコールすることに成功したが、イメージ中のExternalLibraryFunctionから検索しなければならなかったので、methodDictから対応するExternalLibraryFunctionを見付けることにした。いろいろ調べたら…

TinyCCを使う(2)

ちょっと勘違いから手間取り、時間をとられてしまった。それはそれとして、TinyCCでオンメモリに展開したオブジェクトをFFIとしてコールすることができました。まずFFICallTest class>>primFFICall:を以下のように定義した。module名は適当につける。 primFF…

TinyCCを使う

FFIコールにおける関数アドレス解決方法を調べるメモ Parser Parser>>externalFunctionDeclaration でExternalLibraryFunctionを格納する invoke ExternalLibraryFunction(ExternalFunction)>>invokeWithArguments: -> FFIPlugin>>primitiveCalloutWithArgs(…

VMソースを眺める

とりあえず、どのようにしてNamed Primitive(日本語に直すとすると'名前つきプリミティブ'とでも呼ぶのか?)が動くかinterp.c(InterpreterPlugin)を中心に眺めてみました。どうやらmethodCacheとexternalPrimitiveTableに強引に登録してしまえば、TinyCCでコ…

昨日作ったTinyCCWrapperを拡張すべく,VMMaker/CCodeGeneratorクラスなどを散策中。最終目標はSlangで書いたPrimitiveメソッドをTinyCCでコンパイル・実行できるようにすること。TinyCCがオンメモリに展開した実行コードをなんとかSqueak側でキャッシュでき…