30 lines
851 B
JavaScript
30 lines
851 B
JavaScript
export default class ParseNode {
|
|
toString(){
|
|
throw new Meteor.Error('toString not implemented on ' + this.constructor.name);
|
|
}
|
|
compile(scope, context){
|
|
// Returns a ParseNode, a ConstantNode if possible
|
|
if(this.resolve) {
|
|
return this.resolve('compile', scope, context);
|
|
} else {
|
|
throw new Meteor.Error('Compile not implemented on ' + this.constructor.name);
|
|
}
|
|
}
|
|
// Compile, but turn rolls into arrays
|
|
roll(scope, context){
|
|
if (this.resolve){
|
|
return this.resolve('roll', scope, context);
|
|
} else {
|
|
return this.compile(scope, context);
|
|
}
|
|
}
|
|
// Compile, turn rolls into arrays, and reduce those arrays into single values
|
|
reduce(scope, context){
|
|
if (this.resolve){
|
|
return this.resolve('reduce', scope, context);
|
|
} else {
|
|
return this.roll(scope, context);
|
|
}
|
|
}
|
|
}
|