angular/packages
JoostK b249e24979 fix(compiler): generate correct code for safe method calls (#44088)
When a safe method call such as `person?.getName()` is used, the
compiler would generate invalid code if the argument list also contained
a safe method call. For example, the following code:

```
person?.getName(config?.get('title').enabled)
```

would generate

```
let tmp;
ctx.person == null ? null : ctx.person.getName((tmp = tmp) == null ?
null : tmp.enabled)
```

Notice how the call to `config.get('title')` has completely disappeared,
with `(tmp = tmp)` having taken its place.

The issue occurred due to how the argument list would be converted
from expression AST to output AST twice. First, the outer safe method
call would first convert its arguments list. This resulted in a
temporary being allocated for `config.get('title')`, which was stored in
the internal `_resultMap`. Only after the argument list has been
converted would the outer safe method call realize that it should be
guarded by a safe access of `person`, entering the `convertSafeAccess`
procedure to convert itself. This would convert the argument list once
again, but this time the `_resultMap` would already contain the
temporary `tmp` for `config?.get('title')`. Consequently, the safe
method in the argument list would be emitted as `tmp`.

This commit fixes the issue by ensuring that nodes are only converted
once.

Closes #44069

PR Close #44088
2021-11-08 17:31:36 +00:00
..
animations docs(animations): update developers on state of package (#44014) 2021-11-08 17:03:28 +00:00
bazel refactor(bazel): fix typo in packager action file comments (#44061) 2021-11-05 16:22:17 +00:00
benchpress build: update angular (#44024) 2021-11-03 15:06:36 -07:00
common feat(http): add has() method to HttpContext class (#43887) 2021-11-04 18:52:18 +00:00
compiler fix(compiler): generate correct code for safe method calls (#44088) 2021-11-08 17:31:36 +00:00
compiler-cli fix(compiler): generate correct code for safe method calls (#44088) 2021-11-08 17:31:36 +00:00
core fix(compiler): generate correct code for safe method calls (#44088) 2021-11-08 17:31:36 +00:00
docs docs: remove/update broken links in resources appearing on aio (#42232) 2021-05-26 14:21:12 -07:00
elements fix(elements): remove incorrect @angular/platform-browser peer dependency (#43975) 2021-10-29 15:43:55 -07:00
examples docs(core): apply minor improvements to the InjectionToken's api docs (#43693) 2021-10-13 16:46:26 +00:00
forms docs(forms): fix typo in toInteger() function (#44075) 2021-11-08 16:59:08 +00:00
language-service build: remove "ivy-only" bazel tag (#43862) 2021-10-19 10:06:55 -07:00
localize refactor(localize): ensure schematic code runs as commonjs (#44016) 2021-11-04 18:54:54 +00:00
misc/angular-in-memory-web-api build: update angular (#44024) 2021-11-03 15:06:36 -07:00
platform-browser test(platform-browser): complete component bootstrap before switching to the next test (#43933) 2021-10-25 17:58:25 +00:00
platform-browser-dynamic feat(core): update node version support range to support v16 (#43740) 2021-10-06 10:55:44 -07:00
platform-server build: remove "ivy-only" bazel tag (#43862) 2021-10-19 10:06:55 -07:00
private/testing docs: convert the last my-app components to app-root (#42256) 2021-05-25 22:13:36 +00:00
router Revert "refactor(router): restore history in a consistent way on canceled navigations (#43651)" (#44006) 2021-11-01 09:25:36 -07:00
service-worker refactor(service-worker): avoid unnecessary writes to cache when version fails (#43680) 2021-10-21 14:20:50 +00:00
upgrade feat(upgrade): support NgModule class as an argument of the downgradeModule function (#43973) 2021-11-04 18:54:00 +00:00
zone.js build: lock file maintenance (#44003) 2021-11-05 20:05:41 +00:00
BUILD.bazel build: Auto-gen tsec tsconfig files (#43440) 2021-09-17 17:17:34 +00:00
circular-deps-test.conf.js fix(platform-webworker): remove platform-webworker and platform-webworker-dynamic (#38846) 2020-09-30 09:13:59 -04:00
empty.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
goog.d.ts refactor(core): replace references to goog.LOCALE with goog.getLocale() (#43089) 2021-08-10 10:35:26 -07:00
license-banner.txt docs: update year (#40925) 2021-02-22 12:37:40 -08:00
README.md docs: add doc reference to npm package readme (#33911) 2019-11-20 14:46:23 -08:00
system.d.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
tsconfig-build.json build: enable esModuleInterop in TypeScript compilations (#43431) 2021-10-01 18:28:45 +00:00
tsconfig-legacy-saucelabs.json build: update tsconfigs to use ES2020 as target and module (#43431) 2021-10-01 18:28:42 +00:00
tsconfig-test.json refactor: fix typescript strict flag failures in all tests (#30993) 2019-07-18 14:21:26 -07:00
tsconfig-tsec-base.json build: update tsconfigs to use ES2020 as target and module (#43431) 2021-10-01 18:28:42 +00:00
tsconfig.json build: enable esModuleInterop in TypeScript compilations (#43431) 2021-10-01 18:28:45 +00:00
tsec-exemption.json build: Enable tsec checks for critical packages. (#43108) 2021-09-13 14:45:57 -07:00
types.d.ts build: replace @types/trusted-types dep with minimal type defs (#39211) 2020-10-15 09:08:00 -07:00

Angular

The sources for this package are in the main Angular repo. Please file issues and pull requests against that repo.

Usage information and reference details can be found in Angular documentation.

License: MIT