diff options
| author | krasimir <krasimir@chalmers.se> | 2010-01-04 12:20:53 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2010-01-04 12:20:53 +0000 |
| commit | 819e6e675722d31d2a0064fa9d9f8548ebdecc85 (patch) | |
| tree | 0f729d63ae568bd1134db74cab0d1e5faae374dc /src | |
| parent | 36de4d8c54f9f3b6351103598521ed6cec2c952a (diff) | |
in the javascript version of extractTrees filter out the duplicated parse trees
Diffstat (limited to 'src')
| -rw-r--r-- | src/runtime/javascript/gflib.js | 24 |
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]); } } } |
