summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2010-01-04 12:20:53 +0000
committerkrasimir <krasimir@chalmers.se>2010-01-04 12:20:53 +0000
commit819e6e675722d31d2a0064fa9d9f8548ebdecc85 (patch)
tree0f729d63ae568bd1134db74cab0d1e5faae374dc /src
parent36de4d8c54f9f3b6351103598521ed6cec2c952a (diff)
in the javascript version of extractTrees filter out the duplicated parse trees
Diffstat (limited to 'src')
-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]);
}
}
}