BoomingTech / Piccolo

Piccolo (formerly Pilot) – mini game engine for games104
MIT License
5.69k stars 1.79k forks source link

关于 parser 解析的 type 带有空格的问题 #413

Open hebohang opened 1 year ago

hebohang commented 1 year ago

在这里的代码: https://github.com/BoomingTech/Piccolo/blob/65379de9f67fe9c1d809e925c459d397e680ea8a/engine/source/meta_parser/parser/language_types/field.cpp#L11 强行把空格去掉会导致带有空格的类型会反射生成失败(例如 std::vector 类型,它生成的反射文件的 type 会去掉空格,导致codegen的时候的static_cast会出现类型unsignedchar,无法解析而失败)

或许可以考虑加在这里(codegen的时候去掉空格): https://github.com/BoomingTech/Piccolo/blob/65379de9f67fe9c1d809e925c459d397e680ea8a/engine/source/meta_parser/parser/generator/reflection_generator.cpp#L94 例如:

Utils::replaceAll(array_useful_name, " ", "");
vector_define.set("vector_useful_name", array_useful_name);
yangkeshengli commented 1 year ago

举个错误解析的例子,为什么会带空格

hebohang commented 1 year ago

举个错误解析的例子,为什么会带空格

就是上面说的,std::vector<unsigned char>,因为对 vector 类型做了特殊处理,在parse field的阶段就去掉空格会导致codegen阶段的类型生成失去空格(即type从unsigned char变为了unsignedchar),从而解析失败。因此我想说可以考虑在codegen阶段去掉空格,改动方法如上。

yangkeshengli commented 1 year ago

可以