如何在 Cheerp(C++ 到 JavaScript 转译器)中保留变量名
Posted
技术标签:
【中文标题】如何在 Cheerp(C++ 到 JavaScript 转译器)中保留变量名【英文标题】:How to preserve variable name in Cheerp (a C++ to JavaScript transpiler) 【发布时间】:2019-07-02 13:10:50 【问题描述】:我正在使用 Cheerp (https://www.leaningtech.com/cheerp/) 将一些 C++ 代码转换为 javascript。 有没有保留变量名的选项?看起来名字总是乱七八糟
原始C++代码:
void myClass::myMethod(int32_T myParam, boolean_T *rty_Result)
switch (myParam)
case Mycase1:
case Mycase2:
case Mycase3:
case Mycase4:
case Mycase5:
*rty_Result = true;
break;
case Mycase6:
*rty_Result = (filter.field1.field2 == 1);
break;
default:
*rty_Result = false;
break;
来自 Cheerp 的输出:
function __ZN8JsBridge12AvailabilityEP9bFilter_Ti(Lthis,filter,myParam)
var tmp0=0;
switch(myParam|0)
case 5:
tmp0=filter.a3.i2|0;
return (((tmp0|0)===1?1:0)?1:0)|0;
break;
case 1:
case 2:
case 4:
case 6:
case 3:
return 1|0;
break;
default:
return 0|0;
break;
我在文档中找不到任何选项: https://github.com/leaningtech/cheerp-meta/wiki
【问题讨论】:
嗨,这里是 Cheerp 的首席开发人员。 JS 级别的“变量”并不打算映射到 C++ 级别的变量。 JS 变量只是临时值,可以映射到 C++ 中的 0、1 或多个原始变量。您可以尝试我们的 SourceMaps 支持,而不是使用 -cheerp-pretty-code 进行调试(在此处记录:github.com/leaningtech/cheerp-meta/wiki/…)。使用 SourceMaps,您可以在浏览器调试器中查看原始 C++ 代码,但不幸的是,源映射标准不支持变量。我们希望在某个时候提供 C++ 变量调试。 读者注意:有一个相关问题here。 【参考方案1】:你可以尝试传递选项:
-cheerp-pretty-code
来源:https://github.com/leaningtech/cheerp-meta/wiki/JavaScript-interoperability#clobbering-names
如果这不起作用,那么我很确定这只是不幸无法完成。
【讨论】:
不幸的是,即使在美化的代码上,我仍然看到变量名错误(例如“field1”变成“a3” @GianlucaGhettini 太糟糕了,我不确定这是否可以实现。以上是关于如何在 Cheerp(C++ 到 JavaScript 转译器)中保留变量名的主要内容,如果未能解决你的问题,请参考以下文章