summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Namers.scala
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2007-06-09 17:00:37 +0000
committerIulian Dragos <jaguarul@gmail.com>2007-06-09 17:00:37 +0000
commitd4cc633ec978a0a6e04e11c2d6d8425e2d3b3725 (patch)
treed4dfc570e0d8fa11f15ee2ae6c4bcc019a1ae975 /src/compiler/scala/tools/nsc/typechecker/Namers.scala
parent8414ebada9615aac0e8b436e7bdbeee5986ccaa3 (diff)
downloadscala-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.scala14
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)