/* * HelloMruby.cdl * * +------------------------------------+ +-------------------+ +-----------+ * | mruby object | | TECS::TsHello | | | * |buddyBridge= | sHello | nMruby::tsHello | sHello | tBuddy | * | TECS::TsHello.new( "BuddyBridge" ) |=========>| BuddyBridge |----------|> Buddy | * | | の関数群 | |cTECS eEnt| | * | | | | | | * +------------------------------------+ +-------------------+ +-----------+ * *・シグニチャ記述 * * sHello … 関数インタフェースの定義 * 慣習として接頭文字 s を付加する * * シグニチャ sHelloには 2 つの関数 myMessage と yourMessage がある。 * *・セルタイプ記述 * * nMruby::tsHello … ブリッジセルのセルタイプ (MrubyBridgePlugin により生成) * シグニチャ sHello をブリッジするセルタイプ * tBuddy … 呼び先のセルタイプ * */ import( ); import( ); import( "MyMrubyVM.cdl" ); // TracePlugin を使用する場合必要 // cell tKernel Kernel{}; // cell tSysLog SysLog{}; // シグニチャ sHello signature sHello { ER myMessage( [in,string]const char_t *buf ); ER yourMessage( [out,string(len)]char_t *buf, [in]int32_t len ); }; // セルタイプ tBuddy celltype tBuddy { entry sHello eEnt; }; // セル Buddy cell tBuddy Buddy { }; /* * シグニチャプラグイン MrubyBridgePlugin の呼び出し。 * * MrubyBridgePlugin により * ・ブリッジのセルタイプ nMruby::tsHello の定義が * gen/tmp_MrubyBridgePlugin_0.cdl に生成される。 * sHello の部分は、シグニチャ名。 * ・セルタイプコード gen/nMruby_tsHello.c に、mruby の * TECS::TsHello クラス定義コードが生成される。 */ generate( MrubyBridgePlugin, sHello, "" ); /* * ブリッジセルの設置 * * mruby から、TECS::TsHello クラスの Bridge として参照される。 * ex) bridge = TECS::TsHello.new( "BuddyBridge" ) * * cTECS の signature、すなわち sHello の関数が、mruby のクラス TECS::TsHello * のインスタンスメソッドとして定義され、呼び出すことができる。 * ex) bridge.sayHello( 3 ) */ cell nMruby::tsHello BuddyBridge { // [through(TracePlugin,"")] cTECS = Buddy.eEnt; }; cell tPosixMrubyVM MrubyVMTask{ cInit = VM_TECSInitializer.eInitialize; argc = 2; argv = { "HelloMruby.exe", "HelloTECS.rb" }; priority = 11; stackSize = 4096; taskAttribute = C_EXP( "TA_ACT" ); };