fix(compiler): support empty array and map literals.
This was broken after 152a117d5c27e56d1b32d69df2f69d34b94c0760 Fixes #8336
This commit is contained in:
parent
5ff31f0713
commit
11955f9b13
@ -7,6 +7,8 @@ import {
|
|||||||
interpolate,
|
interpolate,
|
||||||
checkBinding,
|
checkBinding,
|
||||||
castByValue,
|
castByValue,
|
||||||
|
EMPTY_ARRAY,
|
||||||
|
EMPTY_MAP,
|
||||||
pureProxy1,
|
pureProxy1,
|
||||||
pureProxy2,
|
pureProxy2,
|
||||||
pureProxy3,
|
pureProxy3,
|
||||||
@ -72,6 +74,8 @@ var impDevModeEqual = devModeEqual;
|
|||||||
var impInterpolate = interpolate;
|
var impInterpolate = interpolate;
|
||||||
var impCheckBinding = checkBinding;
|
var impCheckBinding = checkBinding;
|
||||||
var impCastByValue = castByValue;
|
var impCastByValue = castByValue;
|
||||||
|
var impEMPTY_ARRAY = EMPTY_ARRAY;
|
||||||
|
var impEMPTY_MAP = EMPTY_MAP;
|
||||||
|
|
||||||
export class Identifiers {
|
export class Identifiers {
|
||||||
static ViewUtils = new CompileIdentifierMetadata({
|
static ViewUtils = new CompileIdentifierMetadata({
|
||||||
@ -179,6 +183,11 @@ export class Identifiers {
|
|||||||
{name: 'interpolate', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: impInterpolate});
|
{name: 'interpolate', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: impInterpolate});
|
||||||
static castByValue = new CompileIdentifierMetadata(
|
static castByValue = new CompileIdentifierMetadata(
|
||||||
{name: 'castByValue', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: impCastByValue});
|
{name: 'castByValue', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: impCastByValue});
|
||||||
|
static EMPTY_ARRAY = new CompileIdentifierMetadata(
|
||||||
|
{name: 'EMPTY_ARRAY', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: impEMPTY_ARRAY});
|
||||||
|
static EMPTY_MAP = new CompileIdentifierMetadata(
|
||||||
|
{name: 'EMPTY_MAP', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: impEMPTY_MAP});
|
||||||
|
|
||||||
static pureProxies = [
|
static pureProxies = [
|
||||||
null,
|
null,
|
||||||
new CompileIdentifierMetadata(
|
new CompileIdentifierMetadata(
|
||||||
|
@ -24,6 +24,7 @@ import {
|
|||||||
} from './util';
|
} from './util';
|
||||||
import {CompilerConfig} from '../config';
|
import {CompilerConfig} from '../config';
|
||||||
import {CompileBinding} from './compile_binding';
|
import {CompileBinding} from './compile_binding';
|
||||||
|
import {Identifiers} from '../identifiers';
|
||||||
|
|
||||||
export class CompileView implements NameResolver {
|
export class CompileView implements NameResolver {
|
||||||
public viewType: ViewType;
|
public viewType: ViewType;
|
||||||
@ -155,6 +156,9 @@ export class CompileView implements NameResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
createLiteralArray(values: o.Expression[]): o.Expression {
|
createLiteralArray(values: o.Expression[]): o.Expression {
|
||||||
|
if (values.length === 0) {
|
||||||
|
return o.importExpr(Identifiers.EMPTY_ARRAY);
|
||||||
|
}
|
||||||
var proxyExpr = o.THIS_EXPR.prop(`_arr_${this.literalArrayCount++}`);
|
var proxyExpr = o.THIS_EXPR.prop(`_arr_${this.literalArrayCount++}`);
|
||||||
var proxyParams: o.FnParam[] = [];
|
var proxyParams: o.FnParam[] = [];
|
||||||
var proxyReturnEntries: o.Expression[] = [];
|
var proxyReturnEntries: o.Expression[] = [];
|
||||||
@ -169,6 +173,9 @@ export class CompileView implements NameResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
createLiteralMap(entries: Array<Array<string | o.Expression>>): o.Expression {
|
createLiteralMap(entries: Array<Array<string | o.Expression>>): o.Expression {
|
||||||
|
if (entries.length === 0) {
|
||||||
|
return o.importExpr(Identifiers.EMPTY_MAP);
|
||||||
|
}
|
||||||
var proxyExpr = o.THIS_EXPR.prop(`_map_${this.literalMapCount++}`);
|
var proxyExpr = o.THIS_EXPR.prop(`_map_${this.literalMapCount++}`);
|
||||||
var proxyParams: o.FnParam[] = [];
|
var proxyParams: o.FnParam[] = [];
|
||||||
var proxyReturnEntries: Array<Array<string | o.Expression>> = [];
|
var proxyReturnEntries: Array<Array<string | o.Expression>> = [];
|
||||||
|
@ -156,6 +156,9 @@ export function castByValue<T>(input: any, value: T): T {
|
|||||||
return <T>input;
|
return <T>input;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const EMPTY_ARRAY = CONST_EXPR([]);
|
||||||
|
export const EMPTY_MAP = CONST_EXPR({});
|
||||||
|
|
||||||
export function pureProxy1<P0, R>(fn: (p0: P0) => R): (p0: P0) => R {
|
export function pureProxy1<P0, R>(fn: (p0: P0) => R): (p0: P0) => R {
|
||||||
var result: R;
|
var result: R;
|
||||||
var v0;
|
var v0;
|
||||||
|
@ -371,6 +371,12 @@ export function main() {
|
|||||||
expect(renderLog.loggedValues).toEqual([[1, 2]]);
|
expect(renderLog.loggedValues).toEqual([[1, 2]]);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
it('should support empty literal array', fakeAsync(() => {
|
||||||
|
var ctx = _bindSimpleValue('[]');
|
||||||
|
ctx.detectChanges(false);
|
||||||
|
expect(renderLog.loggedValues).toEqual([[]]);
|
||||||
|
}));
|
||||||
|
|
||||||
it('should support literal array made of expressions', fakeAsync(() => {
|
it('should support literal array made of expressions', fakeAsync(() => {
|
||||||
var ctx = _bindSimpleValue('[1, a]', TestData);
|
var ctx = _bindSimpleValue('[1, a]', TestData);
|
||||||
ctx.componentInstance.a = 2;
|
ctx.componentInstance.a = 2;
|
||||||
@ -395,6 +401,12 @@ export function main() {
|
|||||||
expect(renderLog.loggedValues[0]['z']).toEqual(1);
|
expect(renderLog.loggedValues[0]['z']).toEqual(1);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
it('should support empty literal map', fakeAsync(() => {
|
||||||
|
var ctx = _bindSimpleValue('{}');
|
||||||
|
ctx.detectChanges(false);
|
||||||
|
expect(renderLog.loggedValues).toEqual([{}]);
|
||||||
|
}));
|
||||||
|
|
||||||
it('should support literal maps made of expressions', fakeAsync(() => {
|
it('should support literal maps made of expressions', fakeAsync(() => {
|
||||||
var ctx = _bindSimpleValue('{z: a}');
|
var ctx = _bindSimpleValue('{z: a}');
|
||||||
ctx.componentInstance.a = 1;
|
ctx.componentInstance.a = 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user