K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
> ようやく下記のようなプログラムがVMで実行可能になりました。可変長 >パラメータ用の書式は作らず、一部の組込み関数のみ可能にしました。 >言語としての美しさは…、スタック情報も大きく変わり、VMはほとんど別の >ものになりつつあります。VMの完成にはまだまだです。printfはCのprintf >と同等ですが、中身はエミュレートを被せてオーバラン等の危険は一切 >ありません。 >---------------------------------- >int printf(string str); >string sprintf(string str); >int print(string str); > >int main() >{ > string str; > printf("printf P1 = %d P2 = %d P3 = %d\n",12,20,30); > str = sprintf("sprintf P1 = %d\n",13); > print(str); > print("---------- test ---------\n"); >} >---------------------------------- > 前に出した、組込み関数とのインターフェースは大幅に変更となり。 >下記のようになっています。 > >//== スタック上の組込み関数データ =================================== >struct NFstartDat { > ushort vtype; // データタイプ E_StackDType > ushort size; // スタック消費サイズ > ushort m_vmid; // VMID = スレッドID > ushort m_prm_inno; // 引き渡されたパラメータ数 > void *m_sdatp; // スレッド別データ用ポインター > S_Value *m_prmp[PRMMAX]; // 引き渡されたパラメータ > S_Value m_return; // 関数からの戻り値データ >}; > >//=================================================================== >// 組み込み関数用定義 >//=================================================================== >class C_NFBase >{ >protected: > //-- VMから受け取る情報 ---------------- > int m_fid; // 関数ID > //-- VMに送る情報 ---------------------- > char *m_name; // 関数名 > int m_prmno; // 要求するパラメータ数0-10まで20は可変関数 > ES_ValueType m_type[PRMMAX]; // 要求するパラメータの型 > ES_ValueType m_return_type; // リターン変数タイプ >public: > C_NFBase() > { > this->m_name = NULL; > this->m_prmno = 0; > for(int i=0;i<PRMMAX;i++) { > this->m_type[i] = ES_NON; > } > //----------------------- > this->m_fid = 0; > this->m_return_type = ES_INT; > } > virtual ~C_NFBase() { } > virtual void * VMstart() { } // VM起動時実行 > virtual void VMend() { } // VM終了時実行 > virtual void funcexe(NFstartDat *nfd) { } // 関数起動メソッド > inline char ** getname() { return &this->m_name; } > inline int getprmno() { return this->m_prmno; } > inline ES_ValueType getprmtype(int no) { return this->m_type[no]; } > inline void setfid(int fid) { this->m_fid = fid; } > inline ES_ValueType getrtntype() { return this->m_return_type; } >}; >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!