Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🏗 Refactor transform-log-asserts #24028

Merged
merged 1 commit into from
Aug 19, 2019

Conversation

jridgewell
Copy link
Contributor

@jridgewell jridgewell commented Aug 17, 2019

The only big change here is now we'll try to statically analyze assertions.

  • If we're asserting a type and we know that the argument is not of that type, we rewrite to a throw expression
  • Else if we're asserting truthiness and the argument is falsey, we rewrite to a throw expression

This is to better support stubbed out methods, eg, layers:

class Resources {
  layersStuff() {
    devAssert(this.layersEnabled_);
    // lots of code that can be DCE'd when layers is statically disabled
  }
}

Fixes #23960.

The only big change here is now we'll try to statically analyze assertions.

- If we're asserting a type and we know that the argument is not of that type, we rewrite to a throw expression
- Else if we're assertiong truthiness and the argument is falsey, we rewrite to a throw expression

This is to better support stubbed out methods, eg, layers:

```js
class Resources {
  layersStuff() {
    devAssert(this.layersEnabled_);
    // lots of code that can be DCE'd when layers is statically disabled
  }
}
```
Copy link
Contributor

@rsimha rsimha left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tested this PR locally after removing AmpPass.java, and am still seeing the number of instances of assert in v0.js increase from 20 to 80. Happy to chat offline to make sure we're on the same page.

@jridgewell
Copy link
Contributor Author

That's due to

if (isSinglePass) {
applied.push(localPlugin('transform-amp-asserts'));
}
.

Copy link
Contributor

@rsimha rsimha left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right. Removing if (isSinglePass) and deleting AmpPass.java brings down the number of asserts from 80 to 30. (You said the additional 10 are intentional.)

This PR LGTM based on the testing I did . Will allow @erwinmombay and @choumx review the transform code.

@jridgewell jridgewell closed this Aug 19, 2019
@jridgewell jridgewell reopened this Aug 19, 2019
@rsimha rsimha merged commit 45f40c8 into ampproject:master Aug 19, 2019
@jridgewell jridgewell deleted the refactor-log-assertions branch August 19, 2019 22:52
westonruter added a commit to westonruter/amphtml that referenced this pull request Aug 20, 2019
* 'master' of github.com:ampproject/amphtml: (32 commits)
  ✨ Make tweet id a bindable attribute (ampproject#23953)
  🏗 Update Local AMP extension to allow custom base URLs (ampproject#24029)
  🏗 Improve serving from non-localhost host (ampproject#24066)
  Preventing half pixels. (ampproject#24050)
  Update callout-vendors.js (ampproject#23218)
  🏗 Fixes to `check-package-manager.js` (ampproject#24060)
  Rename AMP_MODE to __AMP_MODE. (ampproject#24052)
  Story media performance metrics. (ampproject#23962)
  Updating Story amp-sidebar width documentation. (ampproject#23894)
  Fixes race condition in amp-video-iframe (ampproject#24033)
  Rename ampExtendedElements to __AMP_EXTENDED_ELEMENTS (ampproject#24056)
  🏗🚮 Enable property inlining (ampproject#24053)
  ✨amp-ads: Added optional params for Directadvert network (ampproject#23724)
  <amp-experiment> style mutation fix and improvment (ampproject#23669)
  🐛 Allow http protocol for noscript > img fallbacks for parity with amp-img (ampproject#21686)
  🏗 Refactor transform-log-asserts (ampproject#24028)
  Automatically preconnect to source origins on page loads. (ampproject#24045)
  Support visibility API in the ampdoc (ampproject#23799)
  Amphtml visual tests should use relative path against root (ampproject#24042)
  FIX: check all fields' dirtiness on AMP form init (ampproject#23978)
  ...
thekorn pushed a commit to edelight/amphtml that referenced this pull request Sep 11, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Not all assert calls are being removed from v0.js by babel transforms
3 participants