anchor.diff:        statement.parent = link(statement);
       }
       currentScope.define(variable);
  -    return statement;
     }
   
     /// Parse `scanner.current` as expression.
  
positive.code:     var returnStatement = new ReturnStatement(
          returnKeyword: returnKeyword, expression: expression, labels: labels);
      returnStatement.parent = link(returnStatement);
      return returnStatement;
    }
  
    /// Parse the current tokens as [ExpressionStatement].
    ExpressionStatement parseExpressionStatement(
        linkToParent link, List<Label> labels) {
      var statement =
          new ExpressionStatement(expression: parseExpression(), labels: labels);
      scanner.consume([TokenType.semicolon]);
      statement.parent = link(statement);
      return statement;
    }
  
    /// Parse the current tokens into a [Variable] and define it in
    /// [currentScope]. If the variable is initialized with an assignment
    /// expression, parse it into an [ExpressionStatement] and add it to the AST.
    ExpressionStatement parseLocalVariable(
        linkToParent link, List<Label> labels) {
      var constToken = scanner.consumeIfMatches([TokenType.kw_const]);
      var type = parseType();
      var variableName = scanner.consume([TokenType.identifier]);
  
negative.code:   /// Call any of the `parse*Statement` methods, depending on `scanner.current`.
    /// Link the newly created object to its parent and the parent to its child,
    /// using the assigned `link` callback.
    void parseStatement(linkToParent link) {
      var labels = parseLabels();
      switch (scanner.current.type) {
        case TokenType.lcbracket:
  