diff --git a/src/www/syntax-editor/ast.js b/src/www/syntax-editor/ast.js index 2cad53600..5a80930d9 100644 --- a/src/www/syntax-editor/ast.js +++ b/src/www/syntax-editor/ast.js @@ -58,7 +58,7 @@ function ASTNode(data) { function AST(fun, cat) { // local helper function for building ASTNodes - newNode = function(fun, cat) { + var newNode = function(fun, cat) { return new ASTNode({ "fun": fun, "cat": cat, @@ -205,4 +205,36 @@ function AST(fun, cat) { } } + +// Parse type signature into a JSON object +// (This probably needs a better home) +AST.parse_type_signature = function(str) { + var obj = { + type: undefined, + name: [], + deps: [], + args: [], + ret: undefined + }; + var ix = str.indexOf(":"); + + // judgement type + var bits = str.substr(0, ix).split(" "); + obj.type = bits[0]; + + // name (possibly with constructors) + obj.name = bits.slice(1); + + // function args (possibly with type dependency) + var bits = map(function(s){return s.trim()}, str.substr(ix+1).split("->")); + for (var i=0 ; i")) - fun_args = fun_args.slice(0,-1); + var typeobj = AST.parse_type_signature(def); - if (fun_args.length > 0) { + if (typeobj.args.length > 0) { // Add placeholders - for (ci in fun_args) { - t.ast.add(null, fun_args[ci]); + for (var i in typeobj.args) { + t.ast.add(null, typeobj.args[i]); } }