如何在 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 转译器)中保留变量名的主要内容,如果未能解决你的问题,请参考以下文章

如何将 DOM 元素脚本添加到 head 部分?

如何在 prisma 中使用带有外键的 createMany?

旋转元素到点击位置

如何将文本/按钮添加到一个可折叠列表的所有标题/正文?

html基础之js操作

如何将 C++ 本机对象编组到托管 C++ CLI