こんにちは、@rednaxelafxことKrisと申します。
たぶん「はじめまして」ではないかと、Twitterで検索したところ、たしかにもっと前から挨拶をしました(笑)
https://twitter.com/rednaxelafx/status/14597568550
Web連載も結構前から読みましたが、「プログラミング言語を作る」が本になって本当に嬉しかったです。
去年中国の編集さんにこの本を強く薦めました。いまはやっとその中国語翻訳版が買えるようになりまして、自分のブログでこの本を押したいと思います。
このたびはcrowbarについてちょっと聞きたいことがあります。
本のサンプルコードをこちらからダウンロードしました:
http://kmaebashi.com/programmer/devlang/book/unix_utf8_20091228.tgz
その中のcrowbar_book_0_4ですが、interface.cでのrelease_global_strings()がこうなっています:
static void
release_global_strings(CRB_Interpreter *interpreter) {
while (interpreter->variable) {
Variable *temp = interpreter->variable;
interpreter->variable = temp->next;
}
}
この関数がもともと何をしようとしてますか?このままだと、ループしなくても、直接に interpreter->variable = NULL でも同じではないですか?
もしかしたらこうしたかったとか:
static void
release_global_strings(CRB_Interpreter *interpreter) {
while (interpreter->variable) {
Variable *temp = interpreter->variable;
Variable *temp_next = temp->next;
temp->next = NULL;
interpreter->variable = temp_next;
}
}