Chromium Code Reviews| Index: pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart |
| diff --git a/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart b/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart |
| index dea26fa211f661820f9fa7a305bb03d292db2a94..b40be08a67ae07a029e8892dcef090464cb39bed 100644 |
| --- a/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart |
| +++ b/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart |
| @@ -541,10 +541,11 @@ class SimpleTypeInferrerVisitor<T> |
| locals.update(element, parameterType, node); |
| }); |
| ClassElement cls = analyzedElement.enclosingClass; |
| + Spannable spannable = node; |
| if (analyzedElement.isSynthesized) { |
| - node = analyzedElement; |
| + spannable = analyzedElement; |
| ConstructorElement constructor = analyzedElement; |
| - synthesizeForwardingCall(node, constructor.definingConstructor); |
| + synthesizeForwardingCall(spannable, constructor.definingConstructor); |
| } else { |
| visitingInitializers = true; |
| visit(node.initializers); |
| @@ -570,7 +571,8 @@ class SimpleTypeInferrerVisitor<T> |
| if (field.isFinal) return; |
| T type = locals.fieldScope.readField(field); |
| if (type == null && field.initializer == null) { |
| - inferrer.recordTypeOfNonFinalField(node, field, types.nullType); |
| + inferrer.recordTypeOfNonFinalField( |
| + spannable, field, types.nullType); |
| } |
| }); |
| } |
| @@ -580,6 +582,12 @@ class SimpleTypeInferrerVisitor<T> |
| locals.update(element, inferrer.typeOfElement(element), node); |
| }); |
| visit(node.body); |
| + if (function.asyncMarker != AsyncMarker.SYNC) { |
| + // TODO(herhut): Should be type Future/Iterable/Stream instead of |
| + // dynamic. |
| + returnType = inferrer.addReturnTypeFor( |
| + analyzedElement, returnType, types.dynamicType); |
| + } else |
|
herhut
2015/02/04 09:42:49
Put else and if on one line.
sigurdm
2015/02/04 10:11:44
Thanks
|
| if (returnType == null) { |
| // No return in the body. |
| returnType = locals.seenReturnOrThrow |
| @@ -995,6 +1003,12 @@ class SimpleTypeInferrerVisitor<T> |
| return null; |
| } |
| + T visitAwait(ast.Await node) { |
| + T futureType = node.expression.accept(this); |
| + // TODO(herhut): Return a better type here if possible. |
| + return types.dynamicType; |
| + } |
| + |
| T visitStaticSend(ast.Send node) { |
| Element element = elements[node]; |
| if (elements.isAssert(node)) { |