diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2007-06-09 17:00:37 +0000 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2007-06-09 17:00:37 +0000 |
commit | d4cc633ec978a0a6e04e11c2d6d8425e2d3b3725 (patch) | |
tree | d4dfc570e0d8fa11f15ee2ae6c4bcc019a1ae975 /src/compiler/scala/tools/nsc/typechecker/Namers.scala | |
parent | 8414ebada9615aac0e8b436e7bdbeee5986ccaa3 (diff) | |
download | scala-d4cc633ec978a0a6e04e11c2d6d8425e2d3b3725.tar.gz scala-d4cc633ec978a0a6e04e11c2d6d8425e2d3b3725.tar.bz2 scala-d4cc633ec978a0a6e04e11c2d6d8425e2d3b3725.zip |
Added patch to allow definition of native metho...
Added patch to allow definition of native methods in Scala (contribution
from Stepan Koltsov)
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Namers.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Namers.scala | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala index 944d271d1d..9494b3bba6 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala @@ -741,7 +741,7 @@ trait Namers { self: Analyzer => * - `abstract' modifier only for classes * - `override' modifier never for classes * - `def' modifier never for parameters of case classes - * - declarations only in mixins or abstract classes + * - declarations only in mixins or abstract classes (when not @native) */ def validate(sym: Symbol): unit = { def checkNoConflict(flag1: int, flag2: int): unit = @@ -769,12 +769,14 @@ trait Namers { self: Analyzer => sym.isValueParameter && sym.owner.isClass && sym.owner.hasFlag(CASE)) context.error(sym.pos, "pass-by-name arguments not allowed for case class parameters"); if ((sym.flags & DEFERRED) != 0) { - if (!sym.isValueParameter && !sym.isTypeParameterOrSkolem && - !context.tree.isInstanceOf[ExistentialTypeTree] && - (!sym.owner.isClass || sym.owner.isModuleClass || sym.owner.isAnonymousClass)) { - context.error(sym.pos, - "only classes can have declared but undefined members" + varNotice(sym)) + if (sym.hasAttribute(definitions.NativeAttr.tpe)) sym.resetFlag(DEFERRED) + else if (!sym.isValueParameter && !sym.isTypeParameterOrSkolem && + !context.tree.isInstanceOf[ExistentialTypeTree] && + (!sym.owner.isClass || sym.owner.isModuleClass || sym.owner.isAnonymousClass)) { + context.error(sym.pos, + "only classes can have declared but undefined members" + varNotice(sym)) + sym.resetFlag(DEFERRED) } } checkNoConflict(DEFERRED, PRIVATE) |