4
다음 모듈이 Scala 2.8.RC [1,2]에서 컴파일되지 않는 이유는 무엇입니까?패턴 일치 문에서 Scala 2.8.0.RC2 컴파일러 문제가 발생합니까?
object Test {
import util.matching.Regex._
val pVoid = """\s*void\s*""".r
val pVoidPtr = """\s*(const\s+)?void\s*\*\s*""".r
val pCharPtr = """\s*(const\s+)GLchar\s*\*\s*""".r
val pIntPtr = """\s*(const\s+)?GLint\s*\*\s*""".r
val pUintPtr = """\s*(const\s+)?GLuint\s*\*\s*""".r
val pFloatPtr = """\s*(const\s+)?GLfloat\s*\*\s*""".r
val pDoublePtr = """\s*(const\s+)?GLdouble\s*\*\s*""".r
val pShortPtr = """\s*(const\s+)?GLshort\s*\*\s*""".r
val pUshortPtr = """\s*(const\s+)?GLushort\s*\*\s*""".r
val pInt64Ptr = """\s*(const\s+)?GLint64\s*\*\s*""".r
val pUint64Ptr = """\s*(const\s+)?GLuint64\s*\*\s*""".r
def mapType(t: String): String = t.trim match {
case pVoid() => "Unit"
case pVoidPtr() => "ByteBuffer"
case pCharPtr() => "CharBuffer"
case pIntPtr() | pUintPtr() => "IntBuffer"
case pFloatPtr() => "FloatBuffer"
case pShortPtr() | pUshortPtr() => "ShortBuffer"
case pDoublePtr() => "DoubleBuffer"
case pInt64Ptr() | pUint64Ptr() => "LongBuffer"
case x => x
}
}
UPDATE 1
이 질문에 대해 조언을 수행 한 후, 다음 문제는 컴파일이 너무 오래 지속되는 것입니다. 당신은 추출기 패턴으로 util.matching.Regex
을 사용하려고
object Test {
import util.matching.Regex._
val PVoid = """\s*void\s*""".r
val PVoidPtr = """\s*(const\s+)?void\s*\*\s*""".r
val PCharPtr = """\s*(const\s+)GLchar\s*\*\s*""".r
val PIntPtr = """\s*(const\s+)?GLint\s*\*\s*""".r
val PUintPtr = """\s*(const\s+)?GLuint\s*\*\s*""".r
val PFloatPtr = """\s*(const\s+)?GLfloat\s*\*\s*""".r
val PDoublePtr = """\s*(const\s+)?GLdouble\s*\*\s*""".r
val PShortPtr = """\s*(const\s+)?GLshort\s*\*\s*""".r
val PUshortPtr = """\s*(const\s+)?GLushort\s*\*\s*""".r
val PInt64Ptr = """\s*(const\s+)?GLint64\s*\*\s*""".r
val PUint64Ptr = """\s*(const\s+)?GLuint64\s*\*\s*""".r
def mapType(t: String): String = t.trim match {
case PVoid() => "Unit"
case PVoidPtr() => "ByteBuffer"
case PCharPtr() => "CharBuffer"
case PIntPtr() | PUintPtr() => "IntBuffer"
case PFloatPtr() => "FloatBuffer"
case PShortPtr() | PUshortPtr() => "ShortBuffer"
case PDoublePtr() => "DoubleBuffer"
case PInt64Ptr() | PUint64Ptr() => "LongBuffer"
case x => x
}
}
Exception in thread "main" java.lang.Error:ch.epfl.lamp.fjbg.JCode$OffsetTooBigException: offset too big to fit in 16 bits: 43772
at ch.epfl.lamp.fjbg.JFieldOrMethod.writeTo(JFieldOrMethod.java:114)
at ch.epfl.lamp.fjbg.JClass.writeTo(JClass.java:315)
힌트를 보내 주셔서 감사합니다. 불행히도 이것은 컴파일 문제를 해결하지 못하는 것 같습니다. – gruenewa
아마도 "16 비트에 맞추기에는 너무 큰 오프셋"오류가 발생했을 것입니다. 이는 하나의 패턴 일치에서 많은 추출기를 사용하는 알려진 버그입니다. https://lampsvn.epfl.ch/trac/scala/ticket/1133 – retronym
많은 도움을 주셔서 감사합니다. 이것은 내 문제를 해결합니다. – gruenewa