Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 43 additions & 39 deletions modules/angular2/src/change_detection/parser/ast.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,23 @@ export class AST {

assign(context, locals, value) { throw new BaseException("Not supported"); }

visit(visitor): any { return null; }
visit(visitor: AstVisitor): any { return null; }

toString(): string { return "AST"; }
}

export class EmptyExpr extends AST {
eval(context, locals) { return null; }

visit(visitor) {
visit(visitor: AstVisitor) {
// do nothing
}
}

export class ImplicitReceiver extends AST {
eval(context, locals) { return context; }

visit(visitor) { return visitor.visitImplicitReceiver(this); }
visit(visitor: AstVisitor) { return visitor.visitImplicitReceiver(this); }
}

/**
Expand All @@ -42,7 +42,7 @@ export class Chain extends AST {
return result;
}

visit(visitor) { return visitor.visitChain(this); }
visit(visitor: AstVisitor) { return visitor.visitChain(this); }
}

export class Conditional extends AST {
Expand All @@ -56,7 +56,7 @@ export class Conditional extends AST {
}
}

visit(visitor) { return visitor.visitConditional(this); }
visit(visitor: AstVisitor) { return visitor.visitConditional(this); }
}

export class AccessMember extends AST {
Expand Down Expand Up @@ -88,7 +88,7 @@ export class AccessMember extends AST {
}
}

visit(visitor) { return visitor.visitAccessMember(this); }
visit(visitor: AstVisitor) { return visitor.visitAccessMember(this); }
}

export class SafeAccessMember extends AST {
Expand All @@ -102,7 +102,7 @@ export class SafeAccessMember extends AST {
return isBlank(evaluatedReceiver) ? null : this.getter(evaluatedReceiver);
}

visit(visitor) { return visitor.visitSafeAccessMember(this); }
visit(visitor: AstVisitor) { return visitor.visitSafeAccessMember(this); }
}

export class KeyedAccess extends AST {
Expand All @@ -123,7 +123,7 @@ export class KeyedAccess extends AST {
return value;
}

visit(visitor) { return visitor.visitKeyedAccess(this); }
visit(visitor: AstVisitor) { return visitor.visitKeyedAccess(this); }
}

export class Pipe extends AST {
Expand All @@ -132,15 +132,15 @@ export class Pipe extends AST {
super();
}

visit(visitor) { return visitor.visitPipe(this); }
visit(visitor: AstVisitor) { return visitor.visitPipe(this); }
}

export class LiteralPrimitive extends AST {
constructor(public value) { super(); }

eval(context, locals) { return this.value; }

visit(visitor) { return visitor.visitLiteralPrimitive(this); }
visit(visitor: AstVisitor) { return visitor.visitLiteralPrimitive(this); }
}

export class LiteralArray extends AST {
Expand All @@ -150,7 +150,7 @@ export class LiteralArray extends AST {
return ListWrapper.map(this.expressions, (e) => e.eval(context, locals));
}

visit(visitor) { return visitor.visitLiteralArray(this); }
visit(visitor: AstVisitor) { return visitor.visitLiteralArray(this); }
}

export class LiteralMap extends AST {
Expand All @@ -164,15 +164,15 @@ export class LiteralMap extends AST {
return res;
}

visit(visitor) { return visitor.visitLiteralMap(this); }
visit(visitor: AstVisitor) { return visitor.visitLiteralMap(this); }
}

export class Interpolation extends AST {
constructor(public strings: List<any>, public expressions: List<any>) { super(); }

eval(context, locals) { throw new BaseException("evaluating an Interpolation is not supported"); }

visit(visitor) { visitor.visitInterpolation(this); }
visit(visitor: AstVisitor) { visitor.visitInterpolation(this); }
}

export class Binary extends AST {
Expand Down Expand Up @@ -223,15 +223,15 @@ export class Binary extends AST {
throw 'Internal error [$operation] not handled';
}

visit(visitor) { return visitor.visitBinary(this); }
visit(visitor: AstVisitor) { return visitor.visitBinary(this); }
}

export class PrefixNot extends AST {
constructor(public expression: AST) { super(); }

eval(context, locals) { return !this.expression.eval(context, locals); }

visit(visitor) { return visitor.visitPrefixNot(this); }
visit(visitor: AstVisitor) { return visitor.visitPrefixNot(this); }
}

export class Assignment extends AST {
Expand All @@ -241,7 +241,7 @@ export class Assignment extends AST {
return this.target.assign(context, locals, this.value.eval(context, locals));
}

visit(visitor) { return visitor.visitAssignment(this); }
visit(visitor: AstVisitor) { return visitor.visitAssignment(this); }
}

export class MethodCall extends AST {
Expand All @@ -262,7 +262,7 @@ export class MethodCall extends AST {
}
}

visit(visitor) { return visitor.visitMethodCall(this); }
visit(visitor: AstVisitor) { return visitor.visitMethodCall(this); }
}

export class SafeMethodCall extends AST {
Expand All @@ -278,7 +278,7 @@ export class SafeMethodCall extends AST {
return this.fn(evaluatedReceiver, evaluatedArgs);
}

visit(visitor) { return visitor.visitSafeMethodCall(this); }
visit(visitor: AstVisitor) { return visitor.visitSafeMethodCall(this); }
}

export class FunctionCall extends AST {
Expand All @@ -292,7 +292,7 @@ export class FunctionCall extends AST {
return FunctionWrapper.apply(obj, evalList(context, locals, this.args));
}

visit(visitor) { return visitor.visitFunctionCall(this); }
visit(visitor: AstVisitor) { return visitor.visitFunctionCall(this); }
}

export class ASTWithSource extends AST {
Expand All @@ -304,7 +304,7 @@ export class ASTWithSource extends AST {

assign(context, locals, value) { return this.ast.assign(context, locals, value); }

visit(visitor) { return this.ast.visit(visitor); }
visit(visitor: AstVisitor) { return this.ast.visit(visitor); }

toString(): string { return `${this.source} in ${this.location}`; }
}
Expand All @@ -314,27 +314,27 @@ export class TemplateBinding {
public expression: ASTWithSource) {}
}

// INTERFACE
export class AstVisitor {
visitAccessMember(ast: AccessMember) {}
visitAssignment(ast: Assignment) {}
visitBinary(ast: Binary) {}
visitChain(ast: Chain) {}
visitConditional(ast: Conditional) {}
visitPipe(ast: Pipe) {}
visitFunctionCall(ast: FunctionCall) {}
visitImplicitReceiver(ast: ImplicitReceiver) {}
visitKeyedAccess(ast: KeyedAccess) {}
visitLiteralArray(ast: LiteralArray) {}
visitLiteralMap(ast: LiteralMap) {}
visitLiteralPrimitive(ast: LiteralPrimitive) {}
visitMethodCall(ast: MethodCall) {}
visitPrefixNot(ast: PrefixNot) {}
visitSafeAccessMember(ast: SafeAccessMember) {}
visitSafeMethodCall(ast: SafeMethodCall) {}
export interface AstVisitor {
visitAccessMember(ast: AccessMember): any;
visitAssignment(ast: Assignment): any;
visitBinary(ast: Binary): any;
visitChain(ast: Chain): any;
visitConditional(ast: Conditional): any;
visitPipe(ast: Pipe): any;
visitFunctionCall(ast: FunctionCall): any;
visitImplicitReceiver(ast: ImplicitReceiver): any;
visitInterpolation(ast: Interpolation): any;
visitKeyedAccess(ast: KeyedAccess): any;
visitLiteralArray(ast: LiteralArray): any;
visitLiteralMap(ast: LiteralMap): any;
visitLiteralPrimitive(ast: LiteralPrimitive): any;
visitMethodCall(ast: MethodCall): any;
visitPrefixNot(ast: PrefixNot): any;
visitSafeAccessMember(ast: SafeAccessMember): any;
visitSafeMethodCall(ast: SafeMethodCall): any;
}

export class AstTransformer {
export class AstTransformer implements AstVisitor {
visitImplicitReceiver(ast: ImplicitReceiver) { return ast; }

visitInterpolation(ast: Interpolation) {
Expand Down Expand Up @@ -393,6 +393,10 @@ export class AstTransformer {
}
return res;
}

visitChain(ast: Chain) { throw new BaseException('Not implemented'); }

visitAssignment(ast: Assignment) { throw new BaseException('Not implemented'); }
}

var _evalListCache = [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,6 @@ class ProtoRecordBuilder {

_appendRecords(b: BindingRecord, variableNames: List<string>) {
if (b.isDirectiveLifecycle()) {
;
ListWrapper.push(
this.records,
new ProtoRecord(RECORD_TYPE_DIRECTIVE_LIFECYCLE, b.lifecycleEvent, null, [], [], -1, null,
Expand All @@ -133,7 +132,7 @@ class ProtoRecordBuilder {
}
}

class _ConvertAstIntoProtoRecords {
class _ConvertAstIntoProtoRecords implements AstVisitor {
constructor(private _records: List<ProtoRecord>, private _bindingRecord: BindingRecord,
private _expressionAsString: string, private _variableNames: List<any>) {}

Expand Down Expand Up @@ -240,6 +239,10 @@ class _ConvertAstIntoProtoRecords {
[key], null, obj);
}

visitAssignment(ast: Assignment) { throw new BaseException('Not supported'); }

visitChain(ast: Chain) { throw new BaseException('Not supported'); }

_visitAll(asts: List<any>) {
var res = ListWrapper.createFixedSize(asts.length);
for (var i = 0; i < asts.length; ++i) {
Expand Down
2 changes: 2 additions & 0 deletions modules/angular2/src/facade/lang.dart
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ class StringWrapper {
static bool contains(String s, String substr) {
return s.contains(substr);
}

static bool isString(s) => s is String;
}

class StringJoiner {
Expand Down
2 changes: 2 additions & 0 deletions modules/angular2/src/facade/lang.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,8 @@ export class StringWrapper {
}

static contains(s: string, substr: string): boolean { return s.indexOf(substr) != -1; }

static isString(s: any): boolean { return typeof s === 'string' || s instanceof String; }
}

export class StringJoiner {
Expand Down
Loading