Skip to content

Commit

Permalink
fix lazy-chain-tags, ember-data green!
Browse files Browse the repository at this point in the history
  • Loading branch information
Chris Garrett committed Apr 19, 2019
1 parent bd39c46 commit 97b5d28
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 19 deletions.
13 changes: 8 additions & 5 deletions packages/@ember/-internals/metal/lib/chain-tags.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { meta as metaFor, peekMeta } from '@ember/-internals/meta';
import { combine, CONSTANT_TAG, Tag, UpdatableTag } from '@glimmer/reference';
import { getLastRevisionFor, peekCacheFor } from './computed_cache';
import { descriptorForProperty } from './descriptor_map';
import { tagForProperty, update } from './tags';
import { tagForProperty } from './tags';

export function finishLazyChains(obj: any, key: string, value: any) {
let meta = peekMeta(obj);
Expand All @@ -20,7 +20,7 @@ export function finishLazyChains(obj: any, key: string, value: any) {
while (lazyTags.length > 0) {
let [path, tag] = lazyTags.pop()!;

update(tag, getChainTagsForKey(value, path));
tag.inner.update(getChainTagsForKey(value, path));
}
}

Expand Down Expand Up @@ -82,10 +82,13 @@ export function getChainTagsForKey(obj: any, key: string) {
current = peekCacheFor(current).get(segment);
}
} else if (segments.length > 0) {
let chainTag = UpdatableTag.create(CONSTANT_TAG);
let placeholderTag = UpdatableTag.create(CONSTANT_TAG);

metaFor(current)
.writableLazyChainsFor(key)
.push([segments.join('.'), chainTag]);
.writableLazyChainsFor(segment)
.push([segments.join('.'), placeholderTag]);

chainTags.push(placeholderTag);

break;
}
Expand Down
11 changes: 4 additions & 7 deletions packages/@ember/-internals/metal/lib/computed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ import {
} from '@ember/canary-features';
import { assert, deprecate, warn } from '@ember/debug';
import EmberError from '@ember/error';
import { combine, Tag } from '@glimmer/reference';
import { finishLazyChains, getChainTagsForKeys } from './chain-tags';
import {
getCachedValueFor,
getCacheFor,
getLastRevisionFor,
peekCacheFor,
setLastRevisionFor,
getLastRevisionFor,
} from './computed_cache';
import {
addDependentKeys,
Expand All @@ -27,10 +29,8 @@ import expandProperties from './expand_properties';
import { defineProperty } from './properties';
import { notifyPropertyChange } from './property_events';
import { set } from './property_set';
import { tagForProperty, update } from './tags';
import { getCurrentTracker, setCurrentTracker } from './tracked';
import { Tag, combine } from '@glimmer/reference';
import { tagForProperty, tagFor, update } from './tags';
import { finishLazyChains, getChainTagsForKeys } from './chain-tags';

export type ComputedPropertyGetter = (keyName: string) => any;
export type ComputedPropertySetter = (keyName: string, value: any, cachedValue?: any) => any;
Expand Down Expand Up @@ -550,9 +550,6 @@ export class ComputedProperty extends ComputedDescriptor {
if (EMBER_METAL_TRACKED_PROPERTIES) {
let tracker = getCurrentTracker();

if (this._auto === true) {
}

finishLazyChains(obj, keyName, ret);

let upstreamTags: Tag[] = [];
Expand Down
14 changes: 8 additions & 6 deletions packages/@ember/-internals/metal/lib/observer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ export function removeObserver(
removeListener(obj, eventName, target, method);
}

function getOrCreateActiveObserversFor(target) {
function getOrCreateActiveObserversFor(target: object) {
if (!ACTIVE_OBSERVERS.has(target)) {
ACTIVE_OBSERVERS.set(target, new Map());
}
Expand All @@ -104,14 +104,16 @@ export function activateObserver(target: object, eventName: string) {
}

export function deactivateObserver(target: object, eventName: string) {
let activeObservers = getOrCreateActiveObserversFor(target);
let activeObservers = ACTIVE_OBSERVERS.get(target);

let observer = activeObservers.get(eventName)!;
if (activeObservers !== undefined) {
let observer = activeObservers.get(eventName)!;

observer.count--;
observer.count--;

if (observer.count === 0) {
activeObservers.delete(eventName);
if (observer.count === 0) {
activeObservers.delete(eventName);
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion packages/@ember/-internals/metal/lib/property_events.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { Meta, peekMeta } from '@ember/-internals/meta';
import { symbol } from '@ember/-internals/utils';
import { EMBER_METAL_TRACKED_PROPERTIES } from '@ember/canary-features';
import { DEBUG } from '@glimmer/env';
import changeEvent from './change_event';
import { descriptorForProperty } from './descriptor_map';
import { sendEvent } from './events';
import ObserverSet from './observer_set';
import { markObjectAsDirty } from './tags';
import { assertNotRendered } from './transaction';
import { EMBER_METAL_TRACKED_PROPERTIES } from '@ember/canary-features';

/**
@module ember
Expand Down

0 comments on commit 97b5d28

Please sign in to comment.