constructor(root, options) {
    super(root);
    options = options || {};
    var functions = this.functions = options.functions || {};
    this.stack = new Stack;
    this.imports = options.imports || [];
    this.globals = options.globals || {};
    this.paths = options.paths || [];
    this.prefix = options.prefix || '';
    this.filename = options.filename;
    this.includeCSS = options['include css'];
    this.resolveURL = functions.url
      && 'resolver' == functions.url.name
      && functions.url.options;
    this.paths.push(dirname(options.filename || '.'));
    this.stack.push(this.global = new Frame(root));
    this.warnings = options.warn;
    this.options = options;
    this.calling = []; // TODO: remove, use stack
    this.importStack = [];
    this.requireHistory = {};
    this.return = 0;
  }
Initialize a new `Evaluator` with the given `root` Node
and the following `options`.

Options:

  - `compress`  Compress the css output, defaults to false
  - `warn`  Warn the user of duplicate function definitions etc

@param {Node} root
@api private