2008-02-01から1ヶ月間の記事一覧

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

大小比較演算(,)も付け加えてみた。 --- 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…

変数名からその変数のクローンを作る・改

HSP

HSPEXINFOにHspFunc_varnameとHspFunc_seekvarというのがあったのでこれを使ってみました。 変数IDから変数名を得たり、変数名から変数IDを探したりする処理をやってくれます。 変数名からその変数のクローンを作る - fujidigの雑記ではそういう処理を自前で…

関数一覧3

HSP

色々試してみた。 #module m0 x, y, z #modinit int #modterm #defcfunc func1 str, int, local, double, var, array, label #modfunc func2 #global #uselib "hoge" #func hoge1 "hoge1" int, var, str, wstr, sptr, wptr #cfunc hoge2 "hoge2" double, flo…

関数一覧2

HSP

パラメータタイプの一覧と関数の場合はカッコを出すようにできた。 #include "d3m.hsp" mref hspctx, 68 dupptr hsphed, hspctx.0, 96 // hspctx.hsphed / sizeof HSPHED ds_ptr = lpeek( hspctx, 12 ) // hspctx.mem_mds max_ds = lpeek( hsphed, 28 ) // h…

関数一覧

HSP

#include "d3m.hsp" mref hspctx, 68 dupptr hsphed, hspctx.0, 96 // hspctx.hsphed / sizeof HSPHED ds_ptr = lpeek( hspctx, 12 ) // hspctx.mem_mds max_ds = lpeek( hsphed, 28 ) // hsphed.max_ds dupptr ds, ds_ptr, max_ds linfo_ptr = lpeek( hspct…

HSPCTXからオブジェクトファイルの各データにアクセス

HSP

コピペして使う用に。 mref hspctx, 68 dupptr hsphed, hspctx.0, 96 // hspctx.hsphed / sizeof HSPHED cs_ptr = lpeek( hspctx, 8 ) // hspctx.mem_mcs max_cs = lpeek( hsphed, 20 ) // hsphed.max_cs dupptr cs, cs_ptr, max_cs ds_ptr = lpeek( hspctx,…

変数名からその変数のクローンを作る

HSP

#module #deffunc init_getvn if inited : return inited = 1 mref hspctx, 68 dupptr hsphed, hspctx.0, 96 // hspctx.hsphed / sizeof HSPHED max_val = lpeek( hsphed, 8 ) // hsphed.max_val ds_ptr = lpeek( hspctx, 12 ) // hspctx.mem_mds dinfo_ptr …

変数名取得

HSP

#module #deffunc init_getvn if inited : return inited = 1 exist "obj" if strsize < 0 : end sdim axbuf, strsize bload "obj", axbuf max_val = lpeek( axbuf, 8 ) pt_ds = lpeek( axbuf, 24 ) max_ds = lpeek( axbuf, 28 ) pt_dinfo = lpeek( axbuf, 4…

変数一覧

HSP

オブジェクトファイルと戯れてみる。 exist "obj" if strsize < 0 : end sdim axbuf, strsize bload "obj", axbuf pt_ds = lpeek( axbuf, 24 ) max_ds = lpeek( axbuf, 28 ) pt_dinfo = lpeek( axbuf, 40 ) max_dinfo = lpeek( axbuf, 44 ) ;mes pt_dinfo ;m…

hsp3とhsp3clだけPATHを通す

コンソールからhsp3やhsp3clを実行するときにいちいち"C:\Program Files\hsp31\hsp3"なんて書くのが面倒。 じゃあ、PATHに通そうと思ってもHSPのフォルダには他にも色々ファイルがあって気が引ける。 ということで、以下の二つのファイルだけがあるフォルダ…

ellerさんのはてなダイアリー

Kengo's blog 発見。

文字列リテラルのエスケープシークエンスに\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とプリプロセス済みファイル、オブジェクトファイルを比較してみる。

文字列のポインタから文字列を得る

HSP

a = "hello" ptr = varptr( a ) // strf %s を使う // 長い文字列では注意が必要 b = strf("%s",ptr) mes b // dupptr を使う // これはクローンであることに注意 // 参照だけでなく破壊的な操作を行う場合はコピーすること dupptr c, ptr, 1, 2 mes c // ls…

シングルカラムで幅いっぱい

.main, .sidebar { float: none; width: auto; } .sidebar { margin-left: 0; border: 0; } .main div.calendar, .main div.day { margin-right: 0; } #simple-header, h1, .hatena-body { width: auto; max-width: none; } .hatena-body { border: 0; }

演算子の優先度できたよ!

昨日のメモの通りでいけた。 ついでに、クラス化したり、単行演算子も実装したりした。 class Calc class Operator def initialize( priority, proc ) @priority = priority @proc = proc end attr_reader :priority, :proc end class TokenType def initial…

演算子の優先度について考える

こんな感じかなぁ。 1+2*3+4 1 1| + 1|+ 2 12|+ 次を先読み |* +より優先度高い |→オペランドはまだ終了しない * 12|*+ 3 123|*+ 次を先読み |+ *より優先度が低い |→オペランド終了 | 123*|+ | +と優先度同じ |→オペランド終了 | 123*+| + 123*+|+ …

逆ポーランド記法への変換メモ

こんなメモが残ってました。 逆ポーランド記法に変換メモ 1+(2+((3+4))+5)+6 '1+' 1|+ ^^^ '(2+' 12|++ ^^^ '((3+' 123|+++ ^^^ '4' 1234+|++ ←右辺4が終了 ^ '))' 1234++|+ ←右辺(3+4)が終了 '+' 1234++|++ ^ '5' 1234++5+|+ ←右辺5が終了 ^ ')' 1234++5++|…

式の計算(カッコあり、演算子の結合優先順位なし)

何も見ずに書いたのですが、逆ポーランド記法に変換する処理に頭を使いました>< まだ演算子の結合優先順位が残ってる、ひー>< # 式を逆ポーランド記法に変換して計算 # カッコあり # 演算子の結合優先順位なし token_defs = [ [:space, /\s+/], [:operat…

新しくプログラミング言語を覚えたいときに行うべき10の練習問題をRubyで

出来たのから投稿していく 1:なんらかのカウントアップメッセージを1から100まで出すけど、3のときだけアホになる!(例:1万円!2万円!しゃ〜ん万円!とか) 一つ目 loop{puts '俺って天才!'} 二つ目 (1..100).each do |i| if i == 3 print 'しゃ〜ん' el…

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…

今日はtoken.cpp のプリプロセス処理のソースを読んでます。

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

これは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をダブルクリックして開いてメニューからビルド…

スタイルをFuji Diablogでも使っているのにしてみたけど

これはない>< 見にくいったら仕方がない。このスタイルは汎用的でないことが判明した。 すぐに戻した