Pregunta

He buscado en la web para cómo hacer cumplir srictfp en Scala, pero no pudo encontrar ningún indicio de ello. Hay algunas personas que se quejan de ello, pero las soluciones reales no se pueden encontrar. Hay una bugtracker entrada al respecto que es casi dos años. Por lo que parece no hay una solución elegante para que en la forma en que estoy en busca de soluciones.

Mi idea actual es fijar la bandera apropiada ACC_STRICT método en el código de bytes generada por mí de alguna manera, pero no tengo idea de lo que sería la mejor solución para ello. Un compilador Scala Plugin viene a la mente o simplemente banderas de piratería en un editor hexadecimal. Tal vez alguien se enfrentó al mismo reto y me puede decir su solución?

¿Fue útil?

Solución

Se podría añadir un post-procesador en su proceso de construcción que añadir el modificador strictfp a la clase generada (es decir, el establecimiento de la bandera ACC_STRICT como usted dice).

Puede implementar tal un post-procesador utilizando Javassist por ejemplo. Esto podría tener este aspecto:

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")));

A continuación, tendría que encontrar una manera de configurar qué clases / métodos deben ser modificados de esta manera.

Otros consejos

Scala tiene una anotación strictfp ahora:

@strictfp
def f() = …
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top