書いてから思ったけど、HSP自体がリソースのために持っているバッファ(DS)へのポインタを返すので、リテラルが書き換え可能になっちゃうっていう。……まぁそこらへんはいいか。
実数値リテラルもいけるけど、整数はCodeSegmentに直書きだからそれ自体へのポインタは無理で、どこかにコピーを書いて取る必要がある。面倒くさい。
実際に使用するときは #define global constptr __constptr || というマクロを用いる。いちいち括弧をつけなくていいので記述が楽。
書いてから思ったけど、HSP自体がリソースのために持っているバッファ(DS)へのポインタを返すので、リテラルが書き換え可能になっちゃうっていう。……まぁそこらへんはいいか。
実数値リテラルもいけるけど、整数はCodeSegmentに直書きだからそれ自体へのポインタは無理で、どこかにコピーを書いて取る必要がある。面倒くさい。
実際に使用するときは #define global constptr __constptr || というマクロを用いる。いちいち括弧をつけなくていいので記述が楽。
// constptr || CONST_VALUE int constptr( void** ppResult ) // この返値が *type_res に、*ppResult の値が reffunc の返値になるとする { if ( *exinfo->npexflg & (EXFLG_1 | EXFLG_2) ) puterror( HSPERR_SYNTAX ); static int stt_result; switch ( *type ) { case TYPE_STRING: case TYPE_DNUM: stt_result = reinterpret_cast<int>( &ctx->mem_mds[*val] ); *ppResult = &stt_result; break; case TYPE_INUM: puterror( HSPERR_UNSUPPORTED_FUNCTION ); // CS中に埋め込まれているのでとれない default: puterror( HSPERR_SYNTAX ); } code_next(); if ( !(*type == TYPE_MARK && *val == 6) ) puterror( HSPERR_SYNTAX ); // or(||) code_next(); return HSPVAR_FLAG_INT; }