summaryrefslogtreecommitdiff
path: root/src/www/syntax-editor/ast.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/www/syntax-editor/ast.js')
-rw-r--r--src/www/syntax-editor/ast.js25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/www/syntax-editor/ast.js b/src/www/syntax-editor/ast.js
index b73448f93..178bc920a 100644
--- a/src/www/syntax-editor/ast.js
+++ b/src/www/syntax-editor/ast.js
@@ -120,6 +120,29 @@ function AST(fun, cat) {
x.children.push(node);
}
+ // Determine if current node is writable (empty/no children)
+ this.is_writable=function() {
+ var current = this.getCurrent();
+ var blank = current.fun == null || current.children.length == 0;
+ return blank;
+ }
+
+ // Determine if a fun would fit in a current hole
+ this.fits_in_place=function(typeobj) {
+ var current = this.getCurrent();
+
+ var inplace = false;
+ if (typeobj.args.length == current.children.length) {
+ var matches = 0;
+ for (var i in typeobj.args) {
+ if (typeobj.args[i] == current.children[i].cat)
+ matches++;
+ }
+ inplace = matches == current.children.length;
+ }
+ return inplace;
+ }
+
// Set entire subtree at current node
this.setSubtree = function(node) {
this._setSubtree(this.current, node);
@@ -140,9 +163,9 @@ function AST(fun, cat) {
}
node.children[lid.shift()] = new ASTNode(subtree);
}
-
}
+ // Find a node in the tree from its ID
this.find = function(id) {
var lid = undefined
if (Object.prototype.toString.call(id) == "[object Object]") {