hspを勉強中の身です。
基本的なことは一通りできるようになったので%tなどを用いたちょっと複雑なマクロ作りを覚えようと思い、まずは先人の作ったものを参考にさせてもらおうとhspdef.asを開き、参考にさせて頂きました。
そのおかげで%tなどの特殊展開マクロの機能は一通り理解することができたのですが、その過程で一つ疑問が生じたので質問をさせて頂きたいと思います。
それは、何故whileの実装が
#define global while(%1=1) %tcontinue %i0 %twhile *%i :%tbreak if (%1)=0 { goto *%i }
#define global wend %tcontinue *%o : %twhile goto *%o: %tbreak *%o
なのか?ということです。
まだまだ、hspを覚えたばかりの素人考えでは↓でいいのではないかと思えてしまいます。
#define test_while(%1=1) repeat -1 %c if %1 {
#define test_wend } else : break %c loop
こうすれば、_continue、_breakを定義しなくても標準命令のbreak、continueでループを制御できる上、ループ回数をcntで見ることができます。
多重ループにした時の兼ね合いかとも思い、簡単な多重ループを作って試してみましたが、不具合を見つけることはできませんでした。
しかし、実際には、この標準命令を用いた簡単な置き換えマクロではなく、特殊展開マクロを用いてwhileを実装しているということは、私の考えたtest_while、test_wendには何らかの欠陥が
存在するのだろうと思います。
私には気付けない、このtest_whileの欠陥をお教え頂く事で、今後自ら特殊展開マクロを作っていく際の、有用な視点・指針が得られればと思います。
なにとぞご回答よろしくお願い致します。