如何防止Haxe中实用程序库的死代码删除?

时间:2015-07-14 21:20:25

标签: haxe dead-code

我的任务是创建用户输入的一致性测试,这项任务非常棘手,我们需要非常高的可靠性。服务器在PHP上运行,客户端在JS上运行,我认为Haxe可能会减少重复工作。

但是,我在删除死码时遇到了麻烦。由于我只是创建辅助函数(utilObject.isMeaningOfLife(42)),因此我没有主程序来调用每个函数。我尝试将@:keep:添加到实用程序类中,但无论如何它都被删除了。

我尝试通过-main开关指定该实用程序类,但我必须添加一个虚拟main()方法,并且这不会扩展到该单个类之外。

1 个答案:

答案 0 :(得分:0)

您可以使用编译器参数强制包含在给定包及其子包中定义的所有文件包含在构建中。

haxe --macro include('my.package') ..等

这是macro.Compiler.include功能的快捷方式。 正如您所看到的,此功能的签名允许您以递归方式执行此操作并排除包。

static include (pack:String, rec:Bool = true, ?ignore:Array<String>, ?classPaths:Array<String>):Void

对于每个图书馆类,我认为你不必在这种情况下使用@:keep

我不确定这是否是您正在寻找的,我希望它有所帮助。 否则,这可能是有用的检查:

  • 如果您不使用代码,那么代码是否被删除是不是很糟糕?
  • 也可能是最终输出中内联了一些代码?
  • 使用注释中提到的编译器标志-dce std编译代码。
  • 如果您使用静态分析仪,请不要使用它。
  • 添加@:keep并在某处引用类+函数。
  • 如果可以重现,则提供最小的设置。