forked from GitHub/gf-core
gfse: bug fix
...in the function that computes the transitive closure of the grammar inheritance relation.
This commit is contained in:
@@ -1015,6 +1015,7 @@ function defined_funs(g) { return all_defined_funs(g,inherited_gramamrs(g)) }
|
|||||||
function inherited_cats(g) {return all_inherited_cats(inherited_grammars(g),{})}
|
function inherited_cats(g) {return all_inherited_cats(inherited_grammars(g),{})}
|
||||||
function inherited_funs(g) {return all_inherited_funs(inherited_grammars(g),{})}
|
function inherited_funs(g) {return all_inherited_funs(inherited_grammars(g),{})}
|
||||||
|
|
||||||
|
// inherited_grammars :: Grammar -> [Grammar]
|
||||||
function inherited_grammars(g) {
|
function inherited_grammars(g) {
|
||||||
// Load the available grammars once
|
// Load the available grammars once
|
||||||
var grammar_byname=cached_grammar_byname();
|
var grammar_byname=cached_grammar_byname();
|
||||||
@@ -1026,18 +1027,21 @@ function inherited_grammars(g) {
|
|||||||
visited[g.basename]=true;
|
visited[g.basename]=true;
|
||||||
var igs=(g.extends || []).map(grammar_byname)
|
var igs=(g.extends || []).map(grammar_byname)
|
||||||
var igss=igs.map(ihgs)
|
var igss=igs.map(ihgs)
|
||||||
for(var i in igss) igs.concat(igss[i]);
|
for(var i in igss) igs=igs.concat(igss[i]);
|
||||||
return igs;
|
return igs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ihgs(g)
|
return ihgs(g)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cached_grammar__byname :: () -> (ModId->Grammar)
|
||||||
function cached_grammar_byname() {
|
function cached_grammar_byname() {
|
||||||
var gix=cached_grammar_array_byname()
|
var gix=cached_grammar_array_byname()
|
||||||
function grammar_byname(name) { return gix[name]; }
|
function grammar_byname(name) { return gix[name]; }
|
||||||
return grammar_byname;
|
return grammar_byname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cached_grammar_array_byname :: () -> {ModId=>Grammar}
|
||||||
function cached_grammar_array_byname() {
|
function cached_grammar_array_byname() {
|
||||||
var gix={};
|
var gix={};
|
||||||
for(var i=0;i<local.count;i++) {
|
for(var i=0;i<local.count;i++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user