OpenHSP

後ろで定義されている関数を呼び出せるようにするパッチ その2

後ろで定義されている関数を呼び出せるようにするパッチ - fujidigの雑記 の改良。 前のパッチは codegen で識別子の @ がどうこうしているのが心残りでした(SearchSymbolOrRegisterVarまわり)。 識別子の @ の処理とかはプリプロセスで済ますべきだったと思…

後ろで定義されている関数を呼び出せるようにするパッチ

改良しました -> 後ろで定義されている関数を呼び出せるようにするパッチ その2 - fujidigの雑記 だいたい以下のような仕組みです。 プリプロセス時のラベル情報を使って関数の名前を type = TYPE_MODCMD, opt = -1 で登録 opt = -1 の関数の呼び出しがあっ…

複数行コメント内に # で始まる行があると行番号がずれるバグを修正するパッチ

token.cpp 読みにくい。これで問題ないかなあ? Index: token.cpp =================================================================== --- token.cpp (revision 194) +++ token.cpp (working copy) @@ -3047,17 +3047,14 @@ int CToken::ExpandLine( CMe…

プリプロセッサ命令の後ろに余分なトークンがあったらエラーにするパッチ

http://hsp.tv/play/pforum.php?mode=all&num=22946#22959 を見て作ってみたんだけど微妙な感じ。 #if, #ifdef, #ifndef で実行されないブロック内ではチェックされない #enum は 「if ( GetToken() == '=' ) {」ってやってるので余分なトークンがひとつだけ…

CStrLineIterator クラスを導入して listbox を高速化

2ch プログラム技術スレ「API ┣━┫HSP上級者専用スレッドvol.0x01┣━┫MCI」 >>525 CStrNote で行頭位置をキャッシュするパッチが投稿されていました。 listbox が高速になっていい感じなんですが、 note 系命令を使ったプログラムは逆に遅くなってしまいます。…

__include_level__ マクロ

Perl の __FILE__ eq $0 、 Ruby の __FILE__ == $0 、 Python の __name__ == "__main__" みたいなものがほしいなーと思った。 Index: token.cpp =================================================================== --- token.cpp (リビジョン 164) +++…

HSP 3.2b1 で 変数型を拡張するプラグインでうまく動作しない件についてのメモ

hsp3.2b1においてコールバック関数実装プラグインが使用できない この問題は Shark++ さんが修正してくれました。 Shark++++原因は DLL を開放した後で DLL 内の関数を呼んでしまう箇所があったから。それは、 DLL で拡張された変数の開放関数。(HspVarProc…

int OP double を double で演算するパッチ

HSP では int OP double が int で演算され、 たとえば 100 * 0.9 で 0 が返ってきたりするのが HSP の不満ポイントの一つなんですが。 int OP double を double で演算するパッチを作ってみました。 Index: hsp3code.cpp =================================…

HSPコンパイラのSEGVを修正してコミットしました

http://dev.onionsoft.net/trac/changeset/85 色々調べてみて分かったんですけど、 Endless macro loop エラーが出なかったのは単に macloop が 1000 に達するより早く SEGV が起こっていたから。 b %1の%1がなければ落ちなかったのはただの文字数の問題。 …

ビルトイン関数でショートサーキットっぽいものが出来るんでね?と思ったけど失敗した

こんなの。 code_get()したら式を評価するんだからスキップすることにはならない。 次のex2までスキップとかなら出来るけど最後のパラメータだったらそれも出来ないし。TYPE_MARK ')' までをスキップ? それじゃ入れ子に対応できないじゃんということで失敗…

split命令を追加してみる

IRC で 23:10 f_the_darudaru perlの my( $a,$b,$c ) = split( /,/ , $data); 見たいな記述の導入を検討師弟t抱けると幸いです(鬼 f_the_darudaru 他人事だからいえることを堂々と、血も涙も無い感じで・・・!! 23:12 fujidig わー>< f_the_darudaru で…

SEGVる(デバッグウィンドウを表示しているときのみ)。 gosub *a:stop *a: return 1e300hsp3code.cpp void code_adddbg( char *name, double val ) が原因なんだけどどうしようかな。 snprintfを使う バッファサイズを大きくする #include <stdio.h> int main( void </stdio.h>…

strf関数を可変長に&型が合わない場合は変換するようにするパッチ作成中

static char *cnvformat() { // フォーマット付き文字列を作成する // char *fstr, *p, *fp, *tmp; int i, len; p = ctx->stmp; // フォーマット文字列をコピーして使う fp = code_gets(); fstr = sbAlloc( strlen( fp ) + 1 ); sbCopy( &fstr, fp, strlen( …

はじめてのこみっと

http://dev.onionsoft.net/trac/changeset/65

stack.cpp の stm_cur > stm_max は stm_cur >= stm_max の間違いだと思う。この前、スタックエラーぎりぎりで終了時にエラーになったのはこれが原因だと思う。ためしてないけど。 wait, await はメッセージループ内で GetTickCount を使ってやってある。タ…

strf関数で%sが使えないようになった

http://dev.onionsoft.net/trac/changeset/49 ふむふむ。 文字列のポインタから文字列を得るのに便利だったんだけど、安全面を優先した方がいいよね。 ところで、strf関数の引数が一つだけしか指定できないのが不便なんだけど可変長引数なんかは今のHSPの仕…

label.cpp(CLabel)

検索が線形検索 検索中の比較に使うハッシュ関数が各文字コードの和(abcとcbaのハッシュ値が同じ><) それでも、普通に使ってたらコンパイルが遅いということはないようだけど、#defineとか#undefとか大量に使っていたら遅くなりそう

トークンタイプ(TK_*)とコマンドタイプ(TYPE_*)には互換がある?

PutCS( TK_NONE, op, texflag ); とかみて。えっ、それってTK_*じゃなくてTYPE_*を指定するところじゃないのって思って。 0 TYPE_MARK TK_NONE 1 TYPE_VAR TK_OBJ 2 TYPE_STRING TK_STRING 3 TYPE_DNUM TK_DNUM 4 TYPE_INUM TK_NUM 5 TYPE_STRUCT 6 TYPE_XLA…

HSP 3.2ではバッファオーバーフローの可能性のある部分を少しでもつぶしてほしいなあ

大きな実数をstr関数に渡したり、mes命令に渡したりするとオーバーフローしたり。 strfの結果が長いとオーバーフローしたり。 returnに長い文字列を渡すとオーバーフローしたり><

文字列型に乗算演算と大小比較演算を追加するパッチ

大小比較演算(,)も付け加えてみた。 --- hspvar_str.cpp.orig Mon Jan 14 09:30:26 2008 +++ hspvar_str.cpp Sat Feb 16 11:21:43 2008 @@ -194,6 +194,35 @@ myproc->aftertype = HSPVAR_FLAG_STR; } +// Mul +static void HspVarStr_MulI( PDAT *pval, c…

文字列の掛け算(繰り返し、リフレイン)を追加するパッチ

作ってみたけど、これはなかなか便利だよ。まあ、繰り返す数が自動的に文字列に変換されてまた数値に戻してってやってるのはなんだか無駄っぽく感じてしまうけど。 --- hspvar_str.cpp.orig Mon Jan 14 09:30:26 2008 +++ hspvar_str.cpp Sat Feb 16 10:50:1…

実数をゼロ除算してもエラーが出ないように&実数の剰余パッチ

以前から実数でもゼロ除算時にエラーが出ることに疑問を抱いていたので。文字列の乗算(繰り返し、リフレイン)でも追加してみようと思ったけど、同じ型で演算されるように変換してしまうようだしなー。 --- hspvar_double.cpp.orig Mon Jan 14 09:30:26 200…

文字列リテラルのエスケープシークエンスに\xnnを追加するパッチ

これでオブジェクトファイルを直接いじらず非印字を文字列リテラルに入れられますね。微妙。 --- codegen.cpp.orig Mon Jan 14 09:30:26 2008 +++ codegen.cpp Wed Feb 13 15:39:36 2008 @@ -398,6 +398,19 @@ case 'r': a1 = 13; break; + case 'x': + if( …

#modcfuncを追加するパッチ

#modfuncの関数版が欲しくてパッチを作ろうと思ったら、実はPP_Defcfuncで既に用意はされていたんですね。なので、追加するのはすごく短く済みました。 --- token.cpp.orig Mon Jan 14 09:30:26 2008 +++ token.cpp Wed Feb 13 13:35:58 2008 @@ -2937,6 +29…

エラー時の行数表示がおかしい

実際の4倍の行数で表示される。もちろん、なんの改造もしていないOpenHSP ver3.2beta1をコンパイルしたhspcmp.dllなんだけど。 後でHSP ver3.1とプリプロセス済みファイル、オブジェクトファイルを比較してみる。

token.cpp 250行目あたり(CToken::Pickstr)でこんなの見つけました。 while(1) { pickag: ループ中にpickagに飛ぶことがあるようです。Rubyのredoみたいな使い方でしょうか。 あれ?でも、while文ならcontinueでも大丈夫なような...。for文ならインクリメ…

HSPBT#198を修正するパッチ

作ってみた! といっても変更したのは一行だけだけど これは2008年2月8日19時52分現在公開されているOpenHSP ver.3.2beta1 に対するパッチです。 OpenHSP ver.3.2beta1 のライセンスは以下の通りです。 OpenHSP Copyright (C) 1997-2008, Onion Software/oni…

同じ文字列の最適化パッチ

これは2008年2月7日19時48分現在公開されているOpenHSP ver.3.2beta1 に対するパッチです。 OpenHSP ver.3.2beta1 のライセンスは以下の通りです。 OpenHSP Copyright (C) 1997-2008, Onion Software/onitama, all rights reserved. This software is provid…

同じ文字列の最適化できた

ただの線形検索だからコンパイル遅くなっちゃうかな?と思ったけれど、体感的にはあまり変わった気がしない。 ソースはOpenHSPのライセンスとか確認した後ほどにでも公開したいと思います。 まあそこそこ大きいソースかな?と思うHDLで#cmpopt optinfo 1をつ…

OpenHSPのhspcmpをコンパイルしてみた

OpenHSPのソースこそ読んでいるものの、一度もコンパイルしていないことに気づいたのでhspcmpをVC++でコンパイルしてみた。 warningこそそれなりに出るけど何のエラーもなくコンパイルできた。 ほんと、vcprojをダブルクリックして開いてメニューからビルド…