書いてから思ったけど、HSP自体がリソースのために持っているバッファ(DS)へのポインタを返すので、リテラルが書き換え可能になっちゃうっていう。……まぁそこらへんはいいか。
実数値リテラルもいけるけど、整数はCodeSegmentに直書きだからそれ自体へのポインタは無理で、どこかにコピーを書いて取る必要がある。面倒くさい。
実際に使用するときは #define global constptr __constptr || というマクロを用いる。いちいち括弧をつけなくていいので記述が楽。
書いてから思ったけど、HSP自体がリソースのために持っているバッファ(DS)へのポインタを返すので、リテラルが書き換え可能になっちゃうっていう。……まぁそこらへんはいいか。
実数値リテラルもいけるけど、整数はCodeSegmentに直書きだからそれ自体へのポインタは無理で、どこかにコピーを書いて取る必要がある。面倒くさい。
実際に使用するときは #define global constptr __constptr || というマクロを用いる。いちいち括弧をつけなくていいので記述が楽。
// constptr || CONST_VALUEint 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;}