Anonymous Objects

This commit is contained in:
Andrey Breslav
2010-11-19 11:09:23 +03:00
parent 661931469b
commit 8beb0da924
6 changed files with 69 additions and 11 deletions
+21
View File
@@ -0,0 +1,21 @@
addMouseListener(object MouseAdapter() {
private var clickCount = 0;
override fun mouseClicked(e : MouseEvent) {
clickCount++;
if (clickCount > 3) GOD.sendMessage(GodMEssages.TOO_MANY_CLICKS);
}
})
enum class GodMessages {
TOO_MANY_CLICKS
ONE_MORE_MESSAGE
}
// Type of this variable is GOD_AnonymousClass
val GOD = object {
fun sendMessage(message : GodMEssage) = throw new RuntimeException(message.name)
};
addMouseListener([mouseClicked : {e => doFoo()}]);
+13
View File
@@ -0,0 +1,13 @@
class ConcreteClass {
this() {}
}
// Implicitly generated a factory for ConcreteClass with a no-argument factory method
interface class IFooBarInterface {
new () { }
}
factory
+2
View File
@@ -0,0 +1,2 @@
l filter {it.x} map {it.foo} aggregate {a, b => a + b}
+5 -1
View File
@@ -16,7 +16,11 @@ class
("(" defaultConstructorParameter{","} ")")?
(":" delegationSpecifier{","})?
("where" typeConstraint{","})? // Syntax is questionable
("{" memberDeclaration{","} "}"?
classBody?
;
classBody
: ("{" memberDeclaration{","} "}"
;
classModifier
+1
View File
@@ -8,6 +8,7 @@ match
matchEntry
: "case" pattern "=>" expression // TODO: Consider other options than "=>"
: "else" "=>" expression // TODO: keyword
;
for
+27 -10
View File
@@ -8,11 +8,7 @@ expression
: "null"
: "this"
: memberAccessExpression
: infixFunctionCall
: binOpExpression
: assignment
: unOpExpression
: castExpression
: expressionWithPrecedences
: match
: if
: "new" constructorInvocation
@@ -21,8 +17,21 @@ expression
: jump
;
castExpression
: expression "as" type
expressionWithPrecedences // See the precedence table, everything associates to the left
: infixFunctionCall
: binOpExpression
: assignment
: unOpExpression
: castExpression
: typingExpression
;
typingExpression
: expression typingOperation type
;
typingOperation
: "as" : "is" : "isnot"
;
binOpExpression
@@ -35,14 +44,18 @@ unOpExpression
;
binaryOperation // Decreasing precedence
: "*" : "/" // No %
// .
// unary
: "*" : "/" : "%"
: "+" : "-"
// No << >> >>>
: "<" : ">" : ">=" : "<=" : "is" : "isnot" : "in" // TODO: Check the precedence for in carefully
: "!=" : "==" : "==="
// named functions in infix form
: "<" : ">" : ">=" : "<=" : "in" // is isnot as // TODO: Check the precedence for in carefully
: "!=" : "==" : "===" : "!=="
// No | & ^ ~
: "&&"
: "||"
// assignments
;
assignmentOperator
@@ -144,4 +157,8 @@ fieldOrPropertyAccess
arrayAccess
: "[" expression "]"
;
anonymousInnerClassInstantiation
: "object" delegationSpecifier{","} classBody
;