run(code, options) {
		let script;
		let filename;

		if (typeof options === 'object') {
			filename = options.filename;
		} else {
			filename = options;
		}

		if (code instanceof VMScript) {
			script = code._compileVM();
			checkAsync(this._allowAsync || !code._hasAsync);
		} else {
			const useFileName = filename || 'vm.js';
			let scriptCode = this._compiler(code, useFileName);
			const ret = transformer(null, scriptCode, false, false, useFileName);
			scriptCode = ret.code;
			checkAsync(this._allowAsync || !ret.hasAsync);
			// Compile the script here so that we don't need to create a instance of VMScript.
			script = new Script(scriptCode, {
				__proto__: null,
				filename: useFileName,
				displayErrors: false
			});
		}

		if (!this.timeout) {
			return this._runScript(script);
		}

		return doWithTimeout(() => {
			return this._runScript(script);
		}, this.timeout);
	}
Run the code in VM.

@public
@param {(string|VMScript)} code - Code to run.
@param {(string|Object)} [options] - Options map or filename.
@param {string} [options.filename="vm.js"] - Filename that shows up in any stack traces produced from this script.<br>
This is only used if code is a String.
@return {*} Result of executed code.
@throws {SyntaxError} If there is a syntax error in the script.
@throws {Error} An error is thrown when the script took to long and there is a timeout.
@throws {*} If the script execution terminated with an exception it is propagated.