diff options
| author | hallgren <hallgren@chalmers.se> | 2012-10-03 13:22:50 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2012-10-03 13:22:50 +0000 |
| commit | 3582ae6e085fcc2cfa2e0457c5674e22c5980fa5 (patch) | |
| tree | 7ab1d82a06b0539670420fd32f70ac0811c2ccff /src/www | |
| parent | a1d2d11057b1ab727fdbec4430808d53d67128b1 (diff) | |
gfse: some refactoring
Diffstat (limited to 'src/www')
| -rw-r--r-- | src/www/gfse/editor.js | 11 | ||||
| -rw-r--r-- | src/www/gfse/gf_abs.js | 28 |
2 files changed, 22 insertions, 17 deletions
diff --git a/src/www/gfse/editor.js b/src/www/gfse/editor.js index e59afdefb..703886ab5 100644 --- a/src/www/gfse/editor.js +++ b/src/www/gfse/editor.js @@ -1277,12 +1277,13 @@ function draw_opers(g,ci) { } function delete_lin(g,ci,fun) { - var i; var c=g.concretes[ci]; - for(i=0;i<c.lins.length && c.lins[i].fun!=fun;i++); - if(i<c.lins.length) c.lins=delete_ix(c.lins,i); - timestamp(c); - reload_grammar(g); + var i=lin_index(c,fun); + if(i!=null) { + c.lins=delete_ix(c.lins,i); + timestamp(c); + reload_grammar(g); + } } /* -------------------------------------------------------------------------- */ diff --git a/src/www/gfse/gf_abs.js b/src/www/gfse/gf_abs.js index 69ca4d799..eb405bae7 100644 --- a/src/www/gfse/gf_abs.js +++ b/src/www/gfse/gf_abs.js @@ -71,7 +71,7 @@ function all_inherited_funs(igs,df) { } // Return the index of the function the given name in the abstract syntax -// find_function :: Grammar -> FunId -> (Int|null) +// fun_index :: Grammar -> FunId -> (Int|null) function fun_index(g,fun) { with(g.abstract) for(var i in funs) if(funs[i].name==fun) return i @@ -93,10 +93,18 @@ function cat_lincat(conc,cat) { return null; } +// Return the index of the lin in a given concrete syntax for an abstract function +// lin_index :: Concrete -> FunId -> (Int|null) +function lin_index(conc,fun) { + with(conc) for(var i in lins) if(lins[i].fun==fun) return i + return null; +} + // Return the lin defined in a given concrete syntax for an abstract function // fun_lin :: Concrete -> FunId -> (Lin|null) function fun_lin(conc,fun) { - with(conc) for(var i in lins) if(lins[i].fun==fun) return lins[i] + var i=lin_index(conc,fun) + if(i!=null) return conc.lins[i] return null; } @@ -138,25 +146,21 @@ function rename_category(g,oldcat,newcat) { return g; } -// rename_function :: Grammar -> Id -> Id -> Grammar // destructive update +// rename_function :: Grammar -> FunId -> FunId -> Grammar // destructive update function rename_function(g,oldfun,newfun) { - function rename_lin(lin) { - if(lin.fun==oldfun) lin.fun=newfun; - } function rename_concrete(c) { - for(var i in c.lins) rename_lin(c.lins[i]); + var i=lin_index(c,oldfun) + if(i!=null) c.lins[i].fun=newfun; } for(var i in g.concretes) rename_concrete(g.concretes[i]); return g; } -// change_lin_lhs :: Grammar -> Id -> Grammar // destructive update +// change_lin_lhs :: Grammar -> Fun -> Grammar // destructive update function change_lin_lhs(g,fun) { - function change_lin(lin) { - if(lin.fun==fun.name) lin.args=arg_names(fun.type); - } function change_concrete(c) { - for(var i in c.lins) change_lin(c.lins[i]); + var i=lin_index(c,fun.name) + if(i!=null) c.lins[i].args=arg_names(fun.type); } for(var i in g.concretes) change_concrete(g.concretes[i]); return g; |
