39 lines
661 B
JavaScript
Raw Normal View History

export class AST {
eval(context) {
}
visit(visitor) {
}
}
export class ImplicitReceiver extends AST {
eval(context) {
return context;
}
visit(visitor) {
visitor.visitImplicitReceiver(this);
}
}
export class FieldRead extends AST {
constructor(receiver:AST, name:string, getter:Function) {
this.receiver = receiver;
this.name = name;
this.getter = getter;
}
eval(context) {
return this.getter(this.receiver.eval(context));
}
visit(visitor) {
visitor.visitFieldRead(this);
}
}
//INTERFACE
export class AstVisitor {
visitImplicitReceiver(ast:ImplicitReceiver) {}
visitFieldRead(ast:FieldRead) {}
}