- Lemon Parser Generatorが生成したコードは基本的に動的にメモリ確保しない。
- 構築時/解体時に指定したメモリ確保/解放関数が呼ばれるので、ここをスタックベースのものに置き換えることもできる。
- ただし、YYSTACKDEPTHを0にした場合は動的なスタック確保にreallocが使われる。
- しかし、このコードはC++としてはコンパイルできない。
int newSize; yyStackEntry *pNew; newSize = p->yystksz*2 + 100; pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
- キャストしなきゃダメ。
- というわけで、reallocをオーバーロードする。
struct yyStackEntry; inline yyStackEntry* realloc(yyStackEntry* ptr, size_t size) { return static_cast<yyStackEntry*>(::realloc(ptr, size)); }
コメントをかく