【问题标题】:How to preserve variable name in Cheerp (a C++ to JavaScript transpiler)如何在 Cheerp(C++ 到 JavaScript 转译器)中保留变量名
【发布时间】: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

标签: javascript c++ transpiler cheerp


【解决方案1】:

你可以尝试传递选项:

-cheerp-pretty-code

来源:https://github.com/leaningtech/cheerp-meta/wiki/JavaScript-interoperability#clobbering-names

如果这不起作用,那么我很确定这只是不幸无法完成。

【讨论】:

  • 不幸的是,即使在美化的代码上,我仍然看到变量名错误(例如“field1”变成“a3”
  • @GianlucaGhettini 太糟糕了,我不确定这是否可以实现。
猜你喜欢
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多