Bug 1439763 - Update Debugger Frontend v18. r=jdescottes

MozReview-Commit-ID: 5JeJsxQ6dR7

--HG--
extra : rebase_source : f8e4ccc33a6f2dbd8dd64e42a34da97cc91733f8
This commit is contained in:
Jason Laster 2018-02-21 10:02:54 +01:00
parent ebc99601c7
commit b78b7a1595
27 changed files with 9997 additions and 154 deletions

View File

@ -1,8 +1,8 @@
This is the debugger.html project output.
See https://github.com/devtools-html/debugger.html
Version 17.0
Comparison: https://github.com/devtools-html/debugger.html/compare/release-16...release-17
Version 18.0
Comparison: https://github.com/devtools-html/debugger.html/compare/release-17...release-18
Packages:
- babel-plugin-transform-es2015-modules-commonjs @6.26.0

View File

@ -1652,7 +1652,7 @@ html[dir="rtl"] .arrow svg,
background-color: white;
}
.tree-node[data-expandable="false"] .tree-indent:last-of-type {
.tree:not(.object-inspector) .tree-node[data-expandable="false"] .tree-indent:last-of-type {
margin-inline-end: 4px;
}
/* This Source Code Form is subject to the terms of the Mozilla Public
@ -2109,6 +2109,12 @@ html .toggle-button.end.vertical svg {
.objectBox-string a, .objectBox-string a:visited {
color: currentColor;
text-decoration: none;
font-style: italic;
}
.objectBox-string a:hover {
text-decoration: underline;
}
.objectBox-function,
@ -3711,14 +3717,6 @@ img.ignore-exceptions {
opacity: 0.6;
}
.object-node {
padding-left: 4px;
}
html[dir="rtl"] .object-node {
padding-right: 4px;
}
.object-label {
color: var(--theme-highlight-blue);
}
@ -3742,6 +3740,10 @@ html[dir="rtl"] .object-node {
overflow: auto;
}
.scopes-list {
padding-inline-start: 4px;
}
.scopes-list .tree:focus {
outline: none;
}

View File

@ -18654,7 +18654,6 @@ __webpack_require__(1324);
const Undefined = __webpack_require__(1560);
const Null = __webpack_require__(1561);
const StringRep = __webpack_require__(1447);
const LongStringRep = __webpack_require__(1562);
const Number = __webpack_require__(1563);
const ArrayRep = __webpack_require__(1448);
const Obj = __webpack_require__(1564);
@ -18687,7 +18686,7 @@ const Grip = __webpack_require__(1409);
// List of all registered template.
// XXX there should be a way for extensions to register a new
// or modify an existing rep.
let reps = [RegExp, StyleSheet, Event, DateTime, CommentNode, ElementNode, TextNode, Attribute, LongStringRep, Func, PromiseRep, ArrayRep, Document, Window, ObjectWithText, ObjectWithURL, ErrorRep, GripArray, GripMap, GripMapEntry, Grip, Undefined, Null, StringRep, Number, SymbolRep, InfinityRep, NaNRep, Accessor];
let reps = [RegExp, StyleSheet, Event, DateTime, CommentNode, ElementNode, TextNode, Attribute, Func, PromiseRep, ArrayRep, Document, Window, ObjectWithText, ObjectWithURL, ErrorRep, GripArray, GripMap, GripMapEntry, Grip, Undefined, Null, StringRep, Number, SymbolRep, InfinityRep, NaNRep, Accessor];
/**
* Generic rep that is using for rendering native JS types or an object.
@ -18755,7 +18754,6 @@ module.exports = {
GripMap,
GripMapEntry,
InfinityRep,
LongStringRep,
NaNRep,
Null,
Number,
@ -22423,6 +22421,10 @@ function supportsObject(object, noGrip = false) {
return false;
}
if (object.class === "DeadObject") {
return true;
}
return object.preview ? typeof object.preview.ownProperties !== "undefined" : typeof object.ownPropertyLength !== "undefined";
}
@ -25210,6 +25212,7 @@ const {
rawCropString,
sanitizeString,
wrapRender,
isGrip,
tokenSplitRegex,
ELLIPSIS
} = __webpack_require__(1353);
@ -25224,9 +25227,9 @@ StringRep.propTypes = {
useQuotes: PropTypes.bool,
escapeWhitespace: PropTypes.bool,
style: PropTypes.object,
object: PropTypes.string.isRequired,
member: PropTypes.any,
cropLimit: PropTypes.number,
cropLimit: PropTypes.number.isRequired,
member: PropTypes.string,
object: PropTypes.object.isRequired,
openLink: PropTypes.func,
className: PropTypes.string,
omitLinkHref: PropTypes.bool
@ -25235,40 +25238,118 @@ StringRep.propTypes = {
function StringRep(props) {
let {
className,
cropLimit,
object: text,
member,
style,
cropLimit,
object,
useQuotes = true,
escapeWhitespace = true,
member,
openLink,
omitLinkHref = true
} = props;
let text = object;
const isLong = isLongString(object);
const shouldCrop = (!member || !member.open) && cropLimit && text.length > cropLimit;
if (isLong) {
text = maybeCropLongString({
shouldCrop,
cropLimit
}, text);
}
text = formatText({
useQuotes,
escapeWhitespace
}, text);
const config = getElementConfig({
className,
style,
actor: object.actor
});
if (!isLong) {
if (containsURL(text)) {
return span(config, ...getLinkifiedElements(text, shouldCrop && cropLimit, omitLinkHref, openLink));
}
// Cropping of longString has been handled before formatting.
text = maybeCropString({
isLong,
shouldCrop,
cropLimit
}, text);
}
return span(config, text);
}
function maybeCropLongString(opts, text) {
const {
shouldCrop,
cropLimit
} = opts;
const {
fullText,
initial,
length
} = text;
text = shouldCrop ? initial.substring(0, cropLimit) : fullText || initial;
if (text.length < length) {
text += ELLIPSIS;
}
return text;
}
function formatText(opts, text) {
let {
useQuotes,
escapeWhitespace
} = opts;
return useQuotes ? escapeString(text, escapeWhitespace) : sanitizeString(text);
}
function getElementConfig(opts) {
const {
className,
style,
actor
} = opts;
const config = {};
if (actor) {
config["data-link-actor-id"] = actor;
}
const classNames = ["objectBox", "objectBox-string"];
if (className) {
classNames.push(className);
}
let config = { className: classNames.join(" ") };
config.className = classNames.join(" ");
if (style) {
config.style = style;
}
if (useQuotes) {
text = escapeString(text, escapeWhitespace);
} else {
text = sanitizeString(text);
}
return config;
}
const shouldCrop = (!member || !member.open) && cropLimit && text.length > cropLimit;
if (!containsURL(text)) {
if (shouldCrop) {
text = rawCropString(text, cropLimit);
}
return span(config, text);
}
function maybeCropString(opts, text) {
const {
shouldCrop,
cropLimit
} = opts;
return span(config, ...getLinkifiedElements(text, shouldCrop && cropLimit, omitLinkHref, openLink));
return shouldCrop ? rawCropString(text, cropLimit) : text;
}
/**
@ -25377,7 +25458,15 @@ function getCroppedString(text, offset = 0, startCropIndex, endCropIndex) {
return text;
}
function isLongString(object) {
return object && object.type === "longString";
}
function supportsObject(object, noGrip = false) {
if (noGrip === false && isGrip(object)) {
return isLongString(object);
}
return getGripType(object, noGrip) == "string";
}
@ -29620,7 +29709,7 @@ function evaluateInFrame(frameId, script) {
function evaluate(script, { frameId } = {}) {
const params = frameId ? { frameActor: frameId } : {};
if (!tabTarget || !tabTarget.activeConsole) {
if (!tabTarget || !tabTarget.activeConsole || !script) {
return Promise.resolve();
}
@ -35998,83 +36087,7 @@ module.exports = {
};
/***/ }),
/* 1562 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Dependencies
const PropTypes = __webpack_require__(20);
const {
escapeString,
sanitizeString,
isGrip,
wrapRender
} = __webpack_require__(1353);
const dom = __webpack_require__(1758);
const { span } = dom;
/**
* Renders a long string grip.
*/
LongStringRep.propTypes = {
useQuotes: PropTypes.bool,
escapeWhitespace: PropTypes.bool,
style: PropTypes.object,
cropLimit: PropTypes.number.isRequired,
member: PropTypes.string,
object: PropTypes.object.isRequired
};
function LongStringRep(props) {
let {
cropLimit,
member,
object,
style,
useQuotes = true,
escapeWhitespace = true
} = props;
let { fullText, initial, length } = object;
let config = {
"data-link-actor-id": object.actor,
className: "objectBox objectBox-string"
};
if (style) {
config.style = style;
}
let string = member && member.open ? fullText || initial : initial.substring(0, cropLimit);
if (string.length < length) {
string += "\u2026";
}
let formattedString = useQuotes ? escapeString(string, escapeWhitespace) : sanitizeString(string);
return span(config, formattedString);
}
function supportsObject(object, noGrip = false) {
if (noGrip === true || !isGrip(object)) {
return false;
}
return object.type === "longString";
}
// Exports from this module
module.exports = {
rep: wrapRender(LongStringRep),
supportsObject
};
/***/ }),
/* 1562 */,
/* 1563 */
/***/ (function(module, exports, __webpack_require__) {
@ -36193,7 +36206,7 @@ function getTitleElement(props, object) {
}
function getTitle(props, object) {
return props.title || object.class || DEFAULT_TITLE;
return props.title || DEFAULT_TITLE;
}
function safePropIterator(props, object, max) {
@ -36690,7 +36703,8 @@ function supportsObject(object, noGrip = false) {
return false;
}
return object.preview && getGripType(object, noGrip) == "HTMLDocument";
const type = getGripType(object, noGrip);
return object.preview && (type === "HTMLDocument" || type === "XULDocument");
}
// Exports from this module
@ -38074,6 +38088,9 @@ const {
nodeIsPrimitive,
nodeIsPrototype,
nodeIsSetter,
nodeIsUninitializedBinding,
nodeIsUnmappedBinding,
nodeIsUnscopedBinding,
nodeIsWindow
} = Utils.node;
@ -38266,7 +38283,13 @@ class ObjectInspector extends Component {
const unavailable = isPrimitive && itemValue && itemValue.hasOwnProperty && itemValue.hasOwnProperty("unavailable");
if (nodeIsOptimizedOut(item)) {
if (nodeIsUninitializedBinding(item)) {
objectValue = dom.span({ className: "unavailable" }, "(uninitialized)");
} else if (nodeIsUnmappedBinding(item)) {
objectValue = dom.span({ className: "unavailable" }, "(unmapped)");
} else if (nodeIsUnscopedBinding(item)) {
objectValue = dom.span({ className: "unavailable" }, "(unscoped)");
} else if (nodeIsOptimizedOut(item)) {
objectValue = dom.span({ className: "unavailable" }, "(optimized away)");
} else if (nodeIsMissingArguments(item) || unavailable) {
objectValue = dom.span({ className: "unavailable" }, "(unavailable)");
@ -39948,6 +39971,13 @@ class ConditionalPanel extends _react.PureComponent {
}
renderToWidget(props) {
if (this.cbPanel) {
if (this.props.line && this.props.line == props.line) {
return props.closeConditionalPanel();
}
this.clearConditionalPanel();
}
const { selectedLocation, line, editor } = props;
const sourceId = selectedLocation ? selectedLocation.sourceId : "";
@ -49471,6 +49501,27 @@ function nodeIsOptimizedOut(item) {
return !nodeHasChildren(item) && value && value.optimizedOut;
}
function nodeIsUninitializedBinding(item) {
const value = getValue(item);
return value && value.uninitialized;
}
// Used to check if an item represents a binding that exists in a sourcemap's
// original file content, but does not match up with a binding found in the
// generated code.
function nodeIsUnmappedBinding(item) {
const value = getValue(item);
return value && value.unmapped;
}
// Used to check if an item represents a binding that exists in the debugger's
// parser result, but does not match up with a binding returned by the
// debugger server.
function nodeIsUnscopedBinding(item) {
const value = getValue(item);
return value && value.unscoped;
}
function nodeIsMissingArguments(item) {
const value = getValue(item);
return !nodeHasChildren(item) && value && value.missingArguments;
@ -49995,6 +50046,9 @@ module.exports = {
nodeIsPrototype,
nodeIsProxy,
nodeIsSetter,
nodeIsUninitializedBinding,
nodeIsUnmappedBinding,
nodeIsUnscopedBinding,
nodeIsWindow,
nodeNeedsNumericalBuckets,
nodeSupportsNumericalBucketing,
@ -52024,7 +52078,7 @@ function tokenAtTextPosition(cm, { line, column }) {
function getExpressionFromCoords(cm, coord) {
const token = tokenAtTextPosition(cm, coord);
if (!token) {
return;
return null;
}
let startHighlight = token.startColumn;
@ -52044,6 +52098,11 @@ function getExpressionFromCoords(cm, coord) {
startHighlight = tokenBefore.startColumn;
}
const expression = line.substring(startHighlight, endHighlight);
if (!expression) {
return null;
}
const location = {
start: { line: lineNumber, column: startHighlight },
end: { line: lineNumber, column: endHighlight }

View File

@ -6,6 +6,7 @@ support-files =
head.js
!/devtools/client/commandline/test/helpers.js
!/devtools/client/framework/test/shared-head.js
examples/babel/polyfill-bundle.js
examples/babel/fixtures/for-of/output.js
examples/babel/fixtures/for-of/output.js.map
examples/babel/fixtures/shadowed-vars/output.js
@ -26,6 +27,18 @@ support-files =
examples/babel/fixtures/modules/output.js.map
examples/babel/fixtures/non-modules/output.js
examples/babel/fixtures/non-modules/output.js.map
examples/babel/fixtures/step-over-for-of/output.js
examples/babel/fixtures/step-over-for-of/output.js.map
examples/babel/fixtures/step-over-for-of-closure/output.js
examples/babel/fixtures/step-over-for-of-closure/output.js.map
examples/babel/fixtures/step-over-for-of-array/output.js
examples/babel/fixtures/step-over-for-of-array/output.js.map
examples/babel/fixtures/step-over-for-of-array-closure/output.js
examples/babel/fixtures/step-over-for-of-array-closure/output.js.map
examples/babel/fixtures/step-over-function-params/output.js
examples/babel/fixtures/step-over-function-params/output.js.map
examples/babel/fixtures/step-over-regenerator-await/output.js
examples/babel/fixtures/step-over-regenerator-await/output.js.map
examples/babel/fixtures/switches/output.js
examples/babel/fixtures/switches/output.js.map
examples/babel/fixtures/try-catches/output.js

View File

@ -72,7 +72,11 @@ async function assertScopes(dbg, items) {
for (const [i, val] of items.entries()) {
if (Array.isArray(val)) {
is(getScopeLabel(dbg, i + 1), val[0]);
is(getScopeValue(dbg, i + 1), val[1]);
is(
getScopeValue(dbg, i + 1),
val[1],
`"${val[0]}" has the expected "${val[1]}" value`
);
} else {
is(getScopeLabel(dbg, i + 1), val);
}
@ -140,7 +144,7 @@ add_task(async function() {
{ line: 8, column: 6 },
[
"arrow",
["argArrow", "(unavailable)"],
["argArrow", "(unmapped)"],
"Block",
"arrow()",
"fn",
@ -157,15 +161,15 @@ add_task(async function() {
// The call-based ones work, but the single-identifier ones do not.
await breakpointScopes(dbg, "imported-bindings", { line: 17, column: 2 }, [
"Module",
["aDefault", "(unavailable)"],
["aDefault", "(unmapped)"],
["aDefault2", '"a-default2"'],
["aDefault3", "(unavailable)"],
["anAliased", "(unavailable)"],
["aDefault3", "(unmapped)"],
["anAliased", "(unmapped)"],
["anAliased2", '"an-original2"'],
["anAliased3", "(unavailable)"],
["aNamed", "(unavailable)"],
["anAliased3", "(unmapped)"],
["aNamed", "(unmapped)"],
["aNamed2", '"a-named2"'],
["aNamed3", "(unavailable)"],
["aNamed3", "(unmapped)"],
["aNamespace", "{\u2026}"],
["aNamespace2", "{\u2026}"],
["aNamespace3", "{\u2026}"],

View File

@ -0,0 +1,10 @@
// Babel will optimize this for..of because it call tell the value is an array.
export default function root() {
console.log("pause here");
for (const val of [1, 2]) {
console.log("pause again", (() => val)());
}
console.log("done");
}

View File

@ -0,0 +1,100 @@
var stepOverForOfArrayClosure =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = root;
// Babel will optimize this for..of because it call tell the value is an array.
function root() {
console.log("pause here");
var _loop = function _loop(val) {
console.log("pause again", function () {
return val;
}());
};
var _arr = [1, 2];
for (var _i = 0; _i < _arr.length; _i++) {
var val = _arr[_i];
_loop(val);
}
console.log("done");
}
module.exports = exports["default"];
/***/ })
/******/ ]);
//# sourceMappingURL=output.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["webpack:///webpack/bootstrap 8007c2ba9751c074d10b","webpack:///./fixtures/step-over-for-of-array-closure/input.js"],"names":["root","console","log","val"],"mappings":";;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;;;;;;kBC5DwBA,I;AADxB;AACe,SAASA,IAAT,GAAgB;AAC7BC,UAAQC,GAAR,CAAY,YAAZ;;AAD6B,6BAGlBC,GAHkB;AAI3BF,YAAQC,GAAR,CAAY,aAAZ,EAA4B;AAAA,aAAMC,GAAN;AAAA,KAAD,EAA3B;AAJ2B;;AAAA,aAGX,CAAC,CAAD,EAAI,CAAJ,CAHW;AAG7B,2CAA0B;AAArB,QAAMA,cAAN;AAAqB,UAAfA,GAAe;AAEzB;;AAEDF,UAAQC,GAAR,CAAY,MAAZ;AACD","file":"fixtures/step-over-for-of-array-closure/output.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 8007c2ba9751c074d10b","// Babel will optimize this for..of because it call tell the value is an array.\nexport default function root() {\n console.log(\"pause here\");\n\n for (const val of [1, 2]) {\n console.log(\"pause again\", (() => val)());\n }\n\n console.log(\"done\");\n}\n\n\n\n// WEBPACK FOOTER //\n// ./fixtures/step-over-for-of-array-closure/input.js"],"sourceRoot":""}

View File

@ -0,0 +1,10 @@
// Babel will optimize this for..of because it call tell the value is an array.
export default function root() {
console.log("pause here");
for (const val of [1, 2]) {
console.log("pause again", val);
}
console.log("done");
}

View File

@ -0,0 +1,94 @@
var stepOverForOfArray =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = root;
// Babel will optimize this for..of because it call tell the value is an array.
function root() {
console.log("pause here");
var _arr = [1, 2];
for (var _i = 0; _i < _arr.length; _i++) {
var val = _arr[_i];
console.log("pause again", val);
}
console.log("done");
}
module.exports = exports["default"];
/***/ })
/******/ ]);
//# sourceMappingURL=output.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["webpack:///webpack/bootstrap 7b3f661ba4b415ad82ac","webpack:///./fixtures/step-over-for-of-array/input.js"],"names":["root","console","log","val"],"mappings":";;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;;;;;;kBC5DwBA,I;AADxB;AACe,SAASA,IAAT,GAAgB;AAC7BC,UAAQC,GAAR,CAAY,YAAZ;;AAD6B,aAGX,CAAC,CAAD,EAAI,CAAJ,CAHW;AAG7B,2CAA0B;AAArB,QAAMC,cAAN;AACHF,YAAQC,GAAR,CAAY,aAAZ,EAA2BC,GAA3B;AACD;;AAEDF,UAAQC,GAAR,CAAY,MAAZ;AACD","file":"fixtures/step-over-for-of-array/output.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 7b3f661ba4b415ad82ac","// Babel will optimize this for..of because it call tell the value is an array.\nexport default function root() {\n console.log(\"pause here\");\n\n for (const val of [1, 2]) {\n console.log(\"pause again\", val);\n }\n\n console.log(\"done\");\n}\n\n\n\n// WEBPACK FOOTER //\n// ./fixtures/step-over-for-of-array/input.js"],"sourceRoot":""}

View File

@ -0,0 +1,13 @@
// Babel will convert the loop body to a function to handle the 'val' lexical
// enclosure behavior.
const vals = [1, 2];
export default function root() {
console.log("pause here");
for (const val of vals) {
console.log("pause again", (() => val)());
}
console.log("done");
}

View File

@ -0,0 +1,122 @@
var stepOverForOfClosure =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = root;
// Babel will convert the loop body to a function to handle the 'val' lexical
// enclosure behavior.
var vals = [1, 2];
function root() {
console.log("pause here");
var _loop = function _loop(val) {
console.log("pause again", function () {
return val;
}());
};
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = vals[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var val = _step.value;
_loop(val);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
console.log("done");
}
module.exports = exports["default"];
/***/ })
/******/ ]);
//# sourceMappingURL=output.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["webpack:///webpack/bootstrap e895e81ab9bbafd478e1","webpack:///./fixtures/step-over-for-of-closure/input.js"],"names":["root","vals","console","log","val"],"mappings":";;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;;;;;;kBCzDwBA,I;AAJxB;AACA;AACA,IAAMC,OAAO,CAAC,CAAD,EAAI,CAAJ,CAAb;;AAEe,SAASD,IAAT,GAAgB;AAC7BE,UAAQC,GAAR,CAAY,YAAZ;;AAD6B,6BAGlBC,GAHkB;AAI3BF,YAAQC,GAAR,CAAY,aAAZ,EAA4B;AAAA,aAAMC,GAAN;AAAA,KAAD,EAA3B;AAJ2B;;AAAA;AAAA;AAAA;;AAAA;AAG7B,yBAAkBH,IAAlB,8HAAwB;AAAA,UAAbG,GAAa;;AAAA,YAAbA,GAAa;AAEvB;AAL4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAO7BF,UAAQC,GAAR,CAAY,MAAZ;AACD","file":"fixtures/step-over-for-of-closure/output.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap e895e81ab9bbafd478e1","// Babel will convert the loop body to a function to handle the 'val' lexical\n// enclosure behavior.\nconst vals = [1, 2];\n\nexport default function root() {\n console.log(\"pause here\");\n\n for (const val of vals) {\n console.log(\"pause again\", (() => val)());\n }\n\n console.log(\"done\");\n}\n\n\n\n// WEBPACK FOOTER //\n// ./fixtures/step-over-for-of-closure/input.js"],"sourceRoot":""}

View File

@ -0,0 +1,11 @@
const vals = [1, 2];
export default function root() {
console.log("pause here");
for (const val of vals) {
console.log("pause again", val);
}
console.log("done");
}

View File

@ -0,0 +1,114 @@
var stepOverForOf =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = root;
var vals = [1, 2];
function root() {
console.log("pause here");
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = vals[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var val = _step.value;
console.log("pause again", val);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
console.log("done");
}
module.exports = exports["default"];
/***/ })
/******/ ]);
//# sourceMappingURL=output.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["webpack:///webpack/bootstrap fa9cfb0ec21ed77afaea","webpack:///./fixtures/step-over-for-of/input.js"],"names":["root","vals","console","log","val"],"mappings":";;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;;;;;;kBC3DwBA,I;AAFxB,IAAMC,OAAO,CAAC,CAAD,EAAI,CAAJ,CAAb;;AAEe,SAASD,IAAT,GAAgB;AAC7BE,UAAQC,GAAR,CAAY,YAAZ;;AAD6B;AAAA;AAAA;;AAAA;AAG7B,yBAAkBF,IAAlB,8HAAwB;AAAA,UAAbG,GAAa;;AACtBF,cAAQC,GAAR,CAAY,aAAZ,EAA2BC,GAA3B;AACD;AAL4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAO7BF,UAAQC,GAAR,CAAY,MAAZ;AACD","file":"fixtures/step-over-for-of/output.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap fa9cfb0ec21ed77afaea","const vals = [1, 2];\n\nexport default function root() {\n console.log(\"pause here\");\n\n for (const val of vals) {\n console.log(\"pause again\", val);\n }\n\n console.log(\"done\");\n}\n\n\n\n// WEBPACK FOOTER //\n// ./fixtures/step-over-for-of/input.js"],"sourceRoot":""}

View File

@ -0,0 +1,8 @@
function test(a1, a2 = 45, { a3, a4, a5: { a6: a7 } = {} } = {}) {
console.log("pause next here");
}
export default function fn() {
console.log("pause here");
test("1", undefined, { a3: "3", a4: "4", a5: { a6: "7" } });
}

View File

@ -0,0 +1,100 @@
var stepOverFunctionParams =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = fn;
function test(a1) {
var a2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 45;
var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
a3 = _ref.a3,
a4 = _ref.a4,
_ref$a = _ref.a5;
_ref$a = _ref$a === undefined ? {} : _ref$a;
var a7 = _ref$a.a6;
console.log("pause next here");
}
function fn() {
console.log("pause here");
test("1", undefined, { a3: "3", a4: "4", a5: { a6: "7" } });
}
module.exports = exports["default"];
/***/ })
/******/ ]);
//# sourceMappingURL=output.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["webpack:///webpack/bootstrap ae78a42f9270b2bb1f11","webpack:///./fixtures/step-over-function-params/input.js"],"names":["fn","test","a1","a2","a3","a4","a5","a7","a6","console","log","undefined"],"mappings":";;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;;;;;;kBCzDwBA,E;AAJxB,SAASC,IAAT,CAAcC,EAAd,EAAiE;AAAA,MAA/CC,EAA+C,uEAA1C,EAA0C;;AAAA,iFAAJ,EAAI;AAAA,MAApCC,EAAoC,QAApCA,EAAoC;AAAA,MAAhCC,EAAgC,QAAhCA,EAAgC;AAAA,oBAA5BC,EAA4B;;AAAA,kCAAX,EAAW;AAAA,MAAlBC,EAAkB,UAAtBC,EAAsB;;AAC/DC,UAAQC,GAAR,CAAY,iBAAZ;AACD;;AAEc,SAASV,EAAT,GAAc;AAC3BS,UAAQC,GAAR,CAAY,YAAZ;AACAT,OAAK,GAAL,EAAUU,SAAV,EAAqB,EAAEP,IAAI,GAAN,EAAWC,IAAI,GAAf,EAAoBC,IAAI,EAAEE,IAAI,GAAN,EAAxB,EAArB;AACD","file":"fixtures/step-over-function-params/output.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap ae78a42f9270b2bb1f11","function test(a1, a2 = 45, { a3, a4, a5: { a6: a7 } = {} } = {}) {\n console.log(\"pause next here\");\n}\n\nexport default function fn() {\n console.log(\"pause here\");\n test(\"1\", undefined, { a3: \"3\", a4: \"4\", a5: { a6: \"7\" } });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./fixtures/step-over-function-params/input.js"],"sourceRoot":""}

View File

@ -0,0 +1,15 @@
var fn = async function fn() {
console.log("pause here");
await doAsync();
console.log("stopped here");
};
function doAsync() {
return Promise.resolve();
}
export default function root() {
fn();
}

View File

@ -0,0 +1,122 @@
var stepOverRegeneratorAwait =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = root;
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
var fn = function () {
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
console.log("pause here");
_context.next = 3;
return doAsync();
case 3:
console.log("stopped here");
case 4:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function fn() {
return _ref.apply(this, arguments);
}
return fn;
}();
function doAsync() {
return Promise.resolve();
}
function root() {
fn();
}
module.exports = exports["default"];
/***/ })
/******/ ]);
//# sourceMappingURL=output.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["webpack:///webpack/bootstrap e79f18ff625eb9f2cbed","webpack:///./fixtures/step-over-regenerator-await/input.js"],"names":["root","fn","console","log","doAsync","Promise","resolve"],"mappings":";;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;;;;;;kBCjDwBA,I;;;;AAZxB,IAAIC;AAAA,qEAAK;AAAA;AAAA;AAAA;AAAA;AACPC,oBAAQC,GAAR,CAAY,YAAZ;;AADO;AAAA,mBAGDC,SAHC;;AAAA;;AAKPF,oBAAQC,GAAR,CAAY,cAAZ;;AALO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAAL;;AAAA,WAAoBF,EAApB;AAAA;AAAA;;AAAA,SAAoBA,EAApB;AAAA,GAAJ;;AAQA,SAASG,OAAT,GAAmB;AACjB,SAAOC,QAAQC,OAAR,EAAP;AACD;;AAEc,SAASN,IAAT,GAAgB;AAC7BC;AACD","file":"fixtures/step-over-regenerator-await/output.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap e79f18ff625eb9f2cbed","var fn = async function fn() {\n console.log(\"pause here\");\n\n await doAsync();\n\n console.log(\"stopped here\");\n};\n\nfunction doAsync() {\n return Promise.resolve();\n}\n\nexport default function root() {\n fn();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./fixtures/step-over-regenerator-await/input.js"],"sourceRoot":""}

View File

@ -17,6 +17,7 @@
"webpack": "^3.7.1"
},
"dependencies": {
"babel-polyfill": "^6.26.0",
"lodash": "^4.17.5"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -38,36 +38,46 @@ fs.writeFileSync(
)
);
module.exports = tests.map(({ name, dirname, input, output }) => {
const babelEnv = name !== "webpackModulesEs6";
const babelModules = name !== "webpackModules";
return {
module.exports = [
{
context: __dirname,
entry: input,
entry: "babel-polyfill",
output: {
path: __dirname,
filename: output,
libraryTarget: "var",
library: name
},
devtool: "sourcemap",
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader",
options: {
babelrc: false,
presets: babelEnv
? [["env", { modules: babelModules ? "commonjs" : false }]]
: [],
plugins: babelEnv && babelModules ? ["add-module-exports"] : []
}
}
]
filename: "polyfill-bundle.js"
}
};
});
}
].concat(
tests.map(({ name, dirname, input, output }) => {
const babelEnv = name !== "webpackModulesEs6";
const babelModules = name !== "webpackModules";
return {
context: __dirname,
entry: input,
output: {
path: __dirname,
filename: output,
libraryTarget: "var",
library: name
},
devtool: "sourcemap",
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader",
options: {
babelrc: false,
presets: babelEnv
? [["env", { modules: babelModules ? "commonjs" : false }]]
: [],
plugins: babelEnv && babelModules ? ["add-module-exports"] : []
}
}
]
}
};
})
);

View File

@ -5,6 +5,7 @@
<html>
<head>
<meta charset="UTF-8">
<script src="babel/polyfill-bundle.js"></script>
</head>
<body>
<!-- INJECTED-START -->
@ -30,6 +31,18 @@
<button onclick="nonModules()">Run nonModules</button>
<script src="babel/fixtures/shadowed-vars/output.js"></script>
<button onclick="shadowedVars()">Run shadowedVars</button>
<script src="babel/fixtures/step-over-for-of/output.js"></script>
<button onclick="stepOverForOf()">Run stepOverForOf</button>
<script src="babel/fixtures/step-over-for-of-array/output.js"></script>
<button onclick="stepOverForOfArray()">Run stepOverForOfArray</button>
<script src="babel/fixtures/step-over-for-of-array-closure/output.js"></script>
<button onclick="stepOverForOfArrayClosure()">Run stepOverForOfArrayClosure</button>
<script src="babel/fixtures/step-over-for-of-closure/output.js"></script>
<button onclick="stepOverForOfClosure()">Run stepOverForOfClosure</button>
<script src="babel/fixtures/step-over-function-params/output.js"></script>
<button onclick="stepOverFunctionParams()">Run stepOverFunctionParams</button>
<script src="babel/fixtures/step-over-regenerator-await/output.js"></script>
<button onclick="stepOverRegeneratorAwait()">Run stepOverRegeneratorAwait</button>
<script src="babel/fixtures/switches/output.js"></script>
<button onclick="switches()">Run switches</button>
<script src="babel/fixtures/this-arguments-bindings/output.js"></script>