fix(compiler): minor cleanups and fixes

Part of #3605
This commit is contained in:
Tobias Bosch 2015-09-18 10:33:23 -07:00
parent 9c9769047d
commit 0ed6fc4f6b
4 changed files with 25 additions and 8 deletions

View File

@ -41,12 +41,10 @@ export class ChangeDetectionCompiler {
} }
private _createChangeDetectorFactory(definition: ChangeDetectorDefinition): Function { private _createChangeDetectorFactory(definition: ChangeDetectorDefinition): Function {
if (IS_DART) { if (IS_DART || !this._genConfig.useJit) {
var proto = new DynamicProtoChangeDetector(definition); var proto = new DynamicProtoChangeDetector(definition);
return (dispatcher) => proto.instantiate(dispatcher); return (dispatcher) => proto.instantiate(dispatcher);
} else { } else {
// TODO(tbosch): provide a flag in _genConfig whether to allow eval or fall back to dynamic
// change detection as well!
return new ChangeDetectorJITGenerator(definition, UTIL, ABSTRACT_CHANGE_DETECTOR).generate(); return new ChangeDetectorJITGenerator(definition, UTIL, ABSTRACT_CHANGE_DETECTOR).generate();
} }
} }

View File

@ -35,6 +35,10 @@ export class TemplateCompiler {
normalizeDirectiveMetadata(directive: normalizeDirectiveMetadata(directive:
CompileDirectiveMetadata): Promise<CompileDirectiveMetadata> { CompileDirectiveMetadata): Promise<CompileDirectiveMetadata> {
if (!directive.isComponent) {
// For non components there is nothing to be normalized yet.
return PromiseWrapper.resolve(directive);
}
var normalizedTemplatePromise; var normalizedTemplatePromise;
if (directive.isComponent) { if (directive.isComponent) {
normalizedTemplatePromise = normalizedTemplatePromise =

View File

@ -15,6 +15,10 @@ import {
*/ */
@CONST() @CONST()
export class CompiledTemplate { export class CompiledTemplate {
static getChangeDetectorFromData(data: any[]): Function { return data[0]; }
static getCommandsFromData(data: any[]): TemplateCmd[] { return data[1]; }
static getSylesFromData(data: any[]): string[] { return data[2]; }
// Note: paramGetter is a function so that we can have cycles between templates! // Note: paramGetter is a function so that we can have cycles between templates!
// paramGetter returns a tuple with: // paramGetter returns a tuple with:
// - ChangeDetector factory function // - ChangeDetector factory function
@ -91,13 +95,11 @@ export function endElement(): TemplateCmd {
export class BeginComponentCmd implements TemplateCmd, IBeginElementCmd, RenderBeginComponentCmd { export class BeginComponentCmd implements TemplateCmd, IBeginElementCmd, RenderBeginComponentCmd {
isBound: boolean = true; isBound: boolean = true;
templateId: number; templateId: number;
component: Type;
constructor(public name: string, public attrNameAndValues: string[], constructor(public name: string, public attrNameAndValues: string[],
public eventTargetAndNames: string[], public eventTargetAndNames: string[],
public variableNameAndValues: Array<string | number>, public directives: Type[], public variableNameAndValues: Array<string | number>, public directives: Type[],
public nativeShadow: boolean, public ngContentIndex: number, public nativeShadow: boolean, public ngContentIndex: number,
public template: CompiledTemplate) { public template: CompiledTemplate) {
this.component = directives[0];
this.templateId = template.id; this.templateId = template.id;
} }
visit(visitor: RenderCommandVisitor, context: any): any { visit(visitor: RenderCommandVisitor, context: any): any {

View File

@ -212,6 +212,15 @@ export function main() {
}); });
describe('normalizeDirectiveMetadata', () => { describe('normalizeDirectiveMetadata', () => {
it('should return the given DirectiveMetadata for non components',
inject([AsyncTestCompleter], (async) => {
var meta = runtimeMetadataResolver.getMetadata(NonComponent);
compiler.normalizeDirectiveMetadata(meta).then(normMeta => {
expect(normMeta).toBe(meta);
async.done();
});
}));
it('should normalize the template', it('should normalize the template',
inject([AsyncTestCompleter, XHR], (async, xhr: MockXHR) => { inject([AsyncTestCompleter, XHR], (async, xhr: MockXHR) => {
xhr.expect('angular2/test/compiler/compUrl.html', 'loadedTemplate'); xhr.expect('angular2/test/compiler/compUrl.html', 'loadedTemplate');
@ -323,10 +332,14 @@ export function humanizeTemplate(template: CompiledTemplate,
} }
var commands = []; var commands = [];
var templateData = template.dataGetter(); var templateData = template.dataGetter();
result = result = {
{'styles': templateData[2], 'commands': commands, 'cd': testChangeDetector(templateData[0])}; 'styles': CompiledTemplate.getSylesFromData(templateData),
'commands': commands,
'cd': testChangeDetector(CompiledTemplate.getChangeDetectorFromData(templateData))
};
humanizedTemplates.set(template.id, result); humanizedTemplates.set(template.id, result);
visitAllCommands(new CommandHumanizer(commands, humanizedTemplates), templateData[1]); visitAllCommands(new CommandHumanizer(commands, humanizedTemplates),
CompiledTemplate.getCommandsFromData(templateData));
return result; return result;
} }