Chromium Code Reviews| Index: frog/leg/scanner/class_element_parser.dart |
| diff --git a/frog/leg/scanner/class_element_parser.dart b/frog/leg/scanner/class_element_parser.dart |
| index 256a48e48f03b9d3acab05153177a4c701e6842c..ce300fa0de423d95712ee06f55f6aec93883d1b0 100644 |
| --- a/frog/leg/scanner/class_element_parser.dart |
| +++ b/frog/leg/scanner/class_element_parser.dart |
| @@ -39,26 +39,41 @@ class MemberListener extends NodeListener { |
| [Element this.enclosingElement = null]) |
| : super(canceler, logger); |
| - bool isConstructor(Identifier name) { |
| - return enclosingElement !== null && |
| - enclosingElement.kind == ElementKind.CLASS && |
| - enclosingElement.name == name.source; |
| + bool isConstructorName(Node nameNode) { |
|
ngeoffray
2012/01/19 08:56:12
Why renaming it to isConstructorName? isConstructo
karlklose
2012/01/19 13:51:24
Because it operates on a 'name'-node, not the cons
ngeoffray
2012/01/19 14:36:33
OK.
|
| + if (enclosingElement === null || |
| + enclosingElement.kind != ElementKind.CLASS) { |
| + return false; |
| + } |
| + SourceString name; |
| + if (nameNode.asIdentifier() != null) { |
| + name = nameNode.asIdentifier().source; |
| + } else { |
| + Send send = nameNode.asSend(); |
| + name = send.receiver.asIdentifier().source; |
| + } |
| + return enclosingElement.name == name; |
| } |
| void endMethod(Token beginToken, Token endToken) { |
| super.endMethod(beginToken, endToken); |
| FunctionExpression method = popNode(); |
| pushNode(null); |
| - Expression qualified = method.name; |
| - Identifier name = qualified.asIdentifier(); |
| - if (name === null) { |
| - canceler.cancel('qualified names are not implemented', node: qualified); |
| + bool isConstructor = isConstructorName(method.name); |
| + SourceString name; |
| + if (method.name.asSend() != null) { |
| + Identifier receiver = method.name.asSend().receiver.asIdentifier(); |
| + Identifier selector = method.name.asSend().selector.asIdentifier(); |
| + SourceString className = receiver.source; |
| + SourceString constructorName = selector.source; |
| + name = new SourceString('$className.$constructorName'); |
|
ngeoffray
2012/01/19 08:56:12
Since you are putting constructors in a different
karlklose
2012/01/19 13:51:24
The map contains factories, too.
ngeoffray
2012/01/19 14:36:33
The 'constructor' map right? That's no problem, ge
|
| + } else { |
| + name = method.name.asIdentifier().source; |
| } |
| - ElementKind kind = isConstructor(name) ? |
| + ElementKind kind = isConstructor ? |
| ElementKind.GENERATIVE_CONSTRUCTOR : |
| ElementKind.FUNCTION; |
| Element memberElement = |
| - new PartialFunctionElement(name.source, beginToken, endToken, |
| + new PartialFunctionElement(name, beginToken, endToken, |
| kind, method.modifiers, enclosingElement); |
| enclosingElement.addMember(memberElement); |
| } |