anchor.diff:    }
   
     @override
  -  List<dart.Code> visitAssignmentExpression(AssignmentExpression node) => [
  -        ...node.right.accept(this),
  -        ...node.left.identifier.maybeMap(
  -          property: (property) {
  -            final name = property.id.simplePath.last.nameOrNull ??
  -                (throw CompilerError.internalError(
  -                    'Path must be path to property.'));
  -            final parent = property.id.parent;
  -            if (parent.isModule) {
  -              return [
  -                dart
  -                    .refer(name, declarationIdToImportUrl(context, parent))
  -                    .assign(_refer(node.right.id))
  -                    .statement
  -              ];
  -            } else if (getPropertyDeclarationHir(context, property.id)
  -                .isStatic) {
  -              return [
  -                compileTypeName(context, parent)
  -                    .property(name)
  -                    .assign(_refer(node.right.id))
  -                    .statement
  -              ];
  -            } else {
  -              assert(property.receiver != null);
  -              return [
  -                ...property.receiver.accept(this),
  -                dart.refer(name).assign(_refer(node.right.id)).statement,
  -              ];
  -            }
  -          },
  -          localProperty: (property) => [
  -            _refer(getExpression(context, property.id).value.id)
  -                .assign(_refer(node.right.id))
  -                .statement
  -          ],
  -          orElse: () => throw CompilerError.internalError('Left side of '
  -              'assignment can only be property or local property '
  -              'identifier, but was ${node.left.runtimeType} '
  -              '(${node.left})'),
  -        ),
  -      ];
  +  List<dart.Code> visitAssignmentExpression(AssignmentExpression node) {
  +    final code = [
  +      ...node.right.accept(this),
  +    ];
  +    final left = node.left.identifier.maybeMap(
  +      property: (property) {
  +        final name = property.id.simplePath.last.nameOrNull ??
  +            (throw CompilerError.internalError(
  +                'Path must be path to property.'));
  +        final parent = property.id.parent;
  +        if (parent.isModule) {
  +          return dart.refer(name, declarationIdToImportUrl(context, parent));
  +        } else if (getPropertyDeclarationHir(context, property.id).isStatic) {
  +          return compileTypeName(context, parent).property(name);
  +        } else {
  +          assert(property.receiver != null);
  +          code.addAll(property.receiver.accept(this));
  +          return dart.refer(name);
  +        }
  +      },
  +      localProperty: (property) =>
  +          _refer(getExpression(context, property.id).value.id),
  +      orElse: () => throw CompilerError.internalError('Left side of '
  +          'assignment can only be property or local property '
  +          'identifier, but was ${node.left.runtimeType} '
  +          '(${node.left})'),
  +    );
  +
  +    code.add(left.safeAssign(node.right).statement);
  +    return code;
  +  }
   
     @override
     List<dart.Code> visitIsExpression(IsExpression node) {
  
positive.code: 
    @override
    List<dart.Code> visitLoopExpression(LoopExpression node) => [
          dart.Code('void ${_name(node.id)};'),
          dart.Code('${_label(node.id)}:\nwhile (true) {'),
          for (final expression in node.body) ...expression.accept(this),
          dart.Code('}'),
  
negative.code:   List<dart.Code> visitBreakExpression(BreakExpression node) => [
          if (node.expression != null) ...[
            ...node.expression.accept(this),
            _refer(node.scopeId).safeAssign(node.expression).statement,
          ],
          dart.Code('break ${_label(node.scopeId)};'),
          _save(node, dart.literalNull),
  