| Index: compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
 | 
| ===================================================================
 | 
| --- compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java	(revision 8336)
 | 
| +++ compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java	(working copy)
 | 
| @@ -424,6 +424,9 @@
 | 
|           nonVoidTypeOf(rhsNode);
 | 
|           return boolType;
 | 
|  
 | 
| +       case AS:
 | 
| +         return typeOf(rhsNode);
 | 
| +
 | 
|         case IS:
 | 
|           if (rhsNode instanceof DartUnaryExpression) {
 | 
|             assert ((DartUnaryExpression) rhsNode).getOperator() == Token.NOT;
 | 
| @@ -525,14 +528,14 @@
 | 
|              @Override
 | 
|              public Void visitBinaryExpression(DartBinaryExpression node) {
 | 
|                // don't infer type if condition negated
 | 
| -              if (!negation && node.getOperator() == Token.IS) {
 | 
| +              if (!negation && (node.getOperator() == Token.IS || node.getOperator() == Token.AS)) {
 | 
|                  DartExpression arg1 = node.getArg1();
 | 
|                  DartExpression arg2 = node.getArg2();
 | 
|                  if (arg1 instanceof DartIdentifier && arg1.getElement() instanceof VariableElement
 | 
|                      && arg2 instanceof DartTypeExpression) {
 | 
|                    VariableElement variableElement = (VariableElement) arg1.getElement();
 | 
| -                  Type isType = arg2.getType();
 | 
| -                  Type varType = Types.makeInferred(isType);
 | 
| +                  Type rhsType = arg2.getType();
 | 
| +                  Type varType = Types.makeInferred(rhsType);
 | 
|                    variableRestorer.setType(variableElement, varType);
 | 
|                  }
 | 
|                }
 | 
| 
 |