39 lines
661 B
JavaScript
39 lines
661 B
JavaScript
|
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) {}
|
||
|
}
|