Scala中没有strictfp - 解决方法?

时间:2010-10-27 15:09:30

标签: scala strictfp

我在网上搜索了如何在Scala中强制执行srictfp但却找不到任何暗示。有些人抱怨它,但找不到真正的解决方案。关于它的bugtracker entry差不多有两年了。因为在我寻找解决方法的方式上似乎没有优雅的解决方法。

我目前的想法是以某种方式在生成的字节码中设置适当的方法标志ACC_STRICT,但我不知道这样做的最佳解决方案是什么。在十六进制编辑器中出现Scala编译器插件或者只是黑客标记。也许有人面临同样的挑战,可以告诉我他或她的解决方案吗?

2 个答案:

答案 0 :(得分:5)

您可以在构建过程中添加一个后处理程序,将strictfp修饰符添加到生成的类中(例如,设置ACC_STRICT标记)。

例如,您可以使用Javassist来实现这样的后处理器。这看起来像这样:

CtClass clazz = ClassPool.getDefault().makeClass(
                    new FileInputStream("old/HelloWorld.class"));

CtMethod method = clazz.getDeclaredMethod("testMethod");

method.setModifiers(method.getModifiers() | Modifier.STRICT);

clazz.detach();
clazz.toBytecode(new DataOutputStream(new FileOutputStream(
    "new/HelloWorld.class")));

然后,您必须找到一种方法来配置需要以这种方式修改哪些类/方法。

答案 1 :(得分:0)

Scala现在有一个strictfp注释:

@strictfp
def f() = …