summaryrefslogtreecommitdiff
path: root/src/runtime/javascript/gflib.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/javascript/gflib.js')
-rw-r--r--src/runtime/javascript/gflib.js24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/runtime/javascript/gflib.js b/src/runtime/javascript/gflib.js
index a81404623..8605280ee 100644
--- a/src/runtime/javascript/gflib.js
+++ b/src/runtime/javascript/gflib.js
@@ -100,6 +100,17 @@ Fun.prototype.isComplete = function() {
Fun.prototype.isLiteral = function() {
return (/^[\"\d]/).test(this.name);
} ;
+Fun.prototype.isEqual = function(obj) {
+ if (this.name != obj.name)
+ return false;
+
+ for (i in this.args) {
+ if (!this.args[i].isEqual(obj.args[i]))
+ return false;
+ }
+
+ return true;
+}
/* Concrete syntax terms */
@@ -710,8 +721,17 @@ ParseState.prototype.extractTrees = function() {
for (lbl in labels) {
var fid = this.chart.lookupPC(fid0,lbl,0);
var arg_ts = go(fid);
- for (i in arg_ts) {
- trees.push(arg_ts[i]);
+ for (var i in arg_ts) {
+ var isMember = false;
+ for (j in trees) {
+ if (arg_ts[i].isEqual(trees[j])) {
+ isMember = true;
+ break;
+ }
+ }
+
+ if (!isMember)
+ trees.push(arg_ts[i]);
}
}
}