constructor() {
    super();
    this.stack_ = [new AnnotationsScope()];
  }
Annotation extension

This transforms annotations into metadata properties.  The metadata is
stored as an array in one of two properties, either "annotations" or
"parameters".  Each annotation stored is constructed and any parameters
specified on the annotation are passed to the annotation's constructor.

Annotations on a function, class, method, or accessor are stored in the
"annotations", array on the corresponding element.

Annotations on parameters are stored in the "parameters" array on the parent
element.  The parameters metadata array is a two dimensional array where
each entry is an array of metadata for each parameter in the method
declaration.  If the parameter is typed then the first entry in its
corresponding metadata will be the type followed by any annotations.

Class example:
  @A
  class B {
    constructor(@A x:T) {
      super();
    }
    @A
    method(@A x:T) {
    }
  }

  =>

   var B = function(x) {
     "use strict";
     $traceurRuntime.superConstructor($B).call(this);
   };
   var $B = ($traceurRuntime.createClass)(B, {method: function(x) {
       "use strict";
     }}, {});
   B.annotations = [new A];
   B.parameters = [[T, new A]];
   B.prototype.method.annotations = [new A];
   B.prototype.method.parameters = [[T, new A]];

Function example:

  @A
  function b(@A c:T, d:T) {}

  =>

   function b(c, d) {}
   b.annotations = [new A];
   b.parameters = [[T, new A], [T]];