ans,'] },\n\tcustomClasses: function() { return [\"Object.subclass('\" + this.rootNodeClassName + \"');\"] },\n\n\ttranslatorRules: function() {\n\t\tvar names = this.constructor.categories['translator rules'];\n\t\t\tresult = {};\n\t\tnames.forEach(function(name) { result[name] = this[name] }, this);\n\t\treturn result;\n\t},\n\tmodulePath: 'lively.ast.',\n\trootNodeClassName: 'lively.ast.Node',\n\tvisitorClassName: 'lively.ast.Visitor',\n},\n'translator rules', {\n\tbegin: {\n\t\tclassName: 'Sequence', rules: [':pos', 'trans*:children', 'end'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.children) },\n\t\t\ttoString: function() {return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.children.join(','))\n\t\t\t},\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar indent = this.indent(depth || 0);\n\t\t\t\tdepth = depth || -1;\n\t\t\t\treturn this.children.invoke('asJS', depth + 1).join(';\\n' + indent);\n\t\t\t},\n\t\t},\n\t\tinsertion: {\n\t\t\tinsertBefore: function(newNode, existingNode) {\n\t\t\t\tfor (var i = 0; i < this.children.length; i++)\n\t\t\t\t\tif (this.children[i].nodesMatching(function(node) { return node === existingNode }).length > 0)\n\t\t\t\t\t\tbreak;\n\t\t\t\tif (!this.children[i])\n\t\t\t\t\tthrow dbgOn(new Error('insertBefore: ' + existingNode + ' not in ' + this));\n\t\t\t\treturn this.insertAt(newNode, i);\n\t\t\t},\n\t\t\tinsertAt: function(newNode, idx) {\n\t\t\t\tthis.children.pushAt(newNode, idx);\n\t\t\t\tnewNode.setParent(this);\n\t\t\t\treturn newNode;\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tparentSequence: function() { return this },\n\t\t},\n\t},\n\tnumber: {\n\t\tclassName: 'Number', rules: [':pos', ':value'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.pos, this.value) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)', this.constructor.name, this.value) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.value },\n\t\t},\n\t},\n\tstring: {\n\t\tclassName: 'String', rules: [':pos', ':value'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.value + '\"') },\n\t\t\ttoString: function() { return Strings.format('%s(%s)', this.constructor.name, this.value) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return '\"' + this.value + '\"' },\n\t\t},\n\t},\n\tcondExpr: {\n\t\tclassName: 'Cond', rules: [':pos', 'trans:condExpr', 'trans:trueExpr', 'trans:falseExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s?%s:%s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('(%s) ? (%s) : (%s)',\n\t\t\t\t\tthis.condExpr.asJS(depth), this.trueExpr.asJS(depth), this.falseExpr.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'if': {\n\t\tclassName: 'If', rules: [':pos', 'trans:condExpr', 'trans:trueExpr', 'trans:falseExpr'],\n\t\tinitializing: {\n\t\t\tinitialize: function($super, pos, condExpr, trueExpr, falseExpr) {\n\t\t\t\tthis.pos = pos;\n\t\t\t\tthis.condExpr = condExpr;\n\t\t\t\t// FIXME actually this could be done with OMeta\n\t\t\t\tthis.trueExpr = trueExpr.isSequence || this.isUndefined(trueExpr) ? trueExpr : new lively.ast.Sequence(trueExpr.pos, [trueExpr]);\n\t\t\t\tthis.falseExpr = falseExpr.isSequence || this.isUndefined(falseExpr) ? falseExpr : new lively.ast.Sequence(trueExpr.pos, [falseExpr]);\n\t\t\t\tcondExpr.setParent(this);\n\t\t\t\tthis.trueExpr.setParent(this);\n\t\t\t\tthis.falseExpr.setParent(this);\n\t\t\t},\n\t\t},\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s?%s:%s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar str = Strings.format('if (%s) {%s}',\n\t\t\t\t\tthis.condExpr.asJS(depth), this.trueExpr.asJS(depth));\n\t\t\t\tif (!this.isUndefined(this.falseExpr))\n\t\t\t\t\tstr += ' else {' + this.falseExpr.asJS(depth) + '}';\n\t\t\t\treturn str;\n\t\t\t},\n\t\t},\n\t},\n\t'while': {\n\t\tclassName: 'While', rules: [':pos', 'trans:condExpr', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s?%s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('while (%s) {%s}',\n\t\t\t\t\tthis.condExpr.asJS(depth), this.body.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'doWhile': {\n\t\tclassName: 'DoWhile', rules: [':pos', 'trans:body', 'trans:condExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.body, this.condExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s while%s)',\n\t\t\t\tthis.constructor.name, this.body, this.condExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('do {%s} while (%s);',\n\t\t\t\t\tthis.body.asJS(depth), this.condExpr.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'for': {\n\t\tclassName: 'For', rules: [':pos', 'trans:init', 'trans:condExpr', 'trans:upd', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.init, this.condExpr, this.upd, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s;%s;%s do %s)',\n\t\t\t\tthis.constructor.name, this.init, this.condExpr, this.upd, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('for (%s; %s; %s) {%s}',\n\t\t\t\t\tthis.init.asJS(depth), this.condExpr.asJS(depth), this.upd.asJS(depth), this.body.asJS(depth));\n\t\t\t},\n\t\t},\n\t}, \n\tforIn: {\n\t\tclassName: 'ForIn', rules: [':pos', 'trans:name', 'trans:obj', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.name, this.obj, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s in %s do %s)',\n\t\t\t\tthis.constructor.name, this.name, this.obj, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('for (var %s in %s) {%s}',\n\t\t\t\t\tthis.name.asJS(depth), this.obj.asJS(depth), this.body.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\tset: {\n\t\tclassName: 'Set', rules: [':pos', 'trans:left', 'trans:right'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.left, this.right) },\n\t\t\ttoString: function() { return Strings.format('%s(%s = %s)',\n\t\t\t\tthis.constructor.name, this.left, this.right) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.left.asJS(depth) + ' = ' + this.right.asJS(depth) },\n\t\t},\n\t},\n\tmset: {\n\t\tclassName: 'ModifyingSet', rules: [':pos', 'trans:left', ':name', 'trans:right'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.left, '\"' + this.name + '\"', this.right) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s %s)',\n\t\t\t\tthis.constructor.name, this.left, this.name, this.right) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.left.asJS(depth) + ' ' + this.name + '= ' + this.right.asJS(depth) },\n\t\t},\n\t},\n\tbinop: {\n\t\tclassName: 'BinaryOp', rules: [':pos', ':name', 'trans:left', 'trans:right'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.name + '\"', this.left, this.right) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s %s)',\n\t\t\t\tthis.constructor.name, this.left, this.name, this.right) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.left.asJS(depth) + ' ' + this.name + ' ' + this.right.asJS(depth) },\n\t\t},\n\t},\n\tunop: {\n\t\tclassName: 'UnaryOp', rules: [':pos', ':name', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.name + '\"', this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s%s)',\n\t\t\t\tthis.constructor.name, this.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.name + this.expr.asJS(depth) },\n\t\t},\n\t},\n\tpreop: {\n\t\tclassName: 'PreOp', rules: [':pos', ':name', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.name+'\"', this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s%s)',\n\t\t\t\tthis.constructor.name, this.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.name + this.expr.asJS(depth) },\n\t\t},\n\t},\n\tpostop: {\n\t\tclassName: 'PostOp', rules: [':pos', ':name', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s%s)',\n\t\t\t\tthis.constructor.name, this.expr, this.name) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.expr.asJS(depth) + this.name },\n\t\t},\n\t},\n\t'this': {\n\t\tclassName: 'This', rules: [':pos'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos) },\n\t\t\ttoString: function() { return this.constructor.name },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'this' },\n\t\t},\n\t},\n\tget: {\n\t\tclassName: 'Variable', rules: [':pos', ':name'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"') },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.name) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.name },\n\t\t},\n\t},\n\tgetp: {\n\t\tclassName: 'GetSlot', rules: [':pos', 'trans:slotName', 'trans:obj'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.slotName, this.obj) },\n\t\t\ttoString: function() { return Strings.format('%s(%s[%s])',\n\t\t\t\tthis.constructor.name, this.obj, this.slotName) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar objJS = this.obj.asJS(depth);\n\t\t\t\tif (this.obj.isFunction) objJS = '(' + objJS + ')';\n\t\t\t\treturn objJS + '[' + this.slotName.asJS(depth) + ']';\n\t\t\t},\n\t\t},\n\t},\n\t'break': {\n\t\tclassName: 'Break', rules: [':pos'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'break' },\n\t\t},\n\t},\n\t'continue': {\n\t\tclassName: 'Continue', rules: [':pos'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'continue' },\n\t\t},\n\t},\n\tarr: {\n\t\tclassName: 'ArrayLiteral', rules: [':pos', 'trans*:elements'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.elements) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.elements.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return '[' + this.elements.invoke('asJS').join(',') + ']' },\n\t\t},\n\t},\n\t'return': {\n\t\tclassName: 'Return', rules: [':pos', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'return ' + this.expr.asJS(depth) },\n\t\t},\n\t},\n\t'with': {\n\t\tclassName: 'With', rules: [':pos', 'trans:obj', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.obj, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s)',\n\t\t\t\tthis.constructor.name, this.obj, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'with (' + this.obj.asJS(depth) + ') {' + this.body.asJS(depth) + '}' },\n\t\t},\n\t},\n\tsend: {\n\t\tclassName: 'Send', rules: [':pos', ':name', 'trans:recv', 'trans*:args'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.recv, this.args) },\n\t\t\ttoString: function() { return Strings.format('%s(%s[%s](%s))',\n\t\t\t\tthis.constructor.name, this.recv, this.name, this.args.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar recvJS = this.recv.asJS(depth);\n\t\t\t\tif (this.recv.isFunction) recvJS = '(' + recvJS + ')';\n\t\t\t\treturn Strings.format('%s[\"%s\"](%s)',\n\t\t\t\t\trecvJS, this.name, this.args.invoke('asJS').join(','));\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tgetName: function() { return this.name },\n\t\t},\n\t},\n\tcall: {\n\t\tclassName: 'Call', rules: [':pos', 'trans:fn', 'trans*:args'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.fn, this.args) },\n\t\t\ttoString: function() { return Strings.format('%s(%s(%s))',\n\t\t\t\tthis.constructor.name, this.fn, this.args.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('%s(%s)',\n\t\t\t\t\tthis.fn.asJS(depth), this.args.invoke('asJS').join(','));\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tgetName: function() { return this.fn.name },\n\t\t},\n\t},\n\t'new': {\n\t\tclassName: 'New', rules: [':pos', 'trans:clsExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.clsExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s(%s))',\n\t\t\t\tthis.constructor.name, this.clsExpr) },\n\t\t},\n\t},\n\t'var': {\n\t\tclassName: 'VarDeclaration', rules: [':pos', ':name', 'trans:val'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.val) },\n\t\t\ttoString: function() { return Strings.format('%s(%s = %s)',\n\t\t\t\tthis.constructor.name, this.name, this.val) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('var %s = %s', this.name, this.val.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'throw': {\n\t\tclassName: 'Throw', rules: [':pos', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'throw ' + this.expr.asJS(depth) },\n\t\t},\n\t},\n\t'try': {\n\t\tclassName: 'TryCatchFinally', rules: [':pos', 'trans:trySeq', ':errName', 'trans:catchSeq', 'trans:finallySeq'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.trySeq, '\"'+this.errName+'\"', this.catchSeq, this.finallySeq) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s %s)',\n\t\t\t\tthis.constructor.name, this.trySeq, this.catchSeq, this.finallySeq) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar baseIndent = this.indent(depth-1),\n\t\t\t\t\tindent = this.indent(depth),\n\t\t\t\t\tstr = 'try {\\n' + indent + this.trySeq.asJS(depth) + '\\n' + baseIndent + '}';\n\t\t\t\tif (!this.isUndefined(this.catchSeq))\n\t\t\t\t\tstr += ' catch(' + this.errName + ') {\\n' +\n\t\t\t\t\t\tindent + this.catchSeq.asJS(depth) + '\\n' + baseIndent + '}';\n\t\t\t\tif (!this.isUndefined(this.finallySeq))\n\t\t\t\t\tstr += ' finally {\\n' + indent + this.finallySeq.asJS(depth) + '\\n' + baseIndent + '}';\n\t\t\t\treturn str;\n\t\t\t},\n\t\t},\n\t},\n\tfunc: {\n\t\tclassName: 'Function', rules: [':pos', ':args', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.args.collect(function(ea) { return '\"' + ea + '\"' }), this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(function(%s) %s)',\n\t\t\t\tthis.constructor.name, this.args.join(','), this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('function%s(%s) {\\n%s\\n}',\n\t\t\t\t\tthis.name ? ' ' + this.name : '',this.args.join(','),\n\t\t\t\t\tthis.indent(depth+1) + this.body.asJS(depth+1));\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tsetName: function(name) { this.name = name },\n\t\t\tgetName: function() { return this.name },\n\t\t\tparentFunction: function() { return this },\n\t\t\tstatements: function() { return this.body.children },\n\t\t},\n\t},\n\tjson: {\n\t\tclassName: 'ObjectLiteral', rules: [':pos', 'trans*:properties'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.properties) },\n\t\t\ttoString: function() { return Strings.format('%s({%s})',\n\t\t\t\tthis.constructor.name, this.properties.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn '{' + this.properties.invoke('asJS').join(',') + '}';\n\t\t\t},\n\t\t},\n\t},\n\tbinding: {\n\t\tclassName: 'ObjProperty', rules: [':pos', ':name', 'trans:property'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.property) },\n\t\t\ttoString: function() { return Strings.format('%s(%s: %s)',\n\t\t\t\tthis.constructor.name, this.name, this.property) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('\"%s\": %s', this.name, this.property.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'switch': {\n\t\tclassName: 'Switch', rules: [':pos', 'trans:expr', 'trans*:cases'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.expr, this.cases) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s)',\n\t\t\t\tthis.constructor.name, this.expr, this.cases.join('\\n')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('switch (%s) {%s}',\n\t\t\t\t\tthis.expr.asJS(depth), this.cases.invoke('asJS').join('\\n'));\n\t\t\t},\n\t\t},\n\t},\n\t'case': {\n\t\tclassName: 'Case', rules: [':pos', 'trans:condExpr', 'trans:thenExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.thenExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s: %s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.thenExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn 'case ' + this.condExpr.asJS(depth) + ': ' + this.thenExpr.asJS(depth);\n\t\t\t},\n\t\t},\n\t},\n\t'default': {\n\t\tclassName: 'Default', rules: [':pos', 'trans:defaultExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.defaultExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(default: %s)',\n\t\t\t\tthis.constructor.name, this.defaultExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'default: ' + this.defaultExpr.asJS(depth) },\n\t\t},\n\t},\n\t'regex': {\n\t\tclassName: 'Regex', rules: [':pos', ':exprString', ':flags'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.exprString, this.flags) },\n\t\t\ttoString: function() { return Strings.format('(/%s/%s)', this.exprString, this.flags) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return '/' + this.exprString + '/' + this.flags},\n\t\t},\n\t},\n},\n'rule helper', {\n\trulesReturningSomething: function(ruleSpec) {\n\t\tif (!ruleSpec.rules) return [];\t\n\t\treturn ruleSpec.rules.reject(function(ea) { return ea.startsWith(':') || !ea.include(':') });\n\t},\n\tforCollectionRulesDo: function(ruleSpec, func) {\n\t\t// rule \"trans*:foo\"\n\t\tvar rules = this.rulesReturningSomething(ruleSpec),\n\t\t\tcollectionRules = rules.select(function(ea) {return ea.include('*:') });\n\t\tcollectionRules.forEach(function(rule) {\n\t\t\tvar ruleParts = rule.split('*:');\n\t\t\tfunc.apply(this, ruleParts);\n\t\t}, this);\n\t\treturn collectionRules;\n\t},\n\tforSimpleRulesDo: function(ruleSpec, func) {\n\t\t// rule \"trans:foo\"\n\t\tvar rules = this.rulesReturningSomething(ruleSpec),\n\t\t\tcollectionRules = rules.select(function(ea) {return ea.include('*:') }),\n\t\t\tsimpleRules = rules.withoutAll(collectionRules);\n\t\tsimpleRules.forEach(function(rule) {\n\t\t\tvar ruleParts = rule.split(':');\n\t\t\tfunc.apply(this, ruleParts);\n\t\t}, this);\n\t\treturn simpleRules;\n\t},\n},\n'file handling', {\n\twriteToFile: function(fileName, content) {\n\t\tvar baseURL = URL.codeBase.withFilename(this.modulePath.replace(/\\./g, '/')),\n\t\t\turl = baseURL.withFilename('generated/' + fileName);\n\t\tnew WebResource(url).put(content);\n\t},\n},\n'rule creation', {\n\tcreateRule: function(name, spec) {\n\t\tvar ownRules = spec.rules || [],\n\t\t\targNames = this.argsFromRules(ownRules),\n\t\t\tclassName = this.modulePath + spec.className,\n\t\t\truleAppString = ownRules.length > 0 ? ('\\t' + ownRules.join(' ') + '\\n') : '',\n\t\t\truleStart = name + ' =\\n',\n\t\t\truleReturn = Strings.format('\\t-> { new %s(%s) },', className, argNames.join(', '));\n\t\treturn ruleStart + ruleAppString + ruleReturn;\n\t},\n\targsFromRules: function(rules) {\n\t\tif (!rules) return [];\n\t\treturn rules\n\t\t\t.select(function(ea) { return ea.include(':') })\n\t\t\t.collect(function(ea) { return ea.split(':').last() });\n\t},\n\n\tcreateJSTranslatorSource: function() {\n\t\tvar rules = this.customRules();\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\trules.push(this.createRule(name, ruleSpec));\n\t\t}, this);\n\n\t\tvar head = 'ometa JSTranslator <: Parser {\\n',\n\t\t\tbody = rules.join('\\n'),\n\t\t\tend = '\\n}';\n\n\t\tbody = body.substring(0, body.length-1); // remove last ,\n\n\t\treturn head + body + end;\n\t},\n\twriteAndEvalTranslator: function() {\n\t\tvar source = this.createJSTranslatorSource(),\n\t\t\ttranslated = OMetaSupport.translateToJs(source);\n\t\teval(translated);\n\n\t\tthis.writeToFile('Translator.ometa', source);\n\t},\n\n\n},\n'class creation', {\n\tassignmentsFromArgs: function(argNames) {\n\t\treturn argNames.collect(function(ea) {\n\t\t\treturn Strings.format('\\t\\tthis.%s = %s;', ea, ea);\n\t\t}).join('\\n');\n\t},\n\tparentCallsFromRules: function(ruleSpec) {\n\t\t// new lively.ast.SourceGenerator().parentCallsFromRules({rules: ['trans:foo', 'trans*:bar']})\n\t\tvar parentCalls = [];\n\t\tthis.forCollectionRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\tvar str = Strings.format('\\t\\t%s.forEach(function(node) { node.setParent(this) }, this);', ruleVarName);\n\t\t\tparentCalls.push(str)\n\t\t});\n\n\t\tthis.forSimpleRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\tvar str = Strings.format('\\t\\t%s.setParent(this);', ruleVarName);\n\t\t\tparentCalls.push(str);\n\t\t});\n\n\t\treturn parentCalls.join('\\n');\n\t},\n\tcreateASTClass: function(ruleSpec) {\n\t\tvar className = this.modulePath + ruleSpec.className,\n\t\t\tsuperclassName = this.rootNodeClassName,\n\t\t\targs = this.argsFromRules(ruleSpec.rules),\n\t\t\tsetParentCalls = this.parentCallsFromRules(ruleSpec),\n\t\t\tassignments = this.assignmentsFromArgs(args),\n\t\t\tcategories = [];\n\n\t\t// testing category\n\t\tcategories.push(Strings.format('\\n\\'testing\\', {\\n\\t%s: true,\\n}',\n\t\t\tthis.genTypeProperty(ruleSpec.className)));\n\n\t\t// intializer category\n\t\tif (args.length > 0 && !Properties.own(ruleSpec).include('initializing')) {\n\t\t\tcategories.push(Strings.format(\n\t\t\t\t'\\n\\'initializing\\', {\\n\\tinitialize: function($super, %s) {\\n%s\\n%s\\n\\t},\\n}',\n\t\t\t\targs.join(', '), assignments, setParentCalls));\n\t\t}\n\n\t\t// other categories\n\t\tProperties.own(ruleSpec).without('className', 'rules').forEach(function(catName) {\n\t\t\tvar src = '\\n\\'' + catName + '\\', {\\n',\n\t\t\t\tcategory = ruleSpec[catName],\n\t\t\t\tfunctionNames = Functions.own(category);\n\t\t\tfunctionNames.forEach(function(name) {\n\t\t\t\tsrc += Strings.format('\\t%s: %s,\\n', name, category[name])\n\t\t\t});\n\t\t\tsrc += '}';\n\t\t\tcategories.push(src);\n\t\t});\n\t\t\n\t\tcategories.push(this.visitingCategoryForNode(ruleSpec));\n\n\t\tvar body = categories.join(','),\n\t\t\tdef = Strings.format('%s.subclass(\\'%s\\', %s)', superclassName, className, body);\n\n\t\treturn def\n\t},\n\tgenTypeProperty: function(className) {\n\t\treturn 'is' + className;\n\t},\n\n\tcreateASTClassSourcesFromRules: function() {\n\t\tvar classDefs = this.customClasses();\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\tclassDefs.push(this.createASTClass(ruleSpec));\n\t\t}, this);\n\n\t\treturn classDefs.join('\\n\\n')\n\t},\n\tevalAndWriteClasses: function() {\n\t\tvar src = this.createASTClassSourcesFromRules();\n\t\tsrc += '\\n';\n\t\tsrc += this.abstractVisitorClassSource();\n\t\teval(src);\n\n\t\tvar baseName = 'Nodes',\n\t\t\tmoduleName = this.modulePath + 'generated.' + baseName,\n\t\t\tfileName = baseName + '.js',\n\t\t\tcontent = Strings.format('module(\\'%s\\').requires().toRun(function() {\\n%s\\n});', moduleName, src);\n\t\tthis.writeToFile(fileName, content);\n\t},\n\n},\n'visitor creation', {\n\n\tabstractVisitorClassSource: function() {\n\t\tvar categories = [this.visitingCategoryForAbstractVisitor()/*, this.doubleDispatchCategoryForVisitor()*/];\n\t\treturn Strings.format('Object.subclass(\\'%s\\', %s)', this.visitorClassName, categories.join(',\\n'));\n\t},\n\tvisitingCategoryForAbstractVisitor: function(ruleSpec) {\n\t\tvar src = '\\n\\'visiting\\', {\\n';\n\t\tsrc += '\\tvisit: function(node) { return node.accept(this) },\\n';\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\tsrc += Strings.format('\\tvisit%s: function(node) {},\\n', ruleSpec.className);\n\t\t});\n\t\tsrc += '\\n}'\n\t\treturn src;\n\t},\n\tdoubleDispatchCategoryForVisitor: function() {\n\t\t// new lively.ast.SourceGenerator().doubleDispatchCategoryForVisitor() \n\t\t// currently not used\n\t\tvar createVisitAndAcceptCalls = function(ruleSpec) {\n\t\t\tvar calls = [];\n\t\t\tcalls.push('\\t\\this.visit(node);')\n\t\t\tthis.forCollectionRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\t\tvar str = Strings.format('\\t\\tnode.%s.forEach(function(ea) { this.visit(ea) }, this);', ruleVarName);\n\t\t\t\tcalls.push(str)\n\t\t\t});\n\n\t\t\tthis.forSimpleRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\t\tvar str = Strings.format('\\t\\tthis.visit(node.%s);', ruleVarName);\n\t\t\t\tcalls.push(str);\n\t\t\t});\n\t\t\treturn calls.join('\\n')\n\n\t\t}.bind(this)\n\n\n\t\tvar src = '\\n\\'double dispatch\\', {\\n';\n\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\tsrc += Strings.format('\\taccept%s: function(node) {\\n%s\\n\\t},\\n', ruleSpec.className, createVisitAndAcceptCalls(ruleSpec));\n\t\t});\n\n\n\t\tsrc += '\\n}'\n\n\t\treturn src;\n\n\t},\n\n\n\tvisitingCategoryForNode: function(ruleSpec) {\n\t\tvar category = '\\'visiting\\', {\\n\\taccept: function(visitor) {\\n';\n\t\tcategory += '\\t\\treturn visitor.visit' + ruleSpec.className + '(this);';\n\t\tcategory += '\\n\\t},\\n}';\n\n\t\treturn category;\n\t},\n\n});\n\n\nObject.extend(Function.prototype, {\n\tast: function() {\n\t\tvar parseResult = lively.ast.Parser.parse(this.toString(), 'topLevel');\n\t\tif (!parseResult || Object.isString(parseResult))\n\t\t\treturn parseResult;\n\t\tparseResult = parseResult.children[0];\n\t\tif (parseResult.isVarDeclaration && parseResult.val.isFunction) {\n\t\t\tparseResult.val.setName(parseResult.name);\n\t\t\tparseResult.val.realFunction = this;\n\t\t\treturn parseResult.val;\n\t\t} else if (parseResult.isFunction) {\n\t\t\tparseResult.realFunction = this;\n\t\t}\n\t\treturn parseResult;\n\t},\n});\n\nlively.ast.Visitor.subclass('lively.ast.ClosureAnalyzer',\n'analyzing helper', {\n\tnewScope: function(optParentScope) {\n\t\treturn {\n\t\t\tboundVars: [],\n\t\t\tunboundVars: [],\n\t\t\tlocalUnboundVars: function() { return this.unboundVars.withoutAll(this.boundVars) },\n\t\t}\n\t},\n},\n'analyzing', {\n\tfindUnboundVariableNames: function(func) {\n\t\tvar ast = func.ast();\n\t\tthis.currentScope = this.newScope();\n\t\tthis.visit(ast);\n\t\treturn this.currentScope.localUnboundVars(); // FIXME unbound vars with nested scopes!\n\t},\n},\n'visiting', {\n\tvisitVariable: function(node) {\n\t\tthis.currentScope.unboundVars.push(node.name);\n\t},\n\tvisitVarDeclaration: function(node) {\n\t\tthis.currentScope.boundVars.push(node.name);\n\t\tthis.visitParts(node, ['val']);\n\t},\n\tvisitParts: function(node, parts) {\n\t\tfor (var i = 0; i < parts.length; i++)\n\t\t\tnode[parts[i]].accept(this)\n\t},\n\tvisitSequence: function(node) { node.children.invoke('accept', this) },\n\tvisitArrayLiteral: function(node) { node.elements.invoke('accept', this) },\n\tvisitObjectLiteral: function(node) { node.properties.invoke('accept', this) },\n\tvisitCond: function(node) { this.visitParts(node, ['condExpr', 'trueExpr', 'falseExpr']) },\n\tvisitIf: function(node) { this.visitCond(node) },\n\tvisitWhile: function(node) { this.visitParts(node, ['condExpr', 'body']) },\n\tvisitDoWhile: function(node) { this.visitParts(node, ['body', 'condExpr']) },\n\tvisitFor: function(node) { this.visitParts(node, ['init', 'condExpr', 'upd', 'body']) },\n\tvisitForIn: function(node) { this.visitParts(node, ['name', 'obj', 'body']) },\n\tvisitSet: function(node) { this.visitParts(node, ['left', 'right']) },\n\tvisitModifyingSet: function(node) { this.visitParts(node, ['left', 'right']) },\n\tvisitBinaryOp: function(node) { this.visitParts(node, ['left', 'right']) },\n\tvisitUnaryOp: function(node) { this.visitParts(node, ['expr']) },\n\tvisitPreOp: function(node) { this.visitParts(node, ['expr']) },\n\tvisitPostOp: function(node) { this.visitParts(node, ['expr']) },\n\tvisitGetSlot: function(node) { this.visitParts(node, ['slotName', 'obj']) },\n\tvisitReturn: function(node) { this.visitParts(node, ['expr']) },\n\tvisitWith: function(node) { this.visitParts(node, ['obj', 'body']) },\n\tvisitSend: function(node) { this.visitParts(node, ['recv']) },\n\tvisitCall: function(node) { this.visitParts(node, ['fn']) },\n\tvisitNew: function(node) { this.visitParts(node, ['clsExpr']) },\n\tvisitThrow: function(node) { this.visitParts(node, ['expr']) },\n\tvisitTryCatchFinally: function(node) { this.visitParts(node, ['trySeq', 'catchSeq', 'finallySeq']) },\n\tvisitFunction: function(node) { this.visitParts(node, ['body']) },\n\tvisitObjProperty: function(node) { this.visitParts(node, ['property']) },\n\tvisitSwitch: function(node) { this.visitParts(node, ['expr']) },\n\tvisitCase: function(node) { this.visitParts(node, ['condExpr', 'thenExpr']) },\n\tvisitDefault: function(node) { this.visitParts(node, ['defaultExpr']) },\n});\n\n}) // end of module\n","sourceString":"/*\n * Copyright (c) 2008-2011 Hasso Plattner Institute\n *\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nmodule('lively.ast.Parser').requires('lively.ast.generated.Translator', 'lively.ast.generated.Nodes', 'lively.ast.Interpreter', 'lively.ast.LivelyJSParser').toRun(function() {\n\n\nObject.extend(LivelyJSParser, {\n\thexDigits: \"0123456789abcdef\",\n\tkeywords: (function() {\n\t\tvar keywordWithIdx ={},\n\t\t\tkeywords = [\"break\", \"case\", \"catch\", \"continue\", \"default\", \"delete\", \"do\", \"else\", \"finally\",\n\t\t\t\"for\", \"function\", \"if\", \"in\", \"instanceof\", \"new\", \"return\", \"switch\", \"this\", \"throw\", \"try\",\n\t\t\t\"typeof\", \"var\", \"void\", \"while\", \"with\", \"ometa\", \"debugger\"];\n\t\tfor (var idx = 0; idx < keywords.length; idx++)\n\t\t\tkeywordWithIdx[keywords[idx]] = true;\n\t\treturn keywordWithIdx\n\t})(),\n\t_isKeyword: function(k) {\n\t\treturn this.keywords[k] === true;\n\t},\n});\n\nObject.extend(lively.ast.Parser, {\n\tjsParser: LivelyJSParser,\n\tastTranslator: JSTranslator,\n\tbasicParse: function(source, rule) {\n\t\t// first call the LKJSParser. this will result in a synbolic AST tree.\n\t\t// translate this into real AST objects using JSTranslator\n\t\tvar errorHandler = function() { alert(OMetaSupport.handleErrorDebug.apply(OMetaSupport, arguments)) },\n\t\t\tintermediate = OMetaSupport.matchAllWithGrammar(this.jsParser, rule, source, errorHandler);\n\t\tif (!intermediate || Object.isString(intermediate))\n\t\t\tthrow new Error('Could not parse JS source code: ' + intermediate);\n\t\tvar ast = OMetaSupport.matchWithGrammar(this.astTranslator, 'trans', intermediate);\n\t\tif (!ast || Object.isString(ast))\n\t\t\tthrow new Error('Could not translate symbolic AST tree: ' + ast);\n\t\treturn ast;\n\t},\n\n\tparse: function(src, optRule) { return this.basicParse(src, optRule || 'topLevel') },\n});\n\nlively.ast.Node.addMethods(\n'accessing', {\n\tsetParent: function(parentNode) { return this._parent = parentNode },\n\tgetParent: function(parentNode) { return this._parent },\n\thasParent: function(parentNode) { return this._parent != undefined },\n\tparentSequence: function() {\n\t\treturn this.hasParent() && this.getParent().parentSequence();\n\t},\n\tparentFunction: function() {\n\t\treturn this.hasParent() && this.getParent().parentFunction();\n\t},\n\tastIndex: function() {\n\t\tvar parentFunc = this.parentFunction();\n\t\tif (!parentFunc) throw new Error('astIndex: cannot get parent fucntion of ' + this);\n\t\treturn parentFunc.linearlyListNodesWithoutNestedFunctions().indexOf(this);\n\t},\n\tnodeForAstIndex: function(idx) {\n\t\treturn this.linearlyListNodesWithoutNestedFunctions()[idx]\n\t},\n\tnextStatement: function() {\n\t\tvar node = this, parent;\n\t\twhile (parent = node.getParent()) {\n\t\t\tif (parent.isSequence) {\n\t\t\t\tvar seqIdx = parent.children.indexOf(node);\n\t\t\t\tif (parent.children[seqIdx + 1])\n\t\t\t\t\treturn parent.children[seqIdx + 1]\n\t\t\t}\n\t\t\tnode = parent;\n\t\t}\n\t\treturn null;\n\n\t},\n\n\n},\n'testing', {\n\tisASTNode: true,\n\tisUndefined: function(expr) {\n\t\treturn expr.isVariable && expr.name === 'undefined';\n\t},\n},\n'enumerating', {\n\twithAllChildNodesDo: function(func, parent, nameInParent, depth) {\n\t\t// args of func: node, parent, nameInParent, depth; func returns true if recursive call should be made\n\t\tvar node = this,\n\t\t\tshouldContinue = func(node, parent, nameInParent, depth || 0);\n\t\tif (!shouldContinue) return;\n\t\tthis.doForAllChildNodes(function(childNode, nameInParent) {\n\t\t\tchildNode.withAllChildNodesDo(func, node, nameInParent, depth ? depth + 1 : 1)\n\t\t});\n\t},\n\twithAllChildNodesDoPostOrder: function(func, stopFunc, parent, nameInParent, depth) {\n\t\t// args of func: node, parent, nameInParent, depth; func returns true if recursive call should be made\n\t\tvar node = this,\n\t\t\tshouldStop = stopFunc && stopFunc(node, parent, nameInParent, depth || 0);\n\t\tif (shouldStop) return;\n\t\tthis.doForAllChildNodes(function(childNode, nameInParent) {\n\t\t\tchildNode.withAllChildNodesDoPostOrder(func, stopFunc, node, nameInParent, depth ? depth + 1 : 1)\n\t\t});\n\t\tfunc(node, parent, nameInParent, depth || 0);\n\t},\n\n\tdoForAllChildNodes: function(func) {\n\t\tfor (var name in this) {\n\t\t\tif (!this.hasOwnProperty(name) || name == '_parent') continue;\n\t\t\tvar value = this[name];\n\t\t\tif (value.isASTNode) { \n\t\t\t\tfunc(value, name, null)\n\t\t\t} else if (Object.isArray(value)) {\n\t\t\t\tvalue.forEach(function(item, i) { if (item.isASTNode) func(item, name, i) });\n\t\t\t}\n\t\t}\n\t},\n\tnodesMatching: function(matchFunc) {\n\t\tvar result = [];\n\t\tthis.withAllChildNodesDo(function(node, parent, nameInParent, depth) {\n\t\t\tif (matchFunc(node, parent, nameInParent, depth)) result.push(node);\n\t\t\treturn true;\n\t\t});\n\t\treturn result;\n\t},\n\tlinearlyListNodes: function() {\n\t\tvar nodes = [];\n\t\tthis.withAllChildNodesDoPostOrder(function(node) { nodes.push(node) });\n\t\treturn nodes;\n\t},\n\tlinearlyListNodesWithoutNestedFunctions: function() {\n\t\tvar root = this, nodes = [];\n\t\tthis.withAllChildNodesDoPostOrder(\n\t\t\tfunction(node) { nodes.push(node) },\n\t\t\tfunction(node) { return node.isFunction && node !== root } // stopFunc\n\t\t);\n\t\treturn nodes;\n\t},\n\n},\n'replacing', {\n\treplaceNodesMatching: function(testFunc, replacementNodeOrFunction) {\n\t\tvar nodes = this.nodesMatching(testFunc);\n\t\tnodes.forEach(function(node) {\n\t\t\t// Careful here! One could directly use node.replaceWith but if the replacement function\n\t\t\t// reuses node and replaces it already then parent will be changed!\n\t\t\tvar parent = node.getParent();\n\t\t\tif (!parent) throw new Error('No parent for node in replaceNodesMatching ' + node);\n\t\t\tvar replacementNode = (typeof replacementNodeOrFunction == 'function') ?\n\t\t\t\treplacementNodeOrFunction(node) : replacementNodeOrFunction;\n\t\t\tparent.replaceChildNode(node, replacementNode);\n\t\t})\n\t\treturn this;\n\t},\n\treplaceWith: function(otherNode) {\n\t\tif (!this.hasParent()) throw new Error('Need parent node for replaceWith but cannot find it ' + this);\n\t\tthis.getParent().replaceChildNode(this, otherNode);\n\t\treturn otherNode;\n\t},\n\treplaceChildNode: function(childNode, newNode) {\n\t\t// find name if childNode in me\n\t\tvar slotName, idx;\n\t\tthis.doForAllChildNodes(function(node, nameInParent, i) {\n\t\t\tif (node !== childNode) return;\n\t\t\tslotName = nameInParent;\n\t\t\tidx = i;\n\t\t});\n\t\tif (slotName === undefined)\n\t\t\tthrow new Error('Cannot find childNode in me! (#replaceChildNode)');\n\t\tif (idx === undefined || idx === null) {\n\t\t\tthis[slotName] = newNode;\n\t\t} else { // Array\n\t\t\tthis[slotName][idx] = newNode;\n\t\t}\n\t\tnewNode.setParent(this);\n\t},\n\n\n},\n'evaluation', {\n\teval: function() {\n\t\ttry {\n\t\t\tvar js = this.asJS(),\n\t\t\t\tsrc = '(' + js + ')',\n\t\t\t\tresult = eval(src);\n\t\t} catch(e) {\n\t\t\talert('Could not eval ' + js + ' because:\\n' + e + '\\n' + e.stack);\n\t\t}\n\t\treturn result;\n\t},\n},\n'debugging', {\n\terror: function(msg) { throw new Error(msg) },\n\tindent: function(depth) { return Strings.indent('', '\t', depth) },\n\ttoString: function() { return this.constructor.name },\n\tprintTree: function(postOrder) {\n\t\tvar nodeStrings = [], idx = 0,\n\t\t\tenumFunc = postOrder ? 'withAllChildNodesDoPostOrder' : 'withAllChildNodesDo';\n\t\tthis[enumFunc](function(node, parent, nameInParent, depth) {\n\t\t\tnodeStrings.push(idx.toString() + ' ' +\n\t\t\t\tStrings.indent(node.constructor.name + '(' + nameInParent + ')', ' ', depth));\n\t\t\tidx++;\n\t\t\treturn true;\n\t\t})\n\t\treturn nodeStrings.join('\\n');\n\t},\n\tprintConstructorCall: function(/* args */) {\n\t\tvar call = 'new ' + this.constructor.type + '(', argCalls = [];\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i], argCall = '';\n\t\t\tif (Object.isArray(arg)) {\n\t\t\t\targCall += '[';\n\t\t\t\targCall += arg.collect(function(ea) {return ea.isASTNode ? ea.printConstruction() : ea}).join(',');\n\t\t\t\targCall += ']';\n\t\t\t} else if (arg.isASTNode) {\n\t\t\t\targCall += arg.printConstruction();\n\t\t\t} else {\n\t\t\t\targCall += arg;\n\t\t\t}\n\t\t\targCalls.push(argCall);\n\t\t}\n\t\tcall += argCalls.join(',');\n\t\tcall += ')';\n\t\treturn call;\n\t},\n\n});\nObject.subclass('lively.ast.SourceGenerator',\n// usage:\n// gen = new lively.ast.SourceGenerator()\n// gen.writeAndEvalTranslator()\n// gen.evalAndWriteClasses()\n// lively.ast.Parser.astTranslator = JSTranslator\n// lively.ast.Parser.jsParser = LivelyJSParser\n'settings', {\n\tcustomRules: function() { return ['trans = [:t apply(t):ans] -> ans,'] },\n\tcustomClasses: function() { return [\"Object.subclass('\" + this.rootNodeClassName + \"');\"] },\n\n\ttranslatorRules: function() {\n\t\tvar names = this.constructor.categories['translator rules'];\n\t\t\tresult = {};\n\t\tnames.forEach(function(name) { result[name] = this[name] }, this);\n\t\treturn result;\n\t},\n\tmodulePath: 'lively.ast.',\n\trootNodeClassName: 'lively.ast.Node',\n\tvisitorClassName: 'lively.ast.Visitor',\n},\n'translator rules', {\n\tbegin: {\n\t\tclassName: 'Sequence', rules: [':pos', 'trans*:children', 'end'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.children) },\n\t\t\ttoString: function() {return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.children.join(','))\n\t\t\t},\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar indent = this.indent(depth || 0);\n\t\t\t\tdepth = depth || -1;\n\t\t\t\treturn this.children.invoke('asJS', depth + 1).join(';\\n' + indent);\n\t\t\t},\n\t\t},\n\t\tinsertion: {\n\t\t\tinsertBefore: function(newNode, existingNode) {\n\t\t\t\tfor (var i = 0; i < this.children.length; i++)\n\t\t\t\t\tif (this.children[i].nodesMatching(function(node) { return node === existingNode }).length > 0)\n\t\t\t\t\t\tbreak;\n\t\t\t\tif (!this.children[i])\n\t\t\t\t\tthrow dbgOn(new Error('insertBefore: ' + existingNode + ' not in ' + this));\n\t\t\t\treturn this.insertAt(newNode, i);\n\t\t\t},\n\t\t\tinsertAt: function(newNode, idx) {\n\t\t\t\tthis.children.pushAt(newNode, idx);\n\t\t\t\tnewNode.setParent(this);\n\t\t\t\treturn newNode;\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tparentSequence: function() { return this },\n\t\t},\n\t},\n\tnumber: {\n\t\tclassName: 'Number', rules: [':pos', ':value'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.pos, this.value) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)', this.constructor.name, this.value) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.value },\n\t\t},\n\t},\n\tstring: {\n\t\tclassName: 'String', rules: [':pos', ':value'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.value + '\"') },\n\t\t\ttoString: function() { return Strings.format('%s(%s)', this.constructor.name, this.value) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return '\"' + this.value + '\"' },\n\t\t},\n\t},\n\tcondExpr: {\n\t\tclassName: 'Cond', rules: [':pos', 'trans:condExpr', 'trans:trueExpr', 'trans:falseExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s?%s:%s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('(%s) ? (%s) : (%s)',\n\t\t\t\t\tthis.condExpr.asJS(depth), this.trueExpr.asJS(depth), this.falseExpr.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'if': {\n\t\tclassName: 'If', rules: [':pos', 'trans:condExpr', 'trans:trueExpr', 'trans:falseExpr'],\n\t\tinitializing: {\n\t\t\tinitialize: function($super, pos, condExpr, trueExpr, falseExpr) {\n\t\t\t\tthis.pos = pos;\n\t\t\t\tthis.condExpr = condExpr;\n\t\t\t\t// FIXME actually this could be done with OMeta\n\t\t\t\tthis.trueExpr = trueExpr.isSequence || this.isUndefined(trueExpr) ? trueExpr : new lively.ast.Sequence(trueExpr.pos, [trueExpr]);\n\t\t\t\tthis.falseExpr = falseExpr.isSequence || this.isUndefined(falseExpr) ? falseExpr : new lively.ast.Sequence(trueExpr.pos, [falseExpr]);\n\t\t\t\tcondExpr.setParent(this);\n\t\t\t\tthis.trueExpr.setParent(this);\n\t\t\t\tthis.falseExpr.setParent(this);\n\t\t\t},\n\t\t},\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s?%s:%s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar str = Strings.format('if (%s) {%s}',\n\t\t\t\t\tthis.condExpr.asJS(depth), this.trueExpr.asJS(depth));\n\t\t\t\tif (!this.isUndefined(this.falseExpr))\n\t\t\t\t\tstr += ' else {' + this.falseExpr.asJS(depth) + '}';\n\t\t\t\treturn str;\n\t\t\t},\n\t\t},\n\t},\n\t'while': {\n\t\tclassName: 'While', rules: [':pos', 'trans:condExpr', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s?%s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('while (%s) {%s}',\n\t\t\t\t\tthis.condExpr.asJS(depth), this.body.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'doWhile': {\n\t\tclassName: 'DoWhile', rules: [':pos', 'trans:body', 'trans:condExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.body, this.condExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s while%s)',\n\t\t\t\tthis.constructor.name, this.body, this.condExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('do {%s} while (%s);',\n\t\t\t\t\tthis.body.asJS(depth), this.condExpr.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'for': {\n\t\tclassName: 'For', rules: [':pos', 'trans:init', 'trans:condExpr', 'trans:upd', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.init, this.condExpr, this.upd, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s;%s;%s do %s)',\n\t\t\t\tthis.constructor.name, this.init, this.condExpr, this.upd, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('for (%s; %s; %s) {%s}',\n\t\t\t\t\tthis.init.asJS(depth), this.condExpr.asJS(depth), this.upd.asJS(depth), this.body.asJS(depth));\n\t\t\t},\n\t\t},\n\t}, \n\tforIn: {\n\t\tclassName: 'ForIn', rules: [':pos', 'trans:name', 'trans:obj', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.name, this.obj, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s in %s do %s)',\n\t\t\t\tthis.constructor.name, this.name, this.obj, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('for (var %s in %s) {%s}',\n\t\t\t\t\tthis.name.asJS(depth), this.obj.asJS(depth), this.body.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\tset: {\n\t\tclassName: 'Set', rules: [':pos', 'trans:left', 'trans:right'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.left, this.right) },\n\t\t\ttoString: function() { return Strings.format('%s(%s = %s)',\n\t\t\t\tthis.constructor.name, this.left, this.right) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.left.asJS(depth) + ' = ' + this.right.asJS(depth) },\n\t\t},\n\t},\n\tmset: {\n\t\tclassName: 'ModifyingSet', rules: [':pos', 'trans:left', ':name', 'trans:right'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.left, '\"' + this.name + '\"', this.right) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s %s)',\n\t\t\t\tthis.constructor.name, this.left, this.name, this.right) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.left.asJS(depth) + ' ' + this.name + '= ' + this.right.asJS(depth) },\n\t\t},\n\t},\n\tbinop: {\n\t\tclassName: 'BinaryOp', rules: [':pos', ':name', 'trans:left', 'trans:right'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.name + '\"', this.left, this.right) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s %s)',\n\t\t\t\tthis.constructor.name, this.left, this.name, this.right) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.left.asJS(depth) + ' ' + this.name + ' ' + this.right.asJS(depth) },\n\t\t},\n\t},\n\tunop: {\n\t\tclassName: 'UnaryOp', rules: [':pos', ':name', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.name + '\"', this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s%s)',\n\t\t\t\tthis.constructor.name, this.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.name + this.expr.asJS(depth) },\n\t\t},\n\t},\n\tpreop: {\n\t\tclassName: 'PreOp', rules: [':pos', ':name', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.name+'\"', this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s%s)',\n\t\t\t\tthis.constructor.name, this.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.name + this.expr.asJS(depth) },\n\t\t},\n\t},\n\tpostop: {\n\t\tclassName: 'PostOp', rules: [':pos', ':name', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s%s)',\n\t\t\t\tthis.constructor.name, this.expr, this.name) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.expr.asJS(depth) + this.name },\n\t\t},\n\t},\n\t'this': {\n\t\tclassName: 'This', rules: [':pos'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos) },\n\t\t\ttoString: function() { return this.constructor.name },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'this' },\n\t\t},\n\t},\n\tget: {\n\t\tclassName: 'Variable', rules: [':pos', ':name'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"') },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.name) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.name },\n\t\t},\n\t},\n\tgetp: {\n\t\tclassName: 'GetSlot', rules: [':pos', 'trans:slotName', 'trans:obj'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.slotName, this.obj) },\n\t\t\ttoString: function() { return Strings.format('%s(%s[%s])',\n\t\t\t\tthis.constructor.name, this.obj, this.slotName) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar objJS = this.obj.asJS(depth);\n\t\t\t\tif (this.obj.isFunction) objJS = '(' + objJS + ')';\n\t\t\t\treturn objJS + '[' + this.slotName.asJS(depth) + ']';\n\t\t\t},\n\t\t},\n\t},\n\t'break': {\n\t\tclassName: 'Break', rules: [':pos'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'break' },\n\t\t},\n\t},\n\t'continue': {\n\t\tclassName: 'Continue', rules: [':pos'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'continue' },\n\t\t},\n\t},\n\tarr: {\n\t\tclassName: 'ArrayLiteral', rules: [':pos', 'trans*:elements'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.elements) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.elements.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return '[' + this.elements.invoke('asJS').join(',') + ']' },\n\t\t},\n\t},\n\t'return': {\n\t\tclassName: 'Return', rules: [':pos', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'return ' + this.expr.asJS(depth) },\n\t\t},\n\t},\n\t'with': {\n\t\tclassName: 'With', rules: [':pos', 'trans:obj', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.obj, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s)',\n\t\t\t\tthis.constructor.name, this.obj, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'with (' + this.obj.asJS(depth) + ') {' + this.body.asJS(depth) + '}' },\n\t\t},\n\t},\n\tsend: {\n\t\tclassName: 'Send', rules: [':pos', ':name', 'trans:recv', 'trans*:args'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.recv, this.args) },\n\t\t\ttoString: function() { return Strings.format('%s(%s[%s](%s))',\n\t\t\t\tthis.constructor.name, this.recv, this.name, this.args.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar recvJS = this.recv.asJS(depth);\n\t\t\t\tif (this.recv.isFunction) recvJS = '(' + recvJS + ')';\n\t\t\t\treturn Strings.format('%s[\"%s\"](%s)',\n\t\t\t\t\trecvJS, this.name, this.args.invoke('asJS').join(','));\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tgetName: function() { return this.name },\n\t\t},\n\t},\n\tcall: {\n\t\tclassName: 'Call', rules: [':pos', 'trans:fn', 'trans*:args'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.fn, this.args) },\n\t\t\ttoString: function() { return Strings.format('%s(%s(%s))',\n\t\t\t\tthis.constructor.name, this.fn, this.args.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('%s(%s)',\n\t\t\t\t\tthis.fn.asJS(depth), this.args.invoke('asJS').join(','));\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tgetName: function() { return this.fn.name },\n\t\t},\n\t},\n\t'new': {\n\t\tclassName: 'New', rules: [':pos', 'trans:clsExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.clsExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s(%s))',\n\t\t\t\tthis.constructor.name, this.clsExpr) },\n\t\t},\n\t},\n\t'var': {\n\t\tclassName: 'VarDeclaration', rules: [':pos', ':name', 'trans:val'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.val) },\n\t\t\ttoString: function() { return Strings.format('%s(%s = %s)',\n\t\t\t\tthis.constructor.name, this.name, this.val) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('var %s = %s', this.name, this.val.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'throw': {\n\t\tclassName: 'Throw', rules: [':pos', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'throw ' + this.expr.asJS(depth) },\n\t\t},\n\t},\n\t'try': {\n\t\tclassName: 'TryCatchFinally', rules: [':pos', 'trans:trySeq', ':errName', 'trans:catchSeq', 'trans:finallySeq'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.trySeq, '\"'+this.errName+'\"', this.catchSeq, this.finallySeq) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s %s)',\n\t\t\t\tthis.constructor.name, this.trySeq, this.catchSeq, this.finallySeq) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar baseIndent = this.indent(depth-1),\n\t\t\t\t\tindent = this.indent(depth),\n\t\t\t\t\tstr = 'try {\\n' + indent + this.trySeq.asJS(depth) + '\\n' + baseIndent + '}';\n\t\t\t\tif (!this.isUndefined(this.catchSeq))\n\t\t\t\t\tstr += ' catch(' + this.errName + ') {\\n' +\n\t\t\t\t\t\tindent + this.catchSeq.asJS(depth) + '\\n' + baseIndent + '}';\n\t\t\t\tif (!this.isUndefined(this.finallySeq))\n\t\t\t\t\tstr += ' finally {\\n' + indent + this.finallySeq.asJS(depth) + '\\n' + baseIndent + '}';\n\t\t\t\treturn str;\n\t\t\t},\n\t\t},\n\t},\n\tfunc: {\n\t\tclassName: 'Function', rules: [':pos', ':args', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.args.collect(function(ea) { return '\"' + ea + '\"' }), this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(function(%s) %s)',\n\t\t\t\tthis.constructor.name, this.args.join(','), this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('function%s(%s) {\\n%s\\n}',\n\t\t\t\t\tthis.name ? ' ' + this.name : '',this.args.join(','),\n\t\t\t\t\tthis.indent(depth+1) + this.body.asJS(depth+1));\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tsetName: function(name) { this.name = name },\n\t\t\tgetName: function() { return this.name },\n\t\t\tparentFunction: function() { return this },\n\t\t\tstatements: function() { return this.body.children },\n\t\t},\n\t},\n\tjson: {\n\t\tclassName: 'ObjectLiteral', rules: [':pos', 'trans*:properties'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.properties) },\n\t\t\ttoString: function() { return Strings.format('%s({%s})',\n\t\t\t\tthis.constructor.name, this.properties.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn '{' + this.properties.invoke('asJS').join(',') + '}';\n\t\t\t},\n\t\t},\n\t},\n\tbinding: {\n\t\tclassName: 'ObjProperty', rules: [':pos', ':name', 'trans:property'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.property) },\n\t\t\ttoString: function() { return Strings.format('%s(%s: %s)',\n\t\t\t\tthis.constructor.name, this.name, this.property) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('\"%s\": %s', this.name, this.property.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'switch': {\n\t\tclassName: 'Switch', rules: [':pos', 'trans:expr', 'trans*:cases'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.expr, this.cases) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s)',\n\t\t\t\tthis.constructor.name, this.expr, this.cases.join('\\n')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('switch (%s) {%s}',\n\t\t\t\t\tthis.expr.asJS(depth), this.cases.invoke('asJS').join('\\n'));\n\t\t\t},\n\t\t},\n\t},\n\t'case': {\n\t\tclassName: 'Case', rules: [':pos', 'trans:condExpr', 'trans:thenExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.thenExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s: %s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.thenExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn 'case ' + this.condExpr.asJS(depth) + ': ' + this.thenExpr.asJS(depth);\n\t\t\t},\n\t\t},\n\t},\n\t'default': {\n\t\tclassName: 'Default', rules: [':pos', 'trans:defaultExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.defaultExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(default: %s)',\n\t\t\t\tthis.constructor.name, this.defaultExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'default: ' + this.defaultExpr.asJS(depth) },\n\t\t},\n\t},\n\t'regex': {\n\t\tclassName: 'Regex', rules: [':pos', ':exprString', ':flags'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.exprString, this.flags) },\n\t\t\ttoString: function() { return Strings.format('(/%s/%s)', this.exprString, this.flags) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return '/' + this.exprString + '/' + this.flags},\n\t\t},\n\t},\n},\n'rule helper', {\n\trulesReturningSomething: function(ruleSpec) {\n\t\tif (!ruleSpec.rules) return [];\t\n\t\treturn ruleSpec.rules.reject(function(ea) { return ea.startsWith(':') || !ea.include(':') });\n\t},\n\tforCollectionRulesDo: function(ruleSpec, func) {\n\t\t// rule \"trans*:foo\"\n\t\tvar rules = this.rulesReturningSomething(ruleSpec),\n\t\t\tcollectionRules = rules.select(function(ea) {return ea.include('*:') });\n\t\tcollectionRules.forEach(function(rule) {\n\t\t\tvar ruleParts = rule.split('*:');\n\t\t\tfunc.apply(this, ruleParts);\n\t\t}, this);\n\t\treturn collectionRules;\n\t},\n\tforSimpleRulesDo: function(ruleSpec, func) {\n\t\t// rule \"trans:foo\"\n\t\tvar rules = this.rulesReturningSomething(ruleSpec),\n\t\t\tcollectionRules = rules.select(function(ea) {return ea.include('*:') }),\n\t\t\tsimpleRules = rules.withoutAll(collectionRules);\n\t\tsimpleRules.forEach(function(rule) {\n\t\t\tvar ruleParts = rule.split(':');\n\t\t\tfunc.apply(this, ruleParts);\n\t\t}, this);\n\t\treturn simpleRules;\n\t},\n},\n'file handling', {\n\twriteToFile: function(fileName, content) {\n\t\tvar baseURL = URL.codeBase.withFilename(this.modulePath.replace(/\\./g, '/')),\n\t\t\turl = baseURL.withFilename('generated/' + fileName);\n\t\tnew WebResource(url).put(content);\n\t},\n},\n'rule creation', {\n\tcreateRule: function(name, spec) {\n\t\tvar ownRules = spec.rules || [],\n\t\t\targNames = this.argsFromRules(ownRules),\n\t\t\tclassName = this.modulePath + spec.className,\n\t\t\truleAppString = ownRules.length > 0 ? ('\\t' + ownRules.join(' ') + '\\n') : '',\n\t\t\truleStart = name + ' =\\n',\n\t\t\truleReturn = Strings.format('\\t-> { new %s(%s) },', className, argNames.join(', '));\n\t\treturn ruleStart + ruleAppString + ruleReturn;\n\t},\n\targsFromRules: function(rules) {\n\t\tif (!rules) return [];\n\t\treturn rules\n\t\t\t.select(function(ea) { return ea.include(':') })\n\t\t\t.collect(function(ea) { return ea.split(':').last() });\n\t},\n\n\tcreateJSTranslatorSource: function() {\n\t\tvar rules = this.customRules();\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\trules.push(this.createRule(name, ruleSpec));\n\t\t}, this);\n\n\t\tvar head = 'ometa JSTranslator <: Parser {\\n',\n\t\t\tbody = rules.join('\\n'),\n\t\t\tend = '\\n}';\n\n\t\tbody = body.substring(0, body.length-1); // remove last ,\n\n\t\treturn head + body + end;\n\t},\n\twriteAndEvalTranslator: function() {\n\t\tvar source = this.createJSTranslatorSource(),\n\t\t\ttranslated = OMetaSupport.translateToJs(source);\n\t\teval(translated);\n\n\t\tthis.writeToFile('Translator.ometa', source);\n\t},\n\n\n},\n'class creation', {\n\tassignmentsFromArgs: function(argNames) {\n\t\treturn argNames.collect(function(ea) {\n\t\t\treturn Strings.format('\\t\\tthis.%s = %s;', ea, ea);\n\t\t}).join('\\n');\n\t},\n\tparentCallsFromRules: function(ruleSpec) {\n\t\t// new lively.ast.SourceGenerator().parentCallsFromRules({rules: ['trans:foo', 'trans*:bar']})\n\t\tvar parentCalls = [];\n\t\tthis.forCollectionRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\tvar str = Strings.format('\\t\\t%s.forEach(function(node) { node.setParent(this) }, this);', ruleVarName);\n\t\t\tparentCalls.push(str)\n\t\t});\n\n\t\tthis.forSimpleRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\tvar str = Strings.format('\\t\\t%s.setParent(this);', ruleVarName);\n\t\t\tparentCalls.push(str);\n\t\t});\n\n\t\treturn parentCalls.join('\\n');\n\t},\n\tcreateASTClass: function(ruleSpec) {\n\t\tvar className = this.modulePath + ruleSpec.className,\n\t\t\tsuperclassName = this.rootNodeClassName,\n\t\t\targs = this.argsFromRules(ruleSpec.rules),\n\t\t\tsetParentCalls = this.parentCallsFromRules(ruleSpec),\n\t\t\tassignments = this.assignmentsFromArgs(args),\n\t\t\tcategories = [];\n\n\t\t// testing category\n\t\tcategories.push(Strings.format('\\n\\'testing\\', {\\n\\t%s: true,\\n}',\n\t\t\tthis.genTypeProperty(ruleSpec.className)));\n\n\t\t// intializer category\n\t\tif (args.length > 0 && !Properties.own(ruleSpec).include('initializing')) {\n\t\t\tcategories.push(Strings.format(\n\t\t\t\t'\\n\\'initializing\\', {\\n\\tinitialize: function($super, %s) {\\n%s\\n%s\\n\\t},\\n}',\n\t\t\t\targs.join(', '), assignments, setParentCalls));\n\t\t}\n\n\t\t// other categories\n\t\tProperties.own(ruleSpec).without('className', 'rules').forEach(function(catName) {\n\t\t\tvar src = '\\n\\'' + catName + '\\', {\\n',\n\t\t\t\tcategory = ruleSpec[catName],\n\t\t\t\tfunctionNames = Functions.own(category);\n\t\t\tfunctionNames.forEach(function(name) {\n\t\t\t\tsrc += Strings.format('\\t%s: %s,\\n', name, category[name])\n\t\t\t});\n\t\t\tsrc += '}';\n\t\t\tcategories.push(src);\n\t\t});\n\t\t\n\t\tcategories.push(this.visitingCategoryForNode(ruleSpec));\n\n\t\tvar body = categories.join(','),\n\t\t\tdef = Strings.format('%s.subclass(\\'%s\\', %s)', superclassName, className, body);\n\n\t\treturn def\n\t},\n\tgenTypeProperty: function(className) {\n\t\treturn 'is' + className;\n\t},\n\n\tcreateASTClassSourcesFromRules: function() {\n\t\tvar classDefs = this.customClasses();\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\tclassDefs.push(this.createASTClass(ruleSpec));\n\t\t}, this);\n\n\t\treturn classDefs.join('\\n\\n')\n\t},\n\tevalAndWriteClasses: function() {\n\t\tvar src = this.createASTClassSourcesFromRules();\n\t\tsrc += '\\n';\n\t\tsrc += this.abstractVisitorClassSource();\n\t\teval(src);\n\n\t\tvar baseName = 'Nodes',\n\t\t\tmoduleName = this.modulePath + 'generated.' + baseName,\n\t\t\tfileName = baseName + '.js',\n\t\t\tcontent = Strings.format('module(\\'%s\\').requires().toRun(function() {\\n%s\\n});', moduleName, src);\n\t\tthis.writeToFile(fileName, content);\n\t},\n\n},\n'visitor creation', {\n\n\tabstractVisitorClassSource: function() {\n\t\tvar categories = [this.visitingCategoryForAbstractVisitor()/*, this.doubleDispatchCategoryForVisitor()*/];\n\t\treturn Strings.format('Object.subclass(\\'%s\\', %s)', this.visitorClassName, categories.join(',\\n'));\n\t},\n\tvisitingCategoryForAbstractVisitor: function(ruleSpec) {\n\t\tvar src = '\\n\\'visiting\\', {\\n';\n\t\tsrc += '\\tvisit: function(node) { return node.accept(this) },\\n';\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\tsrc += Strings.format('\\tvisit%s: function(node) {},\\n', ruleSpec.className);\n\t\t});\n\t\tsrc += '\\n}'\n\t\treturn src;\n\t},\n\tdoubleDispatchCategoryForVisitor: function() {\n\t\t// new lively.ast.SourceGenerator().doubleDispatchCategoryForVisitor() \n\t\t// currently not used\n\t\tvar createVisitAndAcceptCalls = function(ruleSpec) {\n\t\t\tvar calls = [];\n\t\t\tcalls.push('\\t\\this.visit(node);')\n\t\t\tthis.forCollectionRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\t\tvar str = Strings.format('\\t\\tnode.%s.forEach(function(ea) { this.visit(ea) }, this);', ruleVarName);\n\t\t\t\tcalls.push(str)\n\t\t\t});\n\n\t\t\tthis.forSimpleRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\t\tvar str = Strings.format('\\t\\tthis.visit(node.%s);', ruleVarName);\n\t\t\t\tcalls.push(str);\n\t\t\t});\n\t\t\treturn calls.join('\\n')\n\n\t\t}.bind(this)\n\n\n\t\tvar src = '\\n\\'double dispatch\\', {\\n';\n\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\tsrc += Strings.format('\\taccept%s: function(node) {\\n%s\\n\\t},\\n', ruleSpec.className, createVisitAndAcceptCalls(ruleSpec));\n\t\t});\n\n\n\t\tsrc += '\\n}'\n\n\t\treturn src;\n\n\t},\n\n\n\tvisitingCategoryForNode: function(ruleSpec) {\n\t\tvar category = '\\'visiting\\', {\\n\\taccept: function(visitor) {\\n';\n\t\tcategory += '\\t\\treturn visitor.visit' + ruleSpec.className + '(this);';\n\t\tcategory += '\\n\\t},\\n}';\n\n\t\treturn category;\n\t},\n\n});\n\n\nObject.extend(Function.prototype, {\n\tast: function() {\n\t\tvar parseResult = lively.ast.Parser.parse(this.toString(), 'topLevel');\n\t\tif (!parseResult || Object.isString(parseResult))\n\t\t\treturn parseResult;\n\t\tparseResult = parseResult.children[0];\n\t\tif (parseResult.isVarDeclaration && parseResult.val.isFunction) {\n\t\t\tparseResult.val.setName(parseResult.name);\n\t\t\tparseResult.val.realFunction = this;\n\t\t\treturn parseResult.val;\n\t\t} else if (parseResult.isFunction) {\n\t\t\tparseResult.realFunction = this;\n\t\t}\n\t\treturn parseResult;\n\t},\n});\n\nlively.ast.Visitor.subclass('lively.ast.ClosureAnalyzer',\n'analyzing helper', {\n\tnewScope: function(optParentScope) {\n\t\treturn {\n\t\t\tboundVars: [],\n\t\t\tunboundVars: [],\n\t\t\tlocalUnboundVars: function() { return this.unboundVars.withoutAll(this.boundVars) },\n\t\t}\n\t},\n},\n'analyzing', {\n\tfindUnboundVariableNames: function(func) {\n\t\tvar ast = func.ast();\n\t\tthis.currentScope = this.newScope();\n\t\tthis.visit(ast);\n\t\treturn this.currentScope.localUnboundVars(); // FIXME unbound vars with nested scopes!\n\t},\n},\n'visiting', {\n\tvisitVariable: function(node) {\n\t\tthis.currentScope.unboundVars.push(node.name);\n\t},\n\tvisitVarDeclaration: function(node) {\n\t\tthis.currentScope.boundVars.push(node.name);\n\t\tthis.visitParts(node, ['val']);\n\t},\n\tvisitParts: function(node, parts) {\n\t\tfor (var i = 0; i < parts.length; i++)\n\t\t\tnode[parts[i]].accept(this)\n\t},\n\tvisitSequence: function(node) { node.children.invoke('accept', this) },\n\tvisitArrayLiteral: function(node) { node.elements.invoke('accept', this) },\n\tvisitObjectLiteral: function(node) { node.properties.invoke('accept', this) },\n\tvisitCond: function(node) { this.visitParts(node, ['condExpr', 'trueExpr', 'falseExpr']) },\n\tvisitIf: function(node) { this.visitCond(node) },\n\tvisitWhile: function(node) { this.visitParts(node, ['condExpr', 'body']) },\n\tvisitDoWhile: function(node) { this.visitParts(node, ['body', 'condExpr']) },\n\tvisitFor: function(node) { this.visitParts(node, ['init', 'condExpr', 'upd', 'body']) },\n\tvisitForIn: function(node) { this.visitParts(node, ['name', 'obj', 'body']) },\n\tvisitSet: function(node) { this.visitParts(node, ['left', 'right']) },\n\tvisitModifyingSet: function(node) { this.visitParts(node, ['left', 'right']) },\n\tvisitBinaryOp: function(node) { this.visitParts(node, ['left', 'right']) },\n\tvisitUnaryOp: function(node) { this.visitParts(node, ['expr']) },\n\tvisitPreOp: function(node) { this.visitParts(node, ['expr']) },\n\tvisitPostOp: function(node) { this.visitParts(node, ['expr']) },\n\tvisitGetSlot: function(node) { this.visitParts(node, ['slotName', 'obj']) },\n\tvisitReturn: function(node) { this.visitParts(node, ['expr']) },\n\tvisitWith: function(node) { this.visitParts(node, ['obj', 'body']) },\n\tvisitSend: function(node) { this.visitParts(node, ['recv']) },\n\tvisitCall: function(node) { this.visitParts(node, ['fn']) },\n\tvisitNew: function(node) { this.visitParts(node, ['clsExpr']) },\n\tvisitThrow: function(node) { this.visitParts(node, ['expr']) },\n\tvisitTryCatchFinally: function(node) { this.visitParts(node, ['trySeq', 'catchSeq', 'finallySeq']) },\n\tvisitFunction: function(node) { this.visitParts(node, ['body']) },\n\tvisitObjProperty: function(node) { this.visitParts(node, ['property']) },\n\tvisitSwitch: function(node) { this.visitParts(node, ['expr']) },\n\tvisitCase: function(node) { this.visitParts(node, ['condExpr', 'thenExpr']) },\n\tvisitDefault: function(node) { this.visitParts(node, ['defaultExpr']) },\n});\n\n}) // end of module\n","doNotSerialize":["$$targetURL"],"doNotCopyProperties":["$$targetURL"],"targetURL":{"__isSmartRef__":true,"id":828},"_rootNode":{"__isSmartRef__":true,"id":481},"Pane1Selection":{"__isSmartRef__":true,"id":488},"pane1Selection":{"__isSmartRef__":true,"id":488},"Pane2Selection":null,"pane2Selection":null,"Pane3Selection":null,"pane3Selection":null,"Pane4Selection":null,"pane4Selection":null,"Pane4Content":["-----"],"Pane3Content":["-----"],"Pane2Content":[{"__isSmartRef__":true,"id":697},{"__isSmartRef__":true,"id":699},{"__isSmartRef__":true,"id":701},{"__isSmartRef__":true,"id":703},{"__isSmartRef__":true,"id":705},{"__isSmartRef__":true,"id":707}],"Pane1Content":[{"__isSmartRef__":true,"id":478},{"__isSmartRef__":true,"id":651},{"__isSmartRef__":true,"id":652},{"__isSmartRef__":true,"id":653},{"__isSmartRef__":true,"id":654},{"__isSmartRef__":true,"id":655},{"__isSmartRef__":true,"id":656},{"__isSmartRef__":true,"id":657},{"__isSmartRef__":true,"id":658}],"view":{"__isSmartRef__":true,"id":201},"Pane1Menu":[["Add to world requirements"],["remove"],["reparse"],["-------"],["open in text editor"],["show versions"],["diff versions"]],"Pane2Menu":[["-------"],["add class"],["add object extension"],["add layer"],["open in text editor"],["show versions"],["diff versions"]],"Pane3Menu":[["-------"],["open in text editor"],["show versions"],["diff versions"]],"currentModuleName":"lively.ast.Parser","__LivelyClassName__":"lively.ide.SystemBrowser","__SourceModuleName__":"Global.lively.ide.SystemCodeBrowser"},"218":{"browser":{"__isSmartRef__":true,"id":217},"button":{"__isSmartRef__":true,"id":219},"__LivelyClassName__":"lively.ide.AddNewFileCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"219":{"submorphs":[{"__isSmartRef__":true,"id":220}],"scripts":[],"shape":{"__isSmartRef__":true,"id":232},"id":223,"renderContextTable":{"__isSmartRef__":true,"id":237},"eventHandler":{"__isSmartRef__":true,"id":238},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":239},"priorExtent":{"__isSmartRef__":true,"id":240},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":78},"lighterFill":{"__isSmartRef__":true,"id":241},"label":{"__isSmartRef__":true,"id":220},"command":{"__isSmartRef__":true,"id":218},"attributeConnections":[{"__isSmartRef__":true,"id":250},{"__isSmartRef__":true,"id":251}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":202},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"220":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":221},"id":224,"renderContextTable":{"__isSmartRef__":true,"id":226},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":227}],"eventHandler":{"__isSmartRef__":true,"id":229},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":230},"priorExtent":{"__isSmartRef__":true,"id":231},"_MaxTextWidth":117.14285714285714,"_MinTextWidth":117.14285714285714,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":219},"isLabel":true,"_HandStyle":"default","_Align":"center","eventsAreIgnored":true,"_PointerEvents":"none","__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"221":{"_Position":{"__isSmartRef__":true,"id":222},"renderContextTable":{"__isSmartRef__":true,"id":223},"_Extent":{"__isSmartRef__":true,"id":224},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":225},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"222":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"223":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"224":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"225":{"x":0,"y":4,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"226":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"227":{"style":{"__isSmartRef__":true,"id":228},"chunkOwner":{"__isSmartRef__":true,"id":220},"storedString":"Add module","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"228":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"229":{"morph":{"__isSmartRef__":true,"id":220},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"230":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"231":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"232":{"_Position":{"__isSmartRef__":true,"id":233},"renderContextTable":{"__isSmartRef__":true,"id":234},"_Extent":{"__isSmartRef__":true,"id":235},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":236},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":78},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"233":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"234":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"235":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"236":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"237":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"238":{"morph":{"__isSmartRef__":true,"id":219},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"239":{"x":0,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"240":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"241":{"stops":[{"__isSmartRef__":true,"id":242},{"__isSmartRef__":true,"id":244},{"__isSmartRef__":true,"id":246},{"__isSmartRef__":true,"id":248}],"vector":{"__isSmartRef__":true,"id":87},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"242":{"offset":0,"color":{"__isSmartRef__":true,"id":243}},"243":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"244":{"offset":0.4,"color":{"__isSmartRef__":true,"id":245}},"245":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"246":{"offset":0.6,"color":{"__isSmartRef__":true,"id":247}},"247":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"248":{"offset":1,"color":{"__isSmartRef__":true,"id":249}},"249":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"250":{"sourceObj":{"__isSmartRef__":true,"id":219},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":218},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"251":{"sourceObj":{"__isSmartRef__":true,"id":219},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":219},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":252},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"252":{"source":{"__isSmartRef__":true,"id":219},"target":{"__isSmartRef__":true,"id":219}},"253":{"browser":{"__isSmartRef__":true,"id":217},"button":{"__isSmartRef__":true,"id":254},"__LivelyClassName__":"lively.ide.AllModulesLoadCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"254":{"submorphs":[{"__isSmartRef__":true,"id":255}],"scripts":[],"shape":{"__isSmartRef__":true,"id":267},"id":225,"renderContextTable":{"__isSmartRef__":true,"id":272},"eventHandler":{"__isSmartRef__":true,"id":273},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":274},"priorExtent":{"__isSmartRef__":true,"id":275},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":78},"lighterFill":{"__isSmartRef__":true,"id":276},"label":{"__isSmartRef__":true,"id":255},"command":{"__isSmartRef__":true,"id":253},"attributeConnections":[{"__isSmartRef__":true,"id":285},{"__isSmartRef__":true,"id":286}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":202},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"255":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":256},"id":226,"renderContextTable":{"__isSmartRef__":true,"id":261},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":262}],"eventHandler":{"__isSmartRef__":true,"id":264},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":265},"priorExtent":{"__isSmartRef__":true,"id":266},"_MaxTextWidth":117.14285714285714,"_MinTextWidth":117.14285714285714,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":254},"isLabel":true,"_HandStyle":"default","_Align":"center","eventsAreIgnored":true,"_PointerEvents":"none","__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"256":{"_Position":{"__isSmartRef__":true,"id":257},"renderContextTable":{"__isSmartRef__":true,"id":258},"_Extent":{"__isSmartRef__":true,"id":259},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":260},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"257":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"258":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"259":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"260":{"x":0,"y":4,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"261":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"262":{"style":{"__isSmartRef__":true,"id":263},"chunkOwner":{"__isSmartRef__":true,"id":255},"storedString":"Load all","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"263":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"264":{"morph":{"__isSmartRef__":true,"id":255},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"265":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"266":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"267":{"_Position":{"__isSmartRef__":true,"id":268},"renderContextTable":{"__isSmartRef__":true,"id":269},"_Extent":{"__isSmartRef__":true,"id":270},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":271},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":78},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"268":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"269":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"270":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"271":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"272":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"273":{"morph":{"__isSmartRef__":true,"id":254},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"274":{"x":117.14285714285714,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"275":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"276":{"stops":[{"__isSmartRef__":true,"id":277},{"__isSmartRef__":true,"id":279},{"__isSmartRef__":true,"id":281},{"__isSmartRef__":true,"id":283}],"vector":{"__isSmartRef__":true,"id":87},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"277":{"offset":0,"color":{"__isSmartRef__":true,"id":278}},"278":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"279":{"offset":0.4,"color":{"__isSmartRef__":true,"id":280}},"280":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"281":{"offset":0.6,"color":{"__isSmartRef__":true,"id":282}},"282":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"283":{"offset":1,"color":{"__isSmartRef__":true,"id":284}},"284":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"285":{"sourceObj":{"__isSmartRef__":true,"id":254},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":253},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"286":{"sourceObj":{"__isSmartRef__":true,"id":254},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":254},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":287},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"287":{"source":{"__isSmartRef__":true,"id":254},"target":{"__isSmartRef__":true,"id":254}},"288":{"browser":{"__isSmartRef__":true,"id":217},"button":{"__isSmartRef__":true,"id":289},"__LivelyClassName__":"lively.ide.ShowLineNumbersCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"289":{"submorphs":[{"__isSmartRef__":true,"id":290}],"scripts":[],"shape":{"__isSmartRef__":true,"id":302},"id":227,"renderContextTable":{"__isSmartRef__":true,"id":307},"eventHandler":{"__isSmartRef__":true,"id":308},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":309},"priorExtent":{"__isSmartRef__":true,"id":310},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":78},"lighterFill":{"__isSmartRef__":true,"id":311},"label":{"__isSmartRef__":true,"id":290},"command":{"__isSmartRef__":true,"id":288},"attributeConnections":[{"__isSmartRef__":true,"id":320},{"__isSmartRef__":true,"id":321}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":202},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"290":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":291},"id":228,"renderContextTable":{"__isSmartRef__":true,"id":296},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":297}],"eventHandler":{"__isSmartRef__":true,"id":299},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":300},"priorExtent":{"__isSmartRef__":true,"id":301},"_MaxTextWidth":117.14285714285714,"_MinTextWidth":117.14285714285714,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":289},"isLabel":true,"_HandStyle":"default","_Align":"center","eventsAreIgnored":true,"_PointerEvents":"none","__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"291":{"_Position":{"__isSmartRef__":true,"id":292},"renderContextTable":{"__isSmartRef__":true,"id":293},"_Extent":{"__isSmartRef__":true,"id":294},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":295},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"292":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"293":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"294":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"295":{"x":0,"y":4,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"296":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"297":{"style":{"__isSmartRef__":true,"id":298},"chunkOwner":{"__isSmartRef__":true,"id":290},"storedString":"LineNo","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"298":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"299":{"morph":{"__isSmartRef__":true,"id":290},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"300":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"301":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"302":{"_Position":{"__isSmartRef__":true,"id":303},"renderContextTable":{"__isSmartRef__":true,"id":304},"_Extent":{"__isSmartRef__":true,"id":305},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":306},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":78},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"303":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"304":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"305":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"306":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"307":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"308":{"morph":{"__isSmartRef__":true,"id":289},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"309":{"x":234.28571428571428,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"310":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"311":{"stops":[{"__isSmartRef__":true,"id":312},{"__isSmartRef__":true,"id":314},{"__isSmartRef__":true,"id":316},{"__isSmartRef__":true,"id":318}],"vector":{"__isSmartRef__":true,"id":87},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"312":{"offset":0,"color":{"__isSmartRef__":true,"id":313}},"313":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"314":{"offset":0.4,"color":{"__isSmartRef__":true,"id":315}},"315":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"316":{"offset":0.6,"color":{"__isSmartRef__":true,"id":317}},"317":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"318":{"offset":1,"color":{"__isSmartRef__":true,"id":319}},"319":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"320":{"sourceObj":{"__isSmartRef__":true,"id":289},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":288},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"321":{"sourceObj":{"__isSmartRef__":true,"id":289},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":289},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":322},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"322":{"source":{"__isSmartRef__":true,"id":289},"target":{"__isSmartRef__":true,"id":289}},"323":{"browser":{"__isSmartRef__":true,"id":217},"button":{"__isSmartRef__":true,"id":324},"__LivelyClassName__":"lively.ide.ParserDebugCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"324":{"submorphs":[{"__isSmartRef__":true,"id":325}],"scripts":[],"shape":{"__isSmartRef__":true,"id":337},"id":229,"renderContextTable":{"__isSmartRef__":true,"id":342},"eventHandler":{"__isSmartRef__":true,"id":343},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":344},"priorExtent":{"__isSmartRef__":true,"id":345},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":78},"lighterFill":{"__isSmartRef__":true,"id":346},"label":{"__isSmartRef__":true,"id":325},"command":{"__isSmartRef__":true,"id":323},"attributeConnections":[{"__isSmartRef__":true,"id":355},{"__isSmartRef__":true,"id":356}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":202},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"325":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":326},"id":230,"renderContextTable":{"__isSmartRef__":true,"id":331},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":332}],"eventHandler":{"__isSmartRef__":true,"id":334},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":335},"priorExtent":{"__isSmartRef__":true,"id":336},"_MaxTextWidth":117.14285714285714,"_MinTextWidth":117.14285714285714,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":324},"isLabel":true,"_HandStyle":"default","_Align":"center","eventsAreIgnored":true,"_PointerEvents":"none","__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"326":{"_Position":{"__isSmartRef__":true,"id":327},"renderContextTable":{"__isSmartRef__":true,"id":328},"_Extent":{"__isSmartRef__":true,"id":329},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":330},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"327":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"328":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"329":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"330":{"x":0,"y":4,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"331":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"332":{"style":{"__isSmartRef__":true,"id":333},"chunkOwner":{"__isSmartRef__":true,"id":325},"storedString":"Dbg errors is off","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"333":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"334":{"morph":{"__isSmartRef__":true,"id":325},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"335":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"336":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"337":{"_Position":{"__isSmartRef__":true,"id":338},"renderContextTable":{"__isSmartRef__":true,"id":339},"_Extent":{"__isSmartRef__":true,"id":340},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":341},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":78},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"338":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"339":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"340":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"341":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"342":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"343":{"morph":{"__isSmartRef__":true,"id":324},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"344":{"x":351.42857142857144,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"345":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"346":{"stops":[{"__isSmartRef__":true,"id":347},{"__isSmartRef__":true,"id":349},{"__isSmartRef__":true,"id":351},{"__isSmartRef__":true,"id":353}],"vector":{"__isSmartRef__":true,"id":87},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"347":{"offset":0,"color":{"__isSmartRef__":true,"id":348}},"348":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"349":{"offset":0.4,"color":{"__isSmartRef__":true,"id":350}},"350":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"351":{"offset":0.6,"color":{"__isSmartRef__":true,"id":352}},"352":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"353":{"offset":1,"color":{"__isSmartRef__":true,"id":354}},"354":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"355":{"sourceObj":{"__isSmartRef__":true,"id":324},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":323},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"356":{"sourceObj":{"__isSmartRef__":true,"id":324},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":324},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":357},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"357":{"source":{"__isSmartRef__":true,"id":324},"target":{"__isSmartRef__":true,"id":324}},"358":{"browser":{"__isSmartRef__":true,"id":217},"button":{"__isSmartRef__":true,"id":359},"__LivelyClassName__":"lively.ide.EvaluateCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"359":{"submorphs":[{"__isSmartRef__":true,"id":360}],"scripts":[],"shape":{"__isSmartRef__":true,"id":372},"id":231,"renderContextTable":{"__isSmartRef__":true,"id":377},"eventHandler":{"__isSmartRef__":true,"id":378},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":379},"priorExtent":{"__isSmartRef__":true,"id":380},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":78},"lighterFill":{"__isSmartRef__":true,"id":381},"label":{"__isSmartRef__":true,"id":360},"command":{"__isSmartRef__":true,"id":358},"attributeConnections":[{"__isSmartRef__":true,"id":390},{"__isSmartRef__":true,"id":391}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":202},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"360":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":361},"id":232,"renderContextTable":{"__isSmartRef__":true,"id":366},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":367}],"eventHandler":{"__isSmartRef__":true,"id":369},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":370},"priorExtent":{"__isSmartRef__":true,"id":371},"_MaxTextWidth":117.14285714285714,"_MinTextWidth":117.14285714285714,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":359},"isLabel":true,"_HandStyle":"default","_Align":"center","eventsAreIgnored":true,"_PointerEvents":"none","__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"361":{"_Position":{"__isSmartRef__":true,"id":362},"renderContextTable":{"__isSmartRef__":true,"id":363},"_Extent":{"__isSmartRef__":true,"id":364},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":365},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"362":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"363":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"364":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"365":{"x":0,"y":4,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"366":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"367":{"style":{"__isSmartRef__":true,"id":368},"chunkOwner":{"__isSmartRef__":true,"id":360},"storedString":"Eval on","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"368":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"369":{"morph":{"__isSmartRef__":true,"id":360},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"370":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"371":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"372":{"_Position":{"__isSmartRef__":true,"id":373},"renderContextTable":{"__isSmartRef__":true,"id":374},"_Extent":{"__isSmartRef__":true,"id":375},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":376},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":78},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"373":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"374":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"375":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"376":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"377":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"378":{"morph":{"__isSmartRef__":true,"id":359},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"379":{"x":468.57142857142856,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"380":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"381":{"stops":[{"__isSmartRef__":true,"id":382},{"__isSmartRef__":true,"id":384},{"__isSmartRef__":true,"id":386},{"__isSmartRef__":true,"id":388}],"vector":{"__isSmartRef__":true,"id":87},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"382":{"offset":0,"color":{"__isSmartRef__":true,"id":383}},"383":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"384":{"offset":0.4,"color":{"__isSmartRef__":true,"id":385}},"385":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"386":{"offset":0.6,"color":{"__isSmartRef__":true,"id":387}},"387":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"388":{"offset":1,"color":{"__isSmartRef__":true,"id":389}},"389":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"390":{"sourceObj":{"__isSmartRef__":true,"id":359},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":358},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"391":{"sourceObj":{"__isSmartRef__":true,"id":359},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":359},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":392},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"392":{"source":{"__isSmartRef__":true,"id":359},"target":{"__isSmartRef__":true,"id":359}},"393":{"browser":{"__isSmartRef__":true,"id":217},"button":{"__isSmartRef__":true,"id":394},"__LivelyClassName__":"lively.ide.SortCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"394":{"submorphs":[{"__isSmartRef__":true,"id":395}],"scripts":[],"shape":{"__isSmartRef__":true,"id":407},"id":233,"renderContextTable":{"__isSmartRef__":true,"id":412},"eventHandler":{"__isSmartRef__":true,"id":413},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":414},"priorExtent":{"__isSmartRef__":true,"id":415},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":78},"lighterFill":{"__isSmartRef__":true,"id":416},"label":{"__isSmartRef__":true,"id":395},"command":{"__isSmartRef__":true,"id":393},"attributeConnections":[{"__isSmartRef__":true,"id":425},{"__isSmartRef__":true,"id":426}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":202},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"395":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":396},"id":234,"renderContextTable":{"__isSmartRef__":true,"id":401},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":402}],"eventHandler":{"__isSmartRef__":true,"id":404},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":405},"priorExtent":{"__isSmartRef__":true,"id":406},"_MaxTextWidth":117.14285714285714,"_MinTextWidth":117.14285714285714,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":394},"isLabel":true,"_HandStyle":"default","_Align":"center","eventsAreIgnored":true,"_PointerEvents":"none","__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"396":{"_Position":{"__isSmartRef__":true,"id":397},"renderContextTable":{"__isSmartRef__":true,"id":398},"_Extent":{"__isSmartRef__":true,"id":399},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":400},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"397":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"398":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"399":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"400":{"x":0,"y":4,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"401":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"402":{"style":{"__isSmartRef__":true,"id":403},"chunkOwner":{"__isSmartRef__":true,"id":395},"storedString":"Sort","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"403":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"404":{"morph":{"__isSmartRef__":true,"id":395},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"405":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"406":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"407":{"_Position":{"__isSmartRef__":true,"id":408},"renderContextTable":{"__isSmartRef__":true,"id":409},"_Extent":{"__isSmartRef__":true,"id":410},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":411},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":78},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"408":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"409":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"410":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"411":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"412":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"413":{"morph":{"__isSmartRef__":true,"id":394},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"414":{"x":585.7142857142857,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"415":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"416":{"stops":[{"__isSmartRef__":true,"id":417},{"__isSmartRef__":true,"id":419},{"__isSmartRef__":true,"id":421},{"__isSmartRef__":true,"id":423}],"vector":{"__isSmartRef__":true,"id":87},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"417":{"offset":0,"color":{"__isSmartRef__":true,"id":418}},"418":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"419":{"offset":0.4,"color":{"__isSmartRef__":true,"id":420}},"420":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"421":{"offset":0.6,"color":{"__isSmartRef__":true,"id":422}},"422":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"423":{"offset":1,"color":{"__isSmartRef__":true,"id":424}},"424":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"425":{"sourceObj":{"__isSmartRef__":true,"id":394},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":393},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"426":{"sourceObj":{"__isSmartRef__":true,"id":394},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":394},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":427},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"427":{"source":{"__isSmartRef__":true,"id":394},"target":{"__isSmartRef__":true,"id":394}},"428":{"browser":{"__isSmartRef__":true,"id":217},"button":{"__isSmartRef__":true,"id":429},"__LivelyClassName__":"lively.ide.ViewSourceCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"429":{"submorphs":[{"__isSmartRef__":true,"id":430}],"scripts":[],"shape":{"__isSmartRef__":true,"id":442},"id":235,"renderContextTable":{"__isSmartRef__":true,"id":447},"eventHandler":{"__isSmartRef__":true,"id":448},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":449},"priorExtent":{"__isSmartRef__":true,"id":450},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":78},"lighterFill":{"__isSmartRef__":true,"id":451},"label":{"__isSmartRef__":true,"id":430},"command":{"__isSmartRef__":true,"id":428},"attributeConnections":[{"__isSmartRef__":true,"id":460},{"__isSmartRef__":true,"id":461}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":202},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"430":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":431},"id":236,"renderContextTable":{"__isSmartRef__":true,"id":436},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":437}],"eventHandler":{"__isSmartRef__":true,"id":439},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":440},"priorExtent":{"__isSmartRef__":true,"id":441},"_MaxTextWidth":117.14285714285714,"_MinTextWidth":117.14285714285714,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":429},"isLabel":true,"_HandStyle":"default","_Align":"center","eventsAreIgnored":true,"_PointerEvents":"none","__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"431":{"_Position":{"__isSmartRef__":true,"id":432},"renderContextTable":{"__isSmartRef__":true,"id":433},"_Extent":{"__isSmartRef__":true,"id":434},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":435},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"432":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"433":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"434":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"435":{"x":0,"y":4,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"436":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"437":{"style":{"__isSmartRef__":true,"id":438},"chunkOwner":{"__isSmartRef__":true,"id":430},"storedString":"View as...","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"438":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"439":{"morph":{"__isSmartRef__":true,"id":430},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"440":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"441":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"442":{"_Position":{"__isSmartRef__":true,"id":443},"renderContextTable":{"__isSmartRef__":true,"id":444},"_Extent":{"__isSmartRef__":true,"id":445},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":446},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":78},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"443":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"444":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"445":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"446":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"447":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"448":{"morph":{"__isSmartRef__":true,"id":429},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"449":{"x":702.8571428571429,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"450":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"451":{"stops":[{"__isSmartRef__":true,"id":452},{"__isSmartRef__":true,"id":454},{"__isSmartRef__":true,"id":456},{"__isSmartRef__":true,"id":458}],"vector":{"__isSmartRef__":true,"id":87},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"452":{"offset":0,"color":{"__isSmartRef__":true,"id":453}},"453":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"454":{"offset":0.4,"color":{"__isSmartRef__":true,"id":455}},"455":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"456":{"offset":0.6,"color":{"__isSmartRef__":true,"id":457}},"457":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"458":{"offset":1,"color":{"__isSmartRef__":true,"id":459}},"459":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"460":{"sourceObj":{"__isSmartRef__":true,"id":429},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":428},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"461":{"sourceObj":{"__isSmartRef__":true,"id":429},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":429},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":462},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"462":{"source":{"__isSmartRef__":true,"id":429},"target":{"__isSmartRef__":true,"id":429}},"463":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"464":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"465":{"attributes":["isClassNode","isGrammarNode","isChangeNode","isFunctionNode","isObjectNode"],"__LivelyClassName__":"lively.ide.NodeTypeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"466":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"467":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"468":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"469":{"sourceObj":{"__isSmartRef__":true,"id":217},"sourceAttrName":"setPane1Content","targetObj":{"__isSmartRef__":true,"id":470},"targetMethodName":"updateList","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":687},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"470":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":471},"id":217,"renderContextTable":{"__isSmartRef__":true,"id":477},"itemList":[{"__isSmartRef__":true,"id":478},{"__isSmartRef__":true,"id":651},{"__isSmartRef__":true,"id":652},{"__isSmartRef__":true,"id":653},{"__isSmartRef__":true,"id":654},{"__isSmartRef__":true,"id":655},{"__isSmartRef__":true,"id":656},{"__isSmartRef__":true,"id":657},{"__isSmartRef__":true,"id":658}],"_FontFamily":"Helvetica","eventHandler":{"__isSmartRef__":true,"id":659},"droppingEnabled":true,"halosEnabled":true,"_ClipMode":"auto","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":660},"selectedLineNo":5,"selectOnMove":false,"owner":{"__isSmartRef__":true,"id":202},"attributeConnections":[{"__isSmartRef__":true,"id":661},{"__isSmartRef__":true,"id":666},{"__isSmartRef__":true,"id":668},{"__isSmartRef__":true,"id":670}],"doNotSerialize":["$$selection"],"doNotCopyProperties":["$$selection"],"selection":{"__isSmartRef__":true,"id":488},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":672},"__LivelyClassName__":"lively.morphic.List","__SourceModuleName__":"Global.lively.morphic.Core"},"471":{"_Position":{"__isSmartRef__":true,"id":472},"renderContextTable":{"__isSmartRef__":true,"id":473},"_Extent":{"__isSmartRef__":true,"id":474},"_Padding":{"__isSmartRef__":true,"id":475},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":{"__isSmartRef__":true,"id":476},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"472":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"473":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"474":{"x":205,"y":192.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"475":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"476":{"r":0.95,"g":0.95,"b":0.95,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"477":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateListContent":"updateListContentHTML","resizeList":"resizeListHTML","getItemIndexFromEvent":"getItemIndexFromEventHTML","getListExtent":"getListExtentHTML","setSize":"setSizeHTML","renderAsDropDownList":"renderAsDropDownListHTML","setFontSize":"setFontSizeHTML","setFontFamily":"setFontFamilyHTML","getSelectedIndexes":"getSelectedIndexesHTML","enableMultipleSelections":"enableMultipleSelectionsHTML","selectAllAt":"selectAllAtHTML","clearSelections":"clearSelectionsHTML","deselectAt":"deselectAtHTML"},"478":{"isListItem":true,"string":"generated/","value":{"__isSmartRef__":true,"id":479}},"479":{"target":{"__isSmartRef__":true,"id":480},"browser":{"__isSmartRef__":true,"id":217},"parent":{"__isSmartRef__":true,"id":481},"localName":"generated/","__LivelyClassName__":"lively.ide.NamespaceNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"480":{"protocol":"http:","hostname":"lively-kernel.org","pathname":"/repository/webwerkstatt/lively.ast/generated/","__LivelyClassName__":"URL","__SourceModuleName__":"Global.lively.Network"},"481":{"target":{"__isSmartRef__":true,"id":482},"browser":{"__isSmartRef__":true,"id":217},"parent":null,"allFiles":["lively.ast/LivelyJSParser.ometa","lively.ast/Parser.js","lively.ast/LivelyJSParser.js","lively.ast/StackReification.js","lively.ast/Tests.js","lively.ast/Interpreter.js"],"subNamespacePaths":[{"__isSmartRef__":true,"id":480}],"parentNamespacePath":{"__isSmartRef__":true,"id":483},"_childNodes":[{"__isSmartRef__":true,"id":479},{"__isSmartRef__":true,"id":484},{"__isSmartRef__":true,"id":485},{"__isSmartRef__":true,"id":486},{"__isSmartRef__":true,"id":487},{"__isSmartRef__":true,"id":488},{"__isSmartRef__":true,"id":647},{"__isSmartRef__":true,"id":648},{"__isSmartRef__":true,"id":649}],"__LivelyClassName__":"lively.ide.SourceControlNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"482":{"__LivelyClassName__":"AnotherSourceDatabase","__SourceModuleName__":"Global.lively.ide.SourceDatabase"},"483":{"protocol":"http:","hostname":"lively-kernel.org","pathname":"/repository/webwerkstatt/lively.ast/../","__LivelyClassName__":"URL","__SourceModuleName__":"Global.lively.Network"},"484":{"target":{"__isSmartRef__":true,"id":483},"browser":{"__isSmartRef__":true,"id":217},"parent":{"__isSmartRef__":true,"id":481},"localName":"../","__LivelyClassName__":"lively.ide.NamespaceNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"485":{"browser":{"__isSmartRef__":true,"id":217},"parent":{"__isSmartRef__":true,"id":481},"moduleName":"lively.ast/Interpreter.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"486":{"browser":{"__isSmartRef__":true,"id":217},"parent":{"__isSmartRef__":true,"id":481},"moduleName":"lively.ast/LivelyJSParser.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"487":{"browser":{"__isSmartRef__":true,"id":217},"parent":{"__isSmartRef__":true,"id":481},"moduleName":"lively.ast/LivelyJSParser.ometa","showAll":false,"__LivelyClassName__":"lively.ide.CompleteOmetaFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"488":{"target":{"__isSmartRef__":true,"id":489},"browser":{"__isSmartRef__":true,"id":217},"parent":{"__isSmartRef__":true,"id":481},"moduleName":"lively.ast/Parser.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"489":{"name":"lively.ast.Parser","type":"moduleDef","startIndex":1136,"stopIndex":38300,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":490},{"__isSmartRef__":true,"id":491},{"__isSmartRef__":true,"id":496},{"__isSmartRef__":true,"id":497},{"__isSmartRef__":true,"id":503},{"__isSmartRef__":true,"id":504},{"__isSmartRef__":true,"id":536},{"__isSmartRef__":true,"id":604},{"__isSmartRef__":true,"id":605},{"__isSmartRef__":true,"id":608},{"__isSmartRef__":true,"id":609},{"__isSmartRef__":true,"id":646}],"sourceControl":{"__isSmartRef__":true,"id":482},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"490":{"name":null,"type":"comment","startIndex":1312,"stopIndex":1313,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"491":{"name":"LivelyJSParser","type":"klassExtensionDef","startIndex":1314,"stopIndex":1886,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":492},{"__isSmartRef__":true,"id":494},{"__isSmartRef__":true,"id":495}],"sourceControl":{"__isSmartRef__":true,"id":482},"categories":[{"__isSmartRef__":true,"id":493}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"492":{"name":"hexDigits","type":"propertyDef","startIndex":1346,"stopIndex":1376,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":true,"category":{"__isSmartRef__":true,"id":493},"className":"LivelyJSParser","_owner":{"__isSmartRef__":true,"id":491},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"493":{"name":"default category","type":"categoryDef","startIndex":1344,"stopIndex":1883,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":492},{"__isSmartRef__":true,"id":494},{"__isSmartRef__":true,"id":495}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"494":{"name":"keywords","type":"propertyDef","startIndex":1378,"stopIndex":1814,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":true,"category":{"__isSmartRef__":true,"id":493},"className":"LivelyJSParser","_owner":{"__isSmartRef__":true,"id":491},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"495":{"name":"_isKeyword","type":"propertyDef","startIndex":1816,"stopIndex":1881,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":true,"category":{"__isSmartRef__":true,"id":493},"className":"LivelyJSParser","_owner":{"__isSmartRef__":true,"id":491},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"496":{"name":null,"type":"comment","startIndex":1887,"stopIndex":1887,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"497":{"name":"lively.ast.Parser","type":"klassExtensionDef","startIndex":1888,"stopIndex":2777,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":498},{"__isSmartRef__":true,"id":500},{"__isSmartRef__":true,"id":501},{"__isSmartRef__":true,"id":502}],"sourceControl":{"__isSmartRef__":true,"id":482},"categories":[{"__isSmartRef__":true,"id":499}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"498":{"name":"jsParser","type":"propertyDef","startIndex":1923,"stopIndex":1948,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":true,"category":{"__isSmartRef__":true,"id":499},"className":"lively.ast.Parser","_owner":{"__isSmartRef__":true,"id":497},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"499":{"name":"default category","type":"categoryDef","startIndex":1921,"stopIndex":2774,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":498},{"__isSmartRef__":true,"id":500},{"__isSmartRef__":true,"id":501},{"__isSmartRef__":true,"id":502}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"500":{"name":"astTranslator","type":"propertyDef","startIndex":1950,"stopIndex":1978,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":true,"category":{"__isSmartRef__":true,"id":499},"className":"lively.ast.Parser","_owner":{"__isSmartRef__":true,"id":497},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"501":{"name":"basicParse","type":"propertyDef","startIndex":1980,"stopIndex":2684,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":true,"category":{"__isSmartRef__":true,"id":499},"className":"lively.ast.Parser","_owner":{"__isSmartRef__":true,"id":497},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"502":{"name":"parse","type":"propertyDef","startIndex":2687,"stopIndex":2772,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":true,"category":{"__isSmartRef__":true,"id":499},"className":"lively.ast.Parser","_owner":{"__isSmartRef__":true,"id":497},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"503":{"name":null,"type":"comment","startIndex":2778,"stopIndex":2778,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"504":{"name":"lively.ast.Node","type":"klassExtensionDef","startIndex":2779,"stopIndex":8777,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":505},{"__isSmartRef__":true,"id":507},{"__isSmartRef__":true,"id":508},{"__isSmartRef__":true,"id":509},{"__isSmartRef__":true,"id":510},{"__isSmartRef__":true,"id":511},{"__isSmartRef__":true,"id":512},{"__isSmartRef__":true,"id":513},{"__isSmartRef__":true,"id":514},{"__isSmartRef__":true,"id":516},{"__isSmartRef__":true,"id":517},{"__isSmartRef__":true,"id":519},{"__isSmartRef__":true,"id":520},{"__isSmartRef__":true,"id":521},{"__isSmartRef__":true,"id":522},{"__isSmartRef__":true,"id":523},{"__isSmartRef__":true,"id":524},{"__isSmartRef__":true,"id":526},{"__isSmartRef__":true,"id":527},{"__isSmartRef__":true,"id":528},{"__isSmartRef__":true,"id":530},{"__isSmartRef__":true,"id":532},{"__isSmartRef__":true,"id":533},{"__isSmartRef__":true,"id":534},{"__isSmartRef__":true,"id":535}],"sourceControl":{"__isSmartRef__":true,"id":482},"categories":[{"__isSmartRef__":true,"id":506},{"__isSmartRef__":true,"id":515},{"__isSmartRef__":true,"id":518},{"__isSmartRef__":true,"id":525},{"__isSmartRef__":true,"id":529},{"__isSmartRef__":true,"id":531}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"505":{"name":"setParent","type":"propertyDef","startIndex":2822,"stopIndex":2891,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":506},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"506":{"name":"accessing","type":"categoryDef","startIndex":2807,"stopIndex":3848,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":505},{"__isSmartRef__":true,"id":507},{"__isSmartRef__":true,"id":508},{"__isSmartRef__":true,"id":509},{"__isSmartRef__":true,"id":510},{"__isSmartRef__":true,"id":511},{"__isSmartRef__":true,"id":512},{"__isSmartRef__":true,"id":513}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"507":{"name":"getParent","type":"propertyDef","startIndex":2893,"stopIndex":2949,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":506},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"508":{"name":"hasParent","type":"propertyDef","startIndex":2951,"stopIndex":3020,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":506},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"509":{"name":"parentSequence","type":"propertyDef","startIndex":3022,"stopIndex":3118,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":506},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"510":{"name":"parentFunction","type":"propertyDef","startIndex":3120,"stopIndex":3216,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":506},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"511":{"name":"astIndex","type":"propertyDef","startIndex":3218,"stopIndex":3450,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":506},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"512":{"name":"nodeForAstIndex","type":"propertyDef","startIndex":3452,"stopIndex":3549,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":506},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"513":{"name":"nextStatement","type":"propertyDef","startIndex":3551,"stopIndex":3843,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":506},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"514":{"name":"isASTNode","type":"propertyDef","startIndex":3863,"stopIndex":3879,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":515},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"515":{"name":"testing","type":"categoryDef","startIndex":3850,"stopIndex":3972,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":514},{"__isSmartRef__":true,"id":516}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"516":{"name":"isUndefined","type":"propertyDef","startIndex":3881,"stopIndex":3969,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":515},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"517":{"name":"withAllChildNodesDo","type":"propertyDef","startIndex":3991,"stopIndex":4432,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":518},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"518":{"name":"enumerating","type":"categoryDef","startIndex":3974,"stopIndex":5972,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":517},{"__isSmartRef__":true,"id":519},{"__isSmartRef__":true,"id":520},{"__isSmartRef__":true,"id":521},{"__isSmartRef__":true,"id":522},{"__isSmartRef__":true,"id":523}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"519":{"name":"withAllChildNodesDoPostOrder","type":"propertyDef","startIndex":4434,"stopIndex":4968,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":518},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"520":{"name":"doForAllChildNodes","type":"propertyDef","startIndex":4971,"stopIndex":5316,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":518},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"521":{"name":"nodesMatching","type":"propertyDef","startIndex":5318,"stopIndex":5561,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":518},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"522":{"name":"linearlyListNodes","type":"propertyDef","startIndex":5563,"stopIndex":5706,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":518},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"523":{"name":"linearlyListNodesWithoutNestedFunctions","type":"propertyDef","startIndex":5708,"stopIndex":5968,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":518},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"524":{"name":"replaceNodesMatching","type":"propertyDef","startIndex":5989,"stopIndex":6635,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":525},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"525":{"name":"replacing","type":"categoryDef","startIndex":5974,"stopIndex":7368,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":524},{"__isSmartRef__":true,"id":526},{"__isSmartRef__":true,"id":527}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"526":{"name":"replaceWith","type":"propertyDef","startIndex":6637,"stopIndex":6854,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":525},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"527":{"name":"replaceChildNode","type":"propertyDef","startIndex":6856,"stopIndex":7363,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":525},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"528":{"name":"eval","type":"propertyDef","startIndex":7386,"stopIndex":7598,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":529},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"529":{"name":"evaluation","type":"categoryDef","startIndex":7370,"stopIndex":7601,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":528}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"530":{"name":"error","type":"propertyDef","startIndex":7618,"stopIndex":7664,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":531},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"531":{"name":"debugging","type":"categoryDef","startIndex":7603,"stopIndex":8774,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":530},{"__isSmartRef__":true,"id":532},{"__isSmartRef__":true,"id":533},{"__isSmartRef__":true,"id":534},{"__isSmartRef__":true,"id":535}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"532":{"name":"indent","type":"propertyDef","startIndex":7666,"stopIndex":7732,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":531},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"533":{"name":"toString","type":"propertyDef","startIndex":7734,"stopIndex":7788,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":531},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"534":{"name":"printTree","type":"propertyDef","startIndex":7790,"stopIndex":8194,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":531},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"535":{"name":"printConstructorCall","type":"propertyDef","startIndex":8196,"stopIndex":8771,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":531},"className":"lively.ast.Node","_owner":{"__isSmartRef__":true,"id":504},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"536":{"name":"lively.ast.SourceGenerator","type":"klassDef","startIndex":8778,"stopIndex":34831,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":537},{"__isSmartRef__":true,"id":539},{"__isSmartRef__":true,"id":540},{"__isSmartRef__":true,"id":541},{"__isSmartRef__":true,"id":542},{"__isSmartRef__":true,"id":543},{"__isSmartRef__":true,"id":544},{"__isSmartRef__":true,"id":546},{"__isSmartRef__":true,"id":547},{"__isSmartRef__":true,"id":548},{"__isSmartRef__":true,"id":549},{"__isSmartRef__":true,"id":550},{"__isSmartRef__":true,"id":551},{"__isSmartRef__":true,"id":552},{"__isSmartRef__":true,"id":553},{"__isSmartRef__":true,"id":554},{"__isSmartRef__":true,"id":555},{"__isSmartRef__":true,"id":556},{"__isSmartRef__":true,"id":557},{"__isSmartRef__":true,"id":558},{"__isSmartRef__":true,"id":559},{"__isSmartRef__":true,"id":560},{"__isSmartRef__":true,"id":561},{"__isSmartRef__":true,"id":562},{"__isSmartRef__":true,"id":563},{"__isSmartRef__":true,"id":564},{"__isSmartRef__":true,"id":565},{"__isSmartRef__":true,"id":566},{"__isSmartRef__":true,"id":567},{"__isSmartRef__":true,"id":568},{"__isSmartRef__":true,"id":569},{"__isSmartRef__":true,"id":570},{"__isSmartRef__":true,"id":571},{"__isSmartRef__":true,"id":572},{"__isSmartRef__":true,"id":573},{"__isSmartRef__":true,"id":574},{"__isSmartRef__":true,"id":575},{"__isSmartRef__":true,"id":576},{"__isSmartRef__":true,"id":577},{"__isSmartRef__":true,"id":578},{"__isSmartRef__":true,"id":579},{"__isSmartRef__":true,"id":580},{"__isSmartRef__":true,"id":581},{"__isSmartRef__":true,"id":583},{"__isSmartRef__":true,"id":584},{"__isSmartRef__":true,"id":585},{"__isSmartRef__":true,"id":587},{"__isSmartRef__":true,"id":589},{"__isSmartRef__":true,"id":590},{"__isSmartRef__":true,"id":591},{"__isSmartRef__":true,"id":592},{"__isSmartRef__":true,"id":594},{"__isSmartRef__":true,"id":595},{"__isSmartRef__":true,"id":596},{"__isSmartRef__":true,"id":597},{"__isSmartRef__":true,"id":598},{"__isSmartRef__":true,"id":599},{"__isSmartRef__":true,"id":601},{"__isSmartRef__":true,"id":602},{"__isSmartRef__":true,"id":603}],"sourceControl":{"__isSmartRef__":true,"id":482},"superclassName":"Object","categories":[{"__isSmartRef__":true,"id":538},{"__isSmartRef__":true,"id":545},{"__isSmartRef__":true,"id":582},{"__isSmartRef__":true,"id":586},{"__isSmartRef__":true,"id":588},{"__isSmartRef__":true,"id":593},{"__isSmartRef__":true,"id":600}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"537":{"name":"customRules","type":"propertyDef","startIndex":9048,"stopIndex":9121,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":538},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"538":{"name":"settings","type":"categoryDef","startIndex":9034,"stopIndex":9527,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":537},{"__isSmartRef__":true,"id":539},{"__isSmartRef__":true,"id":540},{"__isSmartRef__":true,"id":541},{"__isSmartRef__":true,"id":542},{"__isSmartRef__":true,"id":543}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"539":{"name":"customClasses","type":"propertyDef","startIndex":9123,"stopIndex":9215,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":538},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"540":{"name":"translatorRules","type":"propertyDef","startIndex":9218,"stopIndex":9416,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":538},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"541":{"name":"modulePath","type":"propertyDef","startIndex":9418,"stopIndex":9444,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":538},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"542":{"name":"rootNodeClassName","type":"propertyDef","startIndex":9446,"stopIndex":9483,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":538},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"543":{"name":"visitorClassName","type":"propertyDef","startIndex":9485,"stopIndex":9524,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":538},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"544":{"name":"begin","type":"propertyDef","startIndex":9551,"stopIndex":10645,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"545":{"name":"translator rules","type":"categoryDef","startIndex":9529,"stopIndex":27719,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":544},{"__isSmartRef__":true,"id":546},{"__isSmartRef__":true,"id":547},{"__isSmartRef__":true,"id":548},{"__isSmartRef__":true,"id":549},{"__isSmartRef__":true,"id":550},{"__isSmartRef__":true,"id":551},{"__isSmartRef__":true,"id":552},{"__isSmartRef__":true,"id":553},{"__isSmartRef__":true,"id":554},{"__isSmartRef__":true,"id":555},{"__isSmartRef__":true,"id":556},{"__isSmartRef__":true,"id":557},{"__isSmartRef__":true,"id":558},{"__isSmartRef__":true,"id":559},{"__isSmartRef__":true,"id":560},{"__isSmartRef__":true,"id":561},{"__isSmartRef__":true,"id":562},{"__isSmartRef__":true,"id":563},{"__isSmartRef__":true,"id":564},{"__isSmartRef__":true,"id":565},{"__isSmartRef__":true,"id":566},{"__isSmartRef__":true,"id":567},{"__isSmartRef__":true,"id":568},{"__isSmartRef__":true,"id":569},{"__isSmartRef__":true,"id":570},{"__isSmartRef__":true,"id":571},{"__isSmartRef__":true,"id":572},{"__isSmartRef__":true,"id":573},{"__isSmartRef__":true,"id":574},{"__isSmartRef__":true,"id":575},{"__isSmartRef__":true,"id":576},{"__isSmartRef__":true,"id":577},{"__isSmartRef__":true,"id":578},{"__isSmartRef__":true,"id":579},{"__isSmartRef__":true,"id":580}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"546":{"name":"number","type":"propertyDef","startIndex":10647,"stopIndex":10998,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"547":{"name":"string","type":"propertyDef","startIndex":11000,"stopIndex":11365,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"548":{"name":"condExpr","type":"propertyDef","startIndex":11367,"stopIndex":11952,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"549":{"name":"if","type":"propertyDef","startIndex":11954,"stopIndex":13194,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"550":{"name":"while","type":"propertyDef","startIndex":13196,"stopIndex":13680,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"551":{"name":"doWhile","type":"propertyDef","startIndex":13682,"stopIndex":14179,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"552":{"name":"for","type":"propertyDef","startIndex":14181,"stopIndex":14790,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"553":{"name":"forIn","type":"propertyDef","startIndex":14822,"stopIndex":15360,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"554":{"name":"set","type":"propertyDef","startIndex":15362,"stopIndex":15791,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"555":{"name":"mset","type":"propertyDef","startIndex":15793,"stopIndex":16293,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"556":{"name":"binop","type":"propertyDef","startIndex":16295,"stopIndex":16791,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"557":{"name":"unop","type":"propertyDef","startIndex":16793,"stopIndex":17207,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"558":{"name":"preop","type":"propertyDef","startIndex":17209,"stopIndex":17620,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"559":{"name":"postop","type":"propertyDef","startIndex":17622,"stopIndex":18033,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"560":{"name":"this","type":"propertyDef","startIndex":18035,"stopIndex":18310,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"561":{"name":"get","type":"propertyDef","startIndex":18312,"stopIndex":18660,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"562":{"name":"getp","type":"propertyDef","startIndex":18662,"stopIndex":19194,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"563":{"name":"break","type":"propertyDef","startIndex":19196,"stopIndex":19416,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"564":{"name":"continue","type":"propertyDef","startIndex":19418,"stopIndex":19647,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"565":{"name":"arr","type":"propertyDef","startIndex":19649,"stopIndex":20062,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"566":{"name":"return","type":"propertyDef","startIndex":20064,"stopIndex":20436,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"567":{"name":"with","type":"propertyDef","startIndex":20438,"stopIndex":20878,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"568":{"name":"send","type":"propertyDef","startIndex":20880,"stopIndex":21569,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"569":{"name":"call","type":"propertyDef","startIndex":21571,"stopIndex":22111,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"570":{"name":"new","type":"propertyDef","startIndex":22113,"stopIndex":22400,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"571":{"name":"var","type":"propertyDef","startIndex":22402,"stopIndex":22857,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"572":{"name":"throw","type":"propertyDef","startIndex":22859,"stopIndex":23228,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"573":{"name":"try","type":"propertyDef","startIndex":23230,"stopIndex":24190,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"574":{"name":"func","type":"propertyDef","startIndex":24192,"stopIndex":25010,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"575":{"name":"json","type":"propertyDef","startIndex":25012,"stopIndex":25445,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"576":{"name":"binding","type":"propertyDef","startIndex":25447,"stopIndex":25917,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"577":{"name":"switch","type":"propertyDef","startIndex":25919,"stopIndex":26420,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"578":{"name":"case","type":"propertyDef","startIndex":26422,"stopIndex":26900,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"579":{"name":"default","type":"propertyDef","startIndex":26902,"stopIndex":27316,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"580":{"name":"regex","type":"propertyDef","startIndex":27318,"stopIndex":27716,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":545},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"581":{"name":"rulesReturningSomething","type":"propertyDef","startIndex":27738,"stopIndex":27918,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":582},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"582":{"name":"rule helper","type":"categoryDef","startIndex":27721,"stopIndex":28673,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":581},{"__isSmartRef__":true,"id":583},{"__isSmartRef__":true,"id":584}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"583":{"name":"forCollectionRulesDo","type":"propertyDef","startIndex":27920,"stopIndex":28275,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":582},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"584":{"name":"forSimpleRulesDo","type":"propertyDef","startIndex":28277,"stopIndex":28670,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":582},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"585":{"name":"writeToFile","type":"propertyDef","startIndex":28694,"stopIndex":28913,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":586},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"586":{"name":"file handling","type":"categoryDef","startIndex":28675,"stopIndex":28916,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":585}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"587":{"name":"createRule","type":"propertyDef","startIndex":28937,"stopIndex":29352,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":588},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"588":{"name":"rule creation","type":"categoryDef","startIndex":28918,"stopIndex":30155,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":587},{"__isSmartRef__":true,"id":589},{"__isSmartRef__":true,"id":590},{"__isSmartRef__":true,"id":591}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"589":{"name":"argsFromRules","type":"propertyDef","startIndex":29354,"stopIndex":29541,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":588},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"590":{"name":"createJSTranslatorSource","type":"propertyDef","startIndex":29544,"stopIndex":29939,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":588},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"591":{"name":"writeAndEvalTranslator","type":"propertyDef","startIndex":29941,"stopIndex":30150,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":588},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"592":{"name":"assignmentsFromArgs","type":"propertyDef","startIndex":30177,"stopIndex":30335,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":593},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"593":{"name":"class creation","type":"categoryDef","startIndex":30157,"stopIndex":32986,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":592},{"__isSmartRef__":true,"id":594},{"__isSmartRef__":true,"id":595},{"__isSmartRef__":true,"id":596},{"__isSmartRef__":true,"id":597},{"__isSmartRef__":true,"id":598}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"594":{"name":"parentCallsFromRules","type":"propertyDef","startIndex":30337,"stopIndex":30911,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":593},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"595":{"name":"createASTClass","type":"propertyDef","startIndex":30913,"stopIndex":32228,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":593},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"596":{"name":"genTypeProperty","type":"propertyDef","startIndex":32230,"stopIndex":32299,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":593},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"597":{"name":"createASTClassSourcesFromRules","type":"propertyDef","startIndex":32302,"stopIndex":32560,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":593},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"598":{"name":"evalAndWriteClasses","type":"propertyDef","startIndex":32562,"stopIndex":32982,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":593},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"599":{"name":"abstractVisitorClassSource","type":"propertyDef","startIndex":33011,"stopIndex":33267,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":600},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"600":{"name":"visitor creation","type":"categoryDef","startIndex":32988,"stopIndex":34828,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":599},{"__isSmartRef__":true,"id":601},{"__isSmartRef__":true,"id":602},{"__isSmartRef__":true,"id":603}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"601":{"name":"visitingCategoryForAbstractVisitor","type":"propertyDef","startIndex":33269,"stopIndex":33623,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":600},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"602":{"name":"doubleDispatchCategoryForVisitor","type":"propertyDef","startIndex":33625,"stopIndex":34581,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":600},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"603":{"name":"visitingCategoryForNode","type":"propertyDef","startIndex":34585,"stopIndex":34825,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":600},"className":"lively.ast.SourceGenerator","_owner":{"__isSmartRef__":true,"id":536},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"604":{"name":null,"type":"comment","startIndex":34832,"stopIndex":34833,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"605":{"name":"Function.prototype","type":"klassExtensionDef","startIndex":34834,"stopIndex":35368,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":606}],"sourceControl":{"__isSmartRef__":true,"id":482},"categories":[{"__isSmartRef__":true,"id":607}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"606":{"name":"ast","type":"propertyDef","startIndex":34870,"stopIndex":35363,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":true,"category":{"__isSmartRef__":true,"id":607},"className":"Function.prototype","_owner":{"__isSmartRef__":true,"id":605},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"607":{"name":"default category","type":"categoryDef","startIndex":34868,"stopIndex":35365,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":606}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"608":{"name":null,"type":"comment","startIndex":35369,"stopIndex":35369,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"609":{"name":"lively.ast.ClosureAnalyzer","type":"klassDef","startIndex":35370,"stopIndex":38279,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":610},{"__isSmartRef__":true,"id":612},{"__isSmartRef__":true,"id":614},{"__isSmartRef__":true,"id":616},{"__isSmartRef__":true,"id":617},{"__isSmartRef__":true,"id":618},{"__isSmartRef__":true,"id":619},{"__isSmartRef__":true,"id":620},{"__isSmartRef__":true,"id":621},{"__isSmartRef__":true,"id":622},{"__isSmartRef__":true,"id":623},{"__isSmartRef__":true,"id":624},{"__isSmartRef__":true,"id":625},{"__isSmartRef__":true,"id":626},{"__isSmartRef__":true,"id":627},{"__isSmartRef__":true,"id":628},{"__isSmartRef__":true,"id":629},{"__isSmartRef__":true,"id":630},{"__isSmartRef__":true,"id":631},{"__isSmartRef__":true,"id":632},{"__isSmartRef__":true,"id":633},{"__isSmartRef__":true,"id":634},{"__isSmartRef__":true,"id":635},{"__isSmartRef__":true,"id":636},{"__isSmartRef__":true,"id":637},{"__isSmartRef__":true,"id":638},{"__isSmartRef__":true,"id":639},{"__isSmartRef__":true,"id":640},{"__isSmartRef__":true,"id":641},{"__isSmartRef__":true,"id":642},{"__isSmartRef__":true,"id":643},{"__isSmartRef__":true,"id":644},{"__isSmartRef__":true,"id":645}],"sourceControl":{"__isSmartRef__":true,"id":482},"superclassName":"lively.ast.Visitor","categories":[{"__isSmartRef__":true,"id":611},{"__isSmartRef__":true,"id":613},{"__isSmartRef__":true,"id":615}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"610":{"name":"newScope","type":"propertyDef","startIndex":35450,"stopIndex":35631,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":611},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"611":{"name":"analyzing helper","type":"categoryDef","startIndex":35428,"stopIndex":35634,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":610}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"612":{"name":"findUnboundVariableNames","type":"propertyDef","startIndex":35651,"stopIndex":35868,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":613},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"613":{"name":"analyzing","type":"categoryDef","startIndex":35636,"stopIndex":35871,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":612}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"614":{"name":"visitVariable","type":"propertyDef","startIndex":35887,"stopIndex":35971,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"615":{"name":"visiting","type":"categoryDef","startIndex":35873,"stopIndex":38276,"fileName":"lively.ast/Parser.js","_subElements":[{"__isSmartRef__":true,"id":614},{"__isSmartRef__":true,"id":616},{"__isSmartRef__":true,"id":617},{"__isSmartRef__":true,"id":618},{"__isSmartRef__":true,"id":619},{"__isSmartRef__":true,"id":620},{"__isSmartRef__":true,"id":621},{"__isSmartRef__":true,"id":622},{"__isSmartRef__":true,"id":623},{"__isSmartRef__":true,"id":624},{"__isSmartRef__":true,"id":625},{"__isSmartRef__":true,"id":626},{"__isSmartRef__":true,"id":627},{"__isSmartRef__":true,"id":628},{"__isSmartRef__":true,"id":629},{"__isSmartRef__":true,"id":630},{"__isSmartRef__":true,"id":631},{"__isSmartRef__":true,"id":632},{"__isSmartRef__":true,"id":633},{"__isSmartRef__":true,"id":634},{"__isSmartRef__":true,"id":635},{"__isSmartRef__":true,"id":636},{"__isSmartRef__":true,"id":637},{"__isSmartRef__":true,"id":638},{"__isSmartRef__":true,"id":639},{"__isSmartRef__":true,"id":640},{"__isSmartRef__":true,"id":641},{"__isSmartRef__":true,"id":642},{"__isSmartRef__":true,"id":643},{"__isSmartRef__":true,"id":644},{"__isSmartRef__":true,"id":645}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"616":{"name":"visitVarDeclaration","type":"propertyDef","startIndex":35973,"stopIndex":36095,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"617":{"name":"visitParts","type":"propertyDef","startIndex":36097,"stopIndex":36208,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"618":{"name":"visitSequence","type":"propertyDef","startIndex":36210,"stopIndex":36281,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"619":{"name":"visitArrayLiteral","type":"propertyDef","startIndex":36283,"stopIndex":36358,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"620":{"name":"visitObjectLiteral","type":"propertyDef","startIndex":36360,"stopIndex":36438,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"621":{"name":"visitCond","type":"propertyDef","startIndex":36440,"stopIndex":36531,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"622":{"name":"visitIf","type":"propertyDef","startIndex":36533,"stopIndex":36582,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"623":{"name":"visitWhile","type":"propertyDef","startIndex":36584,"stopIndex":36659,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"624":{"name":"visitDoWhile","type":"propertyDef","startIndex":36661,"stopIndex":36738,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"625":{"name":"visitFor","type":"propertyDef","startIndex":36740,"stopIndex":36828,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"626":{"name":"visitForIn","type":"propertyDef","startIndex":36830,"stopIndex":36908,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"627":{"name":"visitSet","type":"propertyDef","startIndex":36910,"stopIndex":36980,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"628":{"name":"visitModifyingSet","type":"propertyDef","startIndex":36982,"stopIndex":37061,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"629":{"name":"visitBinaryOp","type":"propertyDef","startIndex":37063,"stopIndex":37138,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"630":{"name":"visitUnaryOp","type":"propertyDef","startIndex":37140,"stopIndex":37205,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"631":{"name":"visitPreOp","type":"propertyDef","startIndex":37207,"stopIndex":37270,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"632":{"name":"visitPostOp","type":"propertyDef","startIndex":37272,"stopIndex":37336,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"633":{"name":"visitGetSlot","type":"propertyDef","startIndex":37338,"stopIndex":37414,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"634":{"name":"visitReturn","type":"propertyDef","startIndex":37416,"stopIndex":37480,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"635":{"name":"visitWith","type":"propertyDef","startIndex":37482,"stopIndex":37551,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"636":{"name":"visitSend","type":"propertyDef","startIndex":37553,"stopIndex":37615,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"637":{"name":"visitCall","type":"propertyDef","startIndex":37617,"stopIndex":37677,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"638":{"name":"visitNew","type":"propertyDef","startIndex":37679,"stopIndex":37743,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"639":{"name":"visitThrow","type":"propertyDef","startIndex":37745,"stopIndex":37808,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"640":{"name":"visitTryCatchFinally","type":"propertyDef","startIndex":37810,"stopIndex":37911,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"641":{"name":"visitFunction","type":"propertyDef","startIndex":37913,"stopIndex":37979,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"642":{"name":"visitObjProperty","type":"propertyDef","startIndex":37981,"stopIndex":38054,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"643":{"name":"visitSwitch","type":"propertyDef","startIndex":38056,"stopIndex":38120,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"644":{"name":"visitCase","type":"propertyDef","startIndex":38122,"stopIndex":38200,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"645":{"name":"visitDefault","type":"propertyDef","startIndex":38202,"stopIndex":38274,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"_isStatic":false,"category":{"__isSmartRef__":true,"id":615},"className":"lively.ast.ClosureAnalyzer","_owner":{"__isSmartRef__":true,"id":609},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"646":{"name":null,"type":"comment","startIndex":38280,"stopIndex":38280,"fileName":"lively.ast/Parser.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":482},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"647":{"browser":{"__isSmartRef__":true,"id":217},"parent":{"__isSmartRef__":true,"id":481},"moduleName":"lively.ast/StackReification.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"648":{"browser":{"__isSmartRef__":true,"id":217},"parent":{"__isSmartRef__":true,"id":481},"moduleName":"lively.ast/Tests.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"649":{"target":{"__isSmartRef__":true,"id":650},"browser":{"__isSmartRef__":true,"id":217},"__LivelyClassName__":"lively.ide.ChangeSetNode","__SourceModuleName__":"Global.lively.ide.LocalBrowser"},"650":{"name":"Local code","__LivelyClassName__":"ChangeSet","__SourceModuleName__":"Global.lively.ChangeSet"},"651":{"isListItem":true,"string":"../","value":{"__isSmartRef__":true,"id":484}},"652":{"isListItem":true,"string":"Interpreter.js (not parsed)","value":{"__isSmartRef__":true,"id":485}},"653":{"isListItem":true,"string":"LivelyJSParser.js (not parsed)","value":{"__isSmartRef__":true,"id":486}},"654":{"isListItem":true,"string":"LivelyJSParser.ometa (not parsed)","value":{"__isSmartRef__":true,"id":487}},"655":{"isListItem":true,"string":"Parser.js","value":{"__isSmartRef__":true,"id":488}},"656":{"isListItem":true,"string":"StackReification.js (not parsed)","value":{"__isSmartRef__":true,"id":647}},"657":{"isListItem":true,"string":"Tests.js (not parsed)","value":{"__isSmartRef__":true,"id":648}},"658":{"isListItem":true,"string":"Local code","value":{"__isSmartRef__":true,"id":649}},"659":{"morph":{"__isSmartRef__":true,"id":470},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"660":{"x":0,"y":27.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"661":{"sourceObj":{"__isSmartRef__":true,"id":470},"sourceAttrName":"selection","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"setPane1Selection","converter":null,"converterString":null,"updaterString":"function ($upd, v) { $upd(v, this.sourceObj) }","varMapping":{"__isSmartRef__":true,"id":662},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":663},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"662":{"source":{"__isSmartRef__":true,"id":470},"target":{"__isSmartRef__":true,"id":217}},"663":{"updater":{"__isSmartRef__":true,"id":664}},"664":{"originalFunc":null,"varMapping":{"__isSmartRef__":true,"id":662},"source":"function ($upd, v) { $upd(v, this.sourceObj) }","funcProperties":{"__isSmartRef__":true,"id":665},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"665":{},"666":{"sourceObj":{"__isSmartRef__":true,"id":470},"sourceAttrName":"getSelection","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"getPane1Selection","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":667},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"667":{"source":{"__isSmartRef__":true,"id":470},"target":{"__isSmartRef__":true,"id":217}},"668":{"sourceObj":{"__isSmartRef__":true,"id":470},"sourceAttrName":"getList","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"getPane1Content","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":669},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"669":{"source":{"__isSmartRef__":true,"id":470},"target":{"__isSmartRef__":true,"id":217}},"670":{"sourceObj":{"__isSmartRef__":true,"id":470},"sourceAttrName":"getMenu","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"getPane1Menu","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":671},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"671":{"source":{"__isSmartRef__":true,"id":470},"target":{"__isSmartRef__":true,"id":217}},"672":{"onDownPressed":{"__isSmartRef__":true,"id":673},"onUpPressed":{"__isSmartRef__":true,"id":680}},"673":{"varMapping":{"__isSmartRef__":true,"id":674},"source":"function onDownPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":679},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"674":{"this":{"__isSmartRef__":true,"id":470},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":675}},"675":{"$super":{"__isSmartRef__":true,"id":676}},"676":{"varMapping":{"__isSmartRef__":true,"id":677},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch(e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":678},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"677":{"obj":{"__isSmartRef__":true,"id":470},"name":"onDownPressed"},"678":{},"679":{},"680":{"varMapping":{"__isSmartRef__":true,"id":681},"source":"function onUpPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":686},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"681":{"this":{"__isSmartRef__":true,"id":470},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":682}},"682":{"$super":{"__isSmartRef__":true,"id":683}},"683":{"varMapping":{"__isSmartRef__":true,"id":684},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch(e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":685},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"684":{"obj":{"__isSmartRef__":true,"id":470},"name":"onUpPressed"},"685":{},"686":{},"687":{"source":{"__isSmartRef__":true,"id":217},"target":{"__isSmartRef__":true,"id":470}},"688":{"sourceObj":{"__isSmartRef__":true,"id":217},"sourceAttrName":"setPane2Content","targetObj":{"__isSmartRef__":true,"id":689},"targetMethodName":"updateList","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":734},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"689":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":690},"id":218,"renderContextTable":{"__isSmartRef__":true,"id":696},"itemList":[{"__isSmartRef__":true,"id":697},{"__isSmartRef__":true,"id":699},{"__isSmartRef__":true,"id":701},{"__isSmartRef__":true,"id":703},{"__isSmartRef__":true,"id":705},{"__isSmartRef__":true,"id":707}],"_FontFamily":"Helvetica","eventHandler":{"__isSmartRef__":true,"id":709},"droppingEnabled":true,"halosEnabled":true,"_ClipMode":"auto","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":710},"selectedLineNo":-1,"selectOnMove":false,"owner":{"__isSmartRef__":true,"id":202},"attributeConnections":[{"__isSmartRef__":true,"id":711},{"__isSmartRef__":true,"id":713},{"__isSmartRef__":true,"id":715},{"__isSmartRef__":true,"id":717}],"doNotSerialize":["$$selection"],"doNotCopyProperties":["$$selection"],"selection":null,"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":719},"__LivelyClassName__":"lively.morphic.List","__SourceModuleName__":"Global.lively.morphic.Core"},"690":{"_Position":{"__isSmartRef__":true,"id":691},"renderContextTable":{"__isSmartRef__":true,"id":692},"_Extent":{"__isSmartRef__":true,"id":693},"_Padding":{"__isSmartRef__":true,"id":694},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":{"__isSmartRef__":true,"id":695},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"691":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"692":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"693":{"x":205,"y":192.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"694":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"695":{"r":0.95,"g":0.95,"b":0.95,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"696":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateListContent":"updateListContentHTML","resizeList":"resizeListHTML","getItemIndexFromEvent":"getItemIndexFromEventHTML","getListExtent":"getListExtentHTML","setSize":"setSizeHTML","renderAsDropDownList":"renderAsDropDownListHTML","setFontSize":"setFontSizeHTML","setFontFamily":"setFontFamilyHTML","getSelectedIndexes":"getSelectedIndexesHTML","enableMultipleSelections":"enableMultipleSelectionsHTML","selectAllAt":"selectAllAtHTML","clearSelections":"clearSelectionsHTML","deselectAt":"deselectAtHTML"},"697":{"isListItem":true,"string":"LivelyJSParser (extension)","value":{"__isSmartRef__":true,"id":698}},"698":{"target":{"__isSmartRef__":true,"id":491},"browser":{"__isSmartRef__":true,"id":217},"__LivelyClassName__":"lively.ide.CategorizedClassFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"699":{"isListItem":true,"string":"lively.ast.Parser (extension)","value":{"__isSmartRef__":true,"id":700}},"700":{"target":{"__isSmartRef__":true,"id":497},"browser":{"__isSmartRef__":true,"id":217},"__LivelyClassName__":"lively.ide.CategorizedClassFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"701":{"isListItem":true,"string":"lively.ast.Node (extension)","value":{"__isSmartRef__":true,"id":702}},"702":{"target":{"__isSmartRef__":true,"id":504},"browser":{"__isSmartRef__":true,"id":217},"__LivelyClassName__":"lively.ide.CategorizedClassFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"703":{"isListItem":true,"string":"lively.ast.SourceGenerator","value":{"__isSmartRef__":true,"id":704}},"704":{"target":{"__isSmartRef__":true,"id":536},"browser":{"__isSmartRef__":true,"id":217},"__LivelyClassName__":"lively.ide.CategorizedClassFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"705":{"isListItem":true,"string":"Function.prototype (extension)","value":{"__isSmartRef__":true,"id":706}},"706":{"target":{"__isSmartRef__":true,"id":605},"browser":{"__isSmartRef__":true,"id":217},"__LivelyClassName__":"lively.ide.CategorizedClassFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"707":{"isListItem":true,"string":"lively.ast.ClosureAnalyzer","value":{"__isSmartRef__":true,"id":708}},"708":{"target":{"__isSmartRef__":true,"id":609},"browser":{"__isSmartRef__":true,"id":217},"__LivelyClassName__":"lively.ide.CategorizedClassFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"709":{"morph":{"__isSmartRef__":true,"id":689},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"710":{"x":205,"y":27.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"711":{"sourceObj":{"__isSmartRef__":true,"id":689},"sourceAttrName":"selection","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"setPane2Selection","converter":null,"converterString":null,"updater":null,"updaterString":"function ($upd, v) { $upd(v, this.sourceObj) }","varMapping":{"__isSmartRef__":true,"id":712},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"712":{"source":{"__isSmartRef__":true,"id":689},"target":{"__isSmartRef__":true,"id":217}},"713":{"sourceObj":{"__isSmartRef__":true,"id":689},"sourceAttrName":"getSelection","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"getPane2Selection","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":714},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"714":{"source":{"__isSmartRef__":true,"id":689},"target":{"__isSmartRef__":true,"id":217}},"715":{"sourceObj":{"__isSmartRef__":true,"id":689},"sourceAttrName":"getList","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"getPane2Content","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":716},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"716":{"source":{"__isSmartRef__":true,"id":689},"target":{"__isSmartRef__":true,"id":217}},"717":{"sourceObj":{"__isSmartRef__":true,"id":689},"sourceAttrName":"getMenu","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"getPane2Menu","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":718},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"718":{"source":{"__isSmartRef__":true,"id":689},"target":{"__isSmartRef__":true,"id":217}},"719":{"onDownPressed":{"__isSmartRef__":true,"id":720},"onUpPressed":{"__isSmartRef__":true,"id":727}},"720":{"varMapping":{"__isSmartRef__":true,"id":721},"source":"function onDownPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":726},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"721":{"this":{"__isSmartRef__":true,"id":689},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":722}},"722":{"$super":{"__isSmartRef__":true,"id":723}},"723":{"varMapping":{"__isSmartRef__":true,"id":724},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch(e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":725},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"724":{"obj":{"__isSmartRef__":true,"id":689},"name":"onDownPressed"},"725":{},"726":{},"727":{"varMapping":{"__isSmartRef__":true,"id":728},"source":"function onUpPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":733},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"728":{"this":{"__isSmartRef__":true,"id":689},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":729}},"729":{"$super":{"__isSmartRef__":true,"id":730}},"730":{"varMapping":{"__isSmartRef__":true,"id":731},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch(e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":732},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"731":{"obj":{"__isSmartRef__":true,"id":689},"name":"onUpPressed"},"732":{},"733":{},"734":{"source":{"__isSmartRef__":true,"id":217},"target":{"__isSmartRef__":true,"id":689}},"735":{"sourceObj":{"__isSmartRef__":true,"id":217},"sourceAttrName":"setPane3Content","targetObj":{"__isSmartRef__":true,"id":736},"targetMethodName":"updateList","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":769},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"736":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":737},"id":219,"renderContextTable":{"__isSmartRef__":true,"id":743},"itemList":["-----"],"_FontFamily":"Helvetica","eventHandler":{"__isSmartRef__":true,"id":744},"droppingEnabled":true,"halosEnabled":true,"_ClipMode":"auto","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":745},"selectedLineNo":-1,"selectOnMove":false,"owner":{"__isSmartRef__":true,"id":202},"attributeConnections":[{"__isSmartRef__":true,"id":746},{"__isSmartRef__":true,"id":748},{"__isSmartRef__":true,"id":750},{"__isSmartRef__":true,"id":752}],"doNotSerialize":["$$selection"],"doNotCopyProperties":["$$selection"],"selection":null,"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":754},"__LivelyClassName__":"lively.morphic.List","__SourceModuleName__":"Global.lively.morphic.Core"},"737":{"_Position":{"__isSmartRef__":true,"id":738},"renderContextTable":{"__isSmartRef__":true,"id":739},"_Extent":{"__isSmartRef__":true,"id":740},"_Padding":{"__isSmartRef__":true,"id":741},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":{"__isSmartRef__":true,"id":742},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"738":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"739":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"740":{"x":205,"y":192.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"741":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"742":{"r":0.95,"g":0.95,"b":0.95,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"743":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateListContent":"updateListContentHTML","resizeList":"resizeListHTML","getItemIndexFromEvent":"getItemIndexFromEventHTML","getListExtent":"getListExtentHTML","setSize":"setSizeHTML","renderAsDropDownList":"renderAsDropDownListHTML","setFontSize":"setFontSizeHTML","setFontFamily":"setFontFamilyHTML","getSelectedIndexes":"getSelectedIndexesHTML","enableMultipleSelections":"enableMultipleSelectionsHTML","selectAllAt":"selectAllAtHTML","clearSelections":"clearSelectionsHTML","deselectAt":"deselectAtHTML"},"744":{"morph":{"__isSmartRef__":true,"id":736},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"745":{"x":410,"y":27.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"746":{"sourceObj":{"__isSmartRef__":true,"id":736},"sourceAttrName":"selection","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"setPane3Selection","converter":null,"converterString":null,"updater":null,"updaterString":"function ($upd, v) { $upd(v, this.sourceObj) }","varMapping":{"__isSmartRef__":true,"id":747},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"747":{"source":{"__isSmartRef__":true,"id":736},"target":{"__isSmartRef__":true,"id":217}},"748":{"sourceObj":{"__isSmartRef__":true,"id":736},"sourceAttrName":"getSelection","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"getPane3Selection","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":749},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"749":{"source":{"__isSmartRef__":true,"id":736},"target":{"__isSmartRef__":true,"id":217}},"750":{"sourceObj":{"__isSmartRef__":true,"id":736},"sourceAttrName":"getList","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"getPane3Content","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":751},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"751":{"source":{"__isSmartRef__":true,"id":736},"target":{"__isSmartRef__":true,"id":217}},"752":{"sourceObj":{"__isSmartRef__":true,"id":736},"sourceAttrName":"getMenu","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"getPane3Menu","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":753},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"753":{"source":{"__isSmartRef__":true,"id":736},"target":{"__isSmartRef__":true,"id":217}},"754":{"onDownPressed":{"__isSmartRef__":true,"id":755},"onUpPressed":{"__isSmartRef__":true,"id":762}},"755":{"varMapping":{"__isSmartRef__":true,"id":756},"source":"function onDownPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":761},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"756":{"this":{"__isSmartRef__":true,"id":736},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":757}},"757":{"$super":{"__isSmartRef__":true,"id":758}},"758":{"varMapping":{"__isSmartRef__":true,"id":759},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch(e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":760},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"759":{"obj":{"__isSmartRef__":true,"id":736},"name":"onDownPressed"},"760":{},"761":{},"762":{"varMapping":{"__isSmartRef__":true,"id":763},"source":"function onUpPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":768},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"763":{"this":{"__isSmartRef__":true,"id":736},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":764}},"764":{"$super":{"__isSmartRef__":true,"id":765}},"765":{"varMapping":{"__isSmartRef__":true,"id":766},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch(e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":767},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"766":{"obj":{"__isSmartRef__":true,"id":736},"name":"onUpPressed"},"767":{},"768":{},"769":{"source":{"__isSmartRef__":true,"id":217},"target":{"__isSmartRef__":true,"id":736}},"770":{"sourceObj":{"__isSmartRef__":true,"id":217},"sourceAttrName":"setPane4Content","targetObj":{"__isSmartRef__":true,"id":771},"targetMethodName":"updateList","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":804},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"771":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":772},"id":220,"renderContextTable":{"__isSmartRef__":true,"id":778},"itemList":["-----"],"_FontFamily":"Helvetica","eventHandler":{"__isSmartRef__":true,"id":779},"droppingEnabled":true,"halosEnabled":true,"_ClipMode":"auto","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":780},"selectedLineNo":-1,"selectOnMove":false,"owner":{"__isSmartRef__":true,"id":202},"attributeConnections":[{"__isSmartRef__":true,"id":781},{"__isSmartRef__":true,"id":783},{"__isSmartRef__":true,"id":785},{"__isSmartRef__":true,"id":787}],"doNotSerialize":["$$selection"],"doNotCopyProperties":["$$selection"],"selection":null,"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":789},"__LivelyClassName__":"lively.morphic.List","__SourceModuleName__":"Global.lively.morphic.Core"},"772":{"_Position":{"__isSmartRef__":true,"id":773},"renderContextTable":{"__isSmartRef__":true,"id":774},"_Extent":{"__isSmartRef__":true,"id":775},"_Padding":{"__isSmartRef__":true,"id":776},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":{"__isSmartRef__":true,"id":777},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"773":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"774":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"775":{"x":205,"y":192.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"776":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"777":{"r":0.95,"g":0.95,"b":0.95,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"778":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateListContent":"updateListContentHTML","resizeList":"resizeListHTML","getItemIndexFromEvent":"getItemIndexFromEventHTML","getListExtent":"getListExtentHTML","setSize":"setSizeHTML","renderAsDropDownList":"renderAsDropDownListHTML","setFontSize":"setFontSizeHTML","setFontFamily":"setFontFamilyHTML","getSelectedIndexes":"getSelectedIndexesHTML","enableMultipleSelections":"enableMultipleSelectionsHTML","selectAllAt":"selectAllAtHTML","clearSelections":"clearSelectionsHTML","deselectAt":"deselectAtHTML"},"779":{"morph":{"__isSmartRef__":true,"id":771},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"780":{"x":615,"y":27.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"781":{"sourceObj":{"__isSmartRef__":true,"id":771},"sourceAttrName":"selection","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"setPane4Selection","converter":null,"converterString":null,"updater":null,"updaterString":"function ($upd, v) { $upd(v, this.sourceObj) }","varMapping":{"__isSmartRef__":true,"id":782},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"782":{"source":{"__isSmartRef__":true,"id":771},"target":{"__isSmartRef__":true,"id":217}},"783":{"sourceObj":{"__isSmartRef__":true,"id":771},"sourceAttrName":"getSelection","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"getPane4Selection","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":784},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"784":{"source":{"__isSmartRef__":true,"id":771},"target":{"__isSmartRef__":true,"id":217}},"785":{"sourceObj":{"__isSmartRef__":true,"id":771},"sourceAttrName":"getList","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"getPane4Content","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":786},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"786":{"source":{"__isSmartRef__":true,"id":771},"target":{"__isSmartRef__":true,"id":217}},"787":{"sourceObj":{"__isSmartRef__":true,"id":771},"sourceAttrName":"getMenu","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"getPane4Menu","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":788},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"788":{"source":{"__isSmartRef__":true,"id":771},"target":{"__isSmartRef__":true,"id":217}},"789":{"onDownPressed":{"__isSmartRef__":true,"id":790},"onUpPressed":{"__isSmartRef__":true,"id":797}},"790":{"varMapping":{"__isSmartRef__":true,"id":791},"source":"function onDownPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":796},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"791":{"this":{"__isSmartRef__":true,"id":771},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":792}},"792":{"$super":{"__isSmartRef__":true,"id":793}},"793":{"varMapping":{"__isSmartRef__":true,"id":794},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch(e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":795},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"794":{"obj":{"__isSmartRef__":true,"id":771},"name":"onDownPressed"},"795":{},"796":{},"797":{"varMapping":{"__isSmartRef__":true,"id":798},"source":"function onUpPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":803},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"798":{"this":{"__isSmartRef__":true,"id":771},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":799}},"799":{"$super":{"__isSmartRef__":true,"id":800}},"800":{"varMapping":{"__isSmartRef__":true,"id":801},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch(e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":802},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"801":{"obj":{"__isSmartRef__":true,"id":771},"name":"onUpPressed"},"802":{},"803":{},"804":{"source":{"__isSmartRef__":true,"id":217},"target":{"__isSmartRef__":true,"id":771}},"805":{"sourceObj":{"__isSmartRef__":true,"id":217},"sourceAttrName":"setSourceString","targetObj":{"__isSmartRef__":true,"id":806},"targetMethodName":"setTextString","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":822},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"806":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":807},"id":222,"renderContextTable":{"__isSmartRef__":true,"id":812},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":813}],"eventHandler":{"__isSmartRef__":true,"id":815},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"auto","fixedWidth":true,"fixedHeight":true,"allowInput":true,"_FontFamily":"Courier","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":816},"priorExtent":{"__isSmartRef__":true,"id":817},"_MaxTextWidth":808,"_MinTextWidth":808,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":202},"accessibleInInactiveWindow":true,"layout":{"__isSmartRef__":true,"id":818},"noEval":true,"syntaxHighlightingWhileTyping":true,"attributeConnections":[{"__isSmartRef__":true,"id":819},{"__isSmartRef__":true,"id":820}],"doNotSerialize":["$$textString","$$savedTextString"],"doNotCopyProperties":["$$textString","$$savedTextString"],"textString":"/*\n * Copyright (c) 2008-2011 Hasso Plattner Institute\n *\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nmodule('lively.ast.Parser').requires('lively.ast.generated.Translator', 'lively.ast.generated.Nodes', 'lively.ast.Interpreter', 'lively.ast.LivelyJSParser').toRun(function() {\n\n\nObject.extend(LivelyJSParser, {\n\thexDigits: \"0123456789abcdef\",\n\tkeywords: (function() {\n\t\tvar keywordWithIdx ={},\n\t\t\tkeywords = [\"break\", \"case\", \"catch\", \"continue\", \"default\", \"delete\", \"do\", \"else\", \"finally\",\n\t\t\t\"for\", \"function\", \"if\", \"in\", \"instanceof\", \"new\", \"return\", \"switch\", \"this\", \"throw\", \"try\",\n\t\t\t\"typeof\", \"var\", \"void\", \"while\", \"with\", \"ometa\", \"debugger\"];\n\t\tfor (var idx = 0; idx < keywords.length; idx++)\n\t\t\tkeywordWithIdx[keywords[idx]] = true;\n\t\treturn keywordWithIdx\n\t})(),\n\t_isKeyword: function(k) {\n\t\treturn this.keywords[k] === true;\n\t},\n});\n\nObject.extend(lively.ast.Parser, {\n\tjsParser: LivelyJSParser,\n\tastTranslator: JSTranslator,\n\tbasicParse: function(source, rule) {\n\t\t// first call the LKJSParser. this will result in a synbolic AST tree.\n\t\t// translate this into real AST objects using JSTranslator\n\t\tvar errorHandler = function() { alert(OMetaSupport.handleErrorDebug.apply(OMetaSupport, arguments)) },\n\t\t\tintermediate = OMetaSupport.matchAllWithGrammar(this.jsParser, rule, source, errorHandler);\n\t\tif (!intermediate || Object.isString(intermediate))\n\t\t\tthrow new Error('Could not parse JS source code: ' + intermediate);\n\t\tvar ast = OMetaSupport.matchWithGrammar(this.astTranslator, 'trans', intermediate);\n\t\tif (!ast || Object.isString(ast))\n\t\t\tthrow new Error('Could not translate symbolic AST tree: ' + ast);\n\t\treturn ast;\n\t},\n\n\tparse: function(src, optRule) { return this.basicParse(src, optRule || 'topLevel') },\n});\n\nlively.ast.Node.addMethods(\n'accessing', {\n\tsetParent: function(parentNode) { return this._parent = parentNode },\n\tgetParent: function(parentNode) { return this._parent },\n\thasParent: function(parentNode) { return this._parent != undefined },\n\tparentSequence: function() {\n\t\treturn this.hasParent() && this.getParent().parentSequence();\n\t},\n\tparentFunction: function() {\n\t\treturn this.hasParent() && this.getParent().parentFunction();\n\t},\n\tastIndex: function() {\n\t\tvar parentFunc = this.parentFunction();\n\t\tif (!parentFunc) throw new Error('astIndex: cannot get parent fucntion of ' + this);\n\t\treturn parentFunc.linearlyListNodesWithoutNestedFunctions().indexOf(this);\n\t},\n\tnodeForAstIndex: function(idx) {\n\t\treturn this.linearlyListNodesWithoutNestedFunctions()[idx]\n\t},\n\tnextStatement: function() {\n\t\tvar node = this, parent;\n\t\twhile (parent = node.getParent()) {\n\t\t\tif (parent.isSequence) {\n\t\t\t\tvar seqIdx = parent.children.indexOf(node);\n\t\t\t\tif (parent.children[seqIdx + 1])\n\t\t\t\t\treturn parent.children[seqIdx + 1]\n\t\t\t}\n\t\t\tnode = parent;\n\t\t}\n\t\treturn null;\n\n\t},\n\n\n},\n'testing', {\n\tisASTNode: true,\n\tisUndefined: function(expr) {\n\t\treturn expr.isVariable && expr.name === 'undefined';\n\t},\n},\n'enumerating', {\n\twithAllChildNodesDo: function(func, parent, nameInParent, depth) {\n\t\t// args of func: node, parent, nameInParent, depth; func returns true if recursive call should be made\n\t\tvar node = this,\n\t\t\tshouldContinue = func(node, parent, nameInParent, depth || 0);\n\t\tif (!shouldContinue) return;\n\t\tthis.doForAllChildNodes(function(childNode, nameInParent) {\n\t\t\tchildNode.withAllChildNodesDo(func, node, nameInParent, depth ? depth + 1 : 1)\n\t\t});\n\t},\n\twithAllChildNodesDoPostOrder: function(func, stopFunc, parent, nameInParent, depth) {\n\t\t// args of func: node, parent, nameInParent, depth; func returns true if recursive call should be made\n\t\tvar node = this,\n\t\t\tshouldStop = stopFunc && stopFunc(node, parent, nameInParent, depth || 0);\n\t\tif (shouldStop) return;\n\t\tthis.doForAllChildNodes(function(childNode, nameInParent) {\n\t\t\tchildNode.withAllChildNodesDoPostOrder(func, stopFunc, node, nameInParent, depth ? depth + 1 : 1)\n\t\t});\n\t\tfunc(node, parent, nameInParent, depth || 0);\n\t},\n\n\tdoForAllChildNodes: function(func) {\n\t\tfor (var name in this) {\n\t\t\tif (!this.hasOwnProperty(name) || name == '_parent') continue;\n\t\t\tvar value = this[name];\n\t\t\tif (value.isASTNode) { \n\t\t\t\tfunc(value, name, null)\n\t\t\t} else if (Object.isArray(value)) {\n\t\t\t\tvalue.forEach(function(item, i) { if (item.isASTNode) func(item, name, i) });\n\t\t\t}\n\t\t}\n\t},\n\tnodesMatching: function(matchFunc) {\n\t\tvar result = [];\n\t\tthis.withAllChildNodesDo(function(node, parent, nameInParent, depth) {\n\t\t\tif (matchFunc(node, parent, nameInParent, depth)) result.push(node);\n\t\t\treturn true;\n\t\t});\n\t\treturn result;\n\t},\n\tlinearlyListNodes: function() {\n\t\tvar nodes = [];\n\t\tthis.withAllChildNodesDoPostOrder(function(node) { nodes.push(node) });\n\t\treturn nodes;\n\t},\n\tlinearlyListNodesWithoutNestedFunctions: function() {\n\t\tvar root = this, nodes = [];\n\t\tthis.withAllChildNodesDoPostOrder(\n\t\t\tfunction(node) { nodes.push(node) },\n\t\t\tfunction(node) { return node.isFunction && node !== root } // stopFunc\n\t\t);\n\t\treturn nodes;\n\t},\n\n},\n'replacing', {\n\treplaceNodesMatching: function(testFunc, replacementNodeOrFunction) {\n\t\tvar nodes = this.nodesMatching(testFunc);\n\t\tnodes.forEach(function(node) {\n\t\t\t// Careful here! One could directly use node.replaceWith but if the replacement function\n\t\t\t// reuses node and replaces it already then parent will be changed!\n\t\t\tvar parent = node.getParent();\n\t\t\tif (!parent) throw new Error('No parent for node in replaceNodesMatching ' + node);\n\t\t\tvar replacementNode = (typeof replacementNodeOrFunction == 'function') ?\n\t\t\t\treplacementNodeOrFunction(node) : replacementNodeOrFunction;\n\t\t\tparent.replaceChildNode(node, replacementNode);\n\t\t})\n\t\treturn this;\n\t},\n\treplaceWith: function(otherNode) {\n\t\tif (!this.hasParent()) throw new Error('Need parent node for replaceWith but cannot find it ' + this);\n\t\tthis.getParent().replaceChildNode(this, otherNode);\n\t\treturn otherNode;\n\t},\n\treplaceChildNode: function(childNode, newNode) {\n\t\t// find name if childNode in me\n\t\tvar slotName, idx;\n\t\tthis.doForAllChildNodes(function(node, nameInParent, i) {\n\t\t\tif (node !== childNode) return;\n\t\t\tslotName = nameInParent;\n\t\t\tidx = i;\n\t\t});\n\t\tif (slotName === undefined)\n\t\t\tthrow new Error('Cannot find childNode in me! (#replaceChildNode)');\n\t\tif (idx === undefined || idx === null) {\n\t\t\tthis[slotName] = newNode;\n\t\t} else { // Array\n\t\t\tthis[slotName][idx] = newNode;\n\t\t}\n\t\tnewNode.setParent(this);\n\t},\n\n\n},\n'evaluation', {\n\teval: function() {\n\t\ttry {\n\t\t\tvar js = this.asJS(),\n\t\t\t\tsrc = '(' + js + ')',\n\t\t\t\tresult = eval(src);\n\t\t} catch(e) {\n\t\t\talert('Could not eval ' + js + ' because:\\n' + e + '\\n' + e.stack);\n\t\t}\n\t\treturn result;\n\t},\n},\n'debugging', {\n\terror: function(msg) { throw new Error(msg) },\n\tindent: function(depth) { return Strings.indent('', '\t', depth) },\n\ttoString: function() { return this.constructor.name },\n\tprintTree: function(postOrder) {\n\t\tvar nodeStrings = [], idx = 0,\n\t\t\tenumFunc = postOrder ? 'withAllChildNodesDoPostOrder' : 'withAllChildNodesDo';\n\t\tthis[enumFunc](function(node, parent, nameInParent, depth) {\n\t\t\tnodeStrings.push(idx.toString() + ' ' +\n\t\t\t\tStrings.indent(node.constructor.name + '(' + nameInParent + ')', ' ', depth));\n\t\t\tidx++;\n\t\t\treturn true;\n\t\t})\n\t\treturn nodeStrings.join('\\n');\n\t},\n\tprintConstructorCall: function(/* args */) {\n\t\tvar call = 'new ' + this.constructor.type + '(', argCalls = [];\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i], argCall = '';\n\t\t\tif (Object.isArray(arg)) {\n\t\t\t\targCall += '[';\n\t\t\t\targCall += arg.collect(function(ea) {return ea.isASTNode ? ea.printConstruction() : ea}).join(',');\n\t\t\t\targCall += ']';\n\t\t\t} else if (arg.isASTNode) {\n\t\t\t\targCall += arg.printConstruction();\n\t\t\t} else {\n\t\t\t\targCall += arg;\n\t\t\t}\n\t\t\targCalls.push(argCall);\n\t\t}\n\t\tcall += argCalls.join(',');\n\t\tcall += ')';\n\t\treturn call;\n\t},\n\n});\nObject.subclass('lively.ast.SourceGenerator',\n// usage:\n// gen = new lively.ast.SourceGenerator()\n// gen.writeAndEvalTranslator()\n// gen.evalAndWriteClasses()\n// lively.ast.Parser.astTranslator = JSTranslator\n// lively.ast.Parser.jsParser = LivelyJSParser\n'settings', {\n\tcustomRules: function() { return ['trans = [:t apply(t):ans] -> ans,'] },\n\tcustomClasses: function() { return [\"Object.subclass('\" + this.rootNodeClassName + \"');\"] },\n\n\ttranslatorRules: function() {\n\t\tvar names = this.constructor.categories['translator rules'];\n\t\t\tresult = {};\n\t\tnames.forEach(function(name) { result[name] = this[name] }, this);\n\t\treturn result;\n\t},\n\tmodulePath: 'lively.ast.',\n\trootNodeClassName: 'lively.ast.Node',\n\tvisitorClassName: 'lively.ast.Visitor',\n},\n'translator rules', {\n\tbegin: {\n\t\tclassName: 'Sequence', rules: [':pos', 'trans*:children', 'end'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.children) },\n\t\t\ttoString: function() {return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.children.join(','))\n\t\t\t},\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar indent = this.indent(depth || 0);\n\t\t\t\tdepth = depth || -1;\n\t\t\t\treturn this.children.invoke('asJS', depth + 1).join(';\\n' + indent);\n\t\t\t},\n\t\t},\n\t\tinsertion: {\n\t\t\tinsertBefore: function(newNode, existingNode) {\n\t\t\t\tfor (var i = 0; i < this.children.length; i++)\n\t\t\t\t\tif (this.children[i].nodesMatching(function(node) { return node === existingNode }).length > 0)\n\t\t\t\t\t\tbreak;\n\t\t\t\tif (!this.children[i])\n\t\t\t\t\tthrow dbgOn(new Error('insertBefore: ' + existingNode + ' not in ' + this));\n\t\t\t\treturn this.insertAt(newNode, i);\n\t\t\t},\n\t\t\tinsertAt: function(newNode, idx) {\n\t\t\t\tthis.children.pushAt(newNode, idx);\n\t\t\t\tnewNode.setParent(this);\n\t\t\t\treturn newNode;\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tparentSequence: function() { return this },\n\t\t},\n\t},\n\tnumber: {\n\t\tclassName: 'Number', rules: [':pos', ':value'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.pos, this.value) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)', this.constructor.name, this.value) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.value },\n\t\t},\n\t},\n\tstring: {\n\t\tclassName: 'String', rules: [':pos', ':value'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.value + '\"') },\n\t\t\ttoString: function() { return Strings.format('%s(%s)', this.constructor.name, this.value) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return '\"' + this.value + '\"' },\n\t\t},\n\t},\n\tcondExpr: {\n\t\tclassName: 'Cond', rules: [':pos', 'trans:condExpr', 'trans:trueExpr', 'trans:falseExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s?%s:%s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('(%s) ? (%s) : (%s)',\n\t\t\t\t\tthis.condExpr.asJS(depth), this.trueExpr.asJS(depth), this.falseExpr.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'if': {\n\t\tclassName: 'If', rules: [':pos', 'trans:condExpr', 'trans:trueExpr', 'trans:falseExpr'],\n\t\tinitializing: {\n\t\t\tinitialize: function($super, pos, condExpr, trueExpr, falseExpr) {\n\t\t\t\tthis.pos = pos;\n\t\t\t\tthis.condExpr = condExpr;\n\t\t\t\t// FIXME actually this could be done with OMeta\n\t\t\t\tthis.trueExpr = trueExpr.isSequence || this.isUndefined(trueExpr) ? trueExpr : new lively.ast.Sequence(trueExpr.pos, [trueExpr]);\n\t\t\t\tthis.falseExpr = falseExpr.isSequence || this.isUndefined(falseExpr) ? falseExpr : new lively.ast.Sequence(trueExpr.pos, [falseExpr]);\n\t\t\t\tcondExpr.setParent(this);\n\t\t\t\tthis.trueExpr.setParent(this);\n\t\t\t\tthis.falseExpr.setParent(this);\n\t\t\t},\n\t\t},\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s?%s:%s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar str = Strings.format('if (%s) {%s}',\n\t\t\t\t\tthis.condExpr.asJS(depth), this.trueExpr.asJS(depth));\n\t\t\t\tif (!this.isUndefined(this.falseExpr))\n\t\t\t\t\tstr += ' else {' + this.falseExpr.asJS(depth) + '}';\n\t\t\t\treturn str;\n\t\t\t},\n\t\t},\n\t},\n\t'while': {\n\t\tclassName: 'While', rules: [':pos', 'trans:condExpr', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s?%s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('while (%s) {%s}',\n\t\t\t\t\tthis.condExpr.asJS(depth), this.body.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'doWhile': {\n\t\tclassName: 'DoWhile', rules: [':pos', 'trans:body', 'trans:condExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.body, this.condExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s while%s)',\n\t\t\t\tthis.constructor.name, this.body, this.condExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('do {%s} while (%s);',\n\t\t\t\t\tthis.body.asJS(depth), this.condExpr.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'for': {\n\t\tclassName: 'For', rules: [':pos', 'trans:init', 'trans:condExpr', 'trans:upd', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.init, this.condExpr, this.upd, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s;%s;%s do %s)',\n\t\t\t\tthis.constructor.name, this.init, this.condExpr, this.upd, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('for (%s; %s; %s) {%s}',\n\t\t\t\t\tthis.init.asJS(depth), this.condExpr.asJS(depth), this.upd.asJS(depth), this.body.asJS(depth));\n\t\t\t},\n\t\t},\n\t}, \n\tforIn: {\n\t\tclassName: 'ForIn', rules: [':pos', 'trans:name', 'trans:obj', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.name, this.obj, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s in %s do %s)',\n\t\t\t\tthis.constructor.name, this.name, this.obj, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('for (var %s in %s) {%s}',\n\t\t\t\t\tthis.name.asJS(depth), this.obj.asJS(depth), this.body.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\tset: {\n\t\tclassName: 'Set', rules: [':pos', 'trans:left', 'trans:right'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.left, this.right) },\n\t\t\ttoString: function() { return Strings.format('%s(%s = %s)',\n\t\t\t\tthis.constructor.name, this.left, this.right) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.left.asJS(depth) + ' = ' + this.right.asJS(depth) },\n\t\t},\n\t},\n\tmset: {\n\t\tclassName: 'ModifyingSet', rules: [':pos', 'trans:left', ':name', 'trans:right'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.left, '\"' + this.name + '\"', this.right) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s %s)',\n\t\t\t\tthis.constructor.name, this.left, this.name, this.right) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.left.asJS(depth) + ' ' + this.name + '= ' + this.right.asJS(depth) },\n\t\t},\n\t},\n\tbinop: {\n\t\tclassName: 'BinaryOp', rules: [':pos', ':name', 'trans:left', 'trans:right'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.name + '\"', this.left, this.right) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s %s)',\n\t\t\t\tthis.constructor.name, this.left, this.name, this.right) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.left.asJS(depth) + ' ' + this.name + ' ' + this.right.asJS(depth) },\n\t\t},\n\t},\n\tunop: {\n\t\tclassName: 'UnaryOp', rules: [':pos', ':name', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.name + '\"', this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s%s)',\n\t\t\t\tthis.constructor.name, this.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.name + this.expr.asJS(depth) },\n\t\t},\n\t},\n\tpreop: {\n\t\tclassName: 'PreOp', rules: [':pos', ':name', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.name+'\"', this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s%s)',\n\t\t\t\tthis.constructor.name, this.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.name + this.expr.asJS(depth) },\n\t\t},\n\t},\n\tpostop: {\n\t\tclassName: 'PostOp', rules: [':pos', ':name', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s%s)',\n\t\t\t\tthis.constructor.name, this.expr, this.name) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.expr.asJS(depth) + this.name },\n\t\t},\n\t},\n\t'this': {\n\t\tclassName: 'This', rules: [':pos'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos) },\n\t\t\ttoString: function() { return this.constructor.name },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'this' },\n\t\t},\n\t},\n\tget: {\n\t\tclassName: 'Variable', rules: [':pos', ':name'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"') },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.name) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.name },\n\t\t},\n\t},\n\tgetp: {\n\t\tclassName: 'GetSlot', rules: [':pos', 'trans:slotName', 'trans:obj'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.slotName, this.obj) },\n\t\t\ttoString: function() { return Strings.format('%s(%s[%s])',\n\t\t\t\tthis.constructor.name, this.obj, this.slotName) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar objJS = this.obj.asJS(depth);\n\t\t\t\tif (this.obj.isFunction) objJS = '(' + objJS + ')';\n\t\t\t\treturn objJS + '[' + this.slotName.asJS(depth) + ']';\n\t\t\t},\n\t\t},\n\t},\n\t'break': {\n\t\tclassName: 'Break', rules: [':pos'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'break' },\n\t\t},\n\t},\n\t'continue': {\n\t\tclassName: 'Continue', rules: [':pos'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'continue' },\n\t\t},\n\t},\n\tarr: {\n\t\tclassName: 'ArrayLiteral', rules: [':pos', 'trans*:elements'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.elements) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.elements.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return '[' + this.elements.invoke('asJS').join(',') + ']' },\n\t\t},\n\t},\n\t'return': {\n\t\tclassName: 'Return', rules: [':pos', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'return ' + this.expr.asJS(depth) },\n\t\t},\n\t},\n\t'with': {\n\t\tclassName: 'With', rules: [':pos', 'trans:obj', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.obj, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s)',\n\t\t\t\tthis.constructor.name, this.obj, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'with (' + this.obj.asJS(depth) + ') {' + this.body.asJS(depth) + '}' },\n\t\t},\n\t},\n\tsend: {\n\t\tclassName: 'Send', rules: [':pos', ':name', 'trans:recv', 'trans*:args'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.recv, this.args) },\n\t\t\ttoString: function() { return Strings.format('%s(%s[%s](%s))',\n\t\t\t\tthis.constructor.name, this.recv, this.name, this.args.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar recvJS = this.recv.asJS(depth);\n\t\t\t\tif (this.recv.isFunction) recvJS = '(' + recvJS + ')';\n\t\t\t\treturn Strings.format('%s[\"%s\"](%s)',\n\t\t\t\t\trecvJS, this.name, this.args.invoke('asJS').join(','));\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tgetName: function() { return this.name },\n\t\t},\n\t},\n\tcall: {\n\t\tclassName: 'Call', rules: [':pos', 'trans:fn', 'trans*:args'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.fn, this.args) },\n\t\t\ttoString: function() { return Strings.format('%s(%s(%s))',\n\t\t\t\tthis.constructor.name, this.fn, this.args.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('%s(%s)',\n\t\t\t\t\tthis.fn.asJS(depth), this.args.invoke('asJS').join(','));\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tgetName: function() { return this.fn.name },\n\t\t},\n\t},\n\t'new': {\n\t\tclassName: 'New', rules: [':pos', 'trans:clsExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.clsExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s(%s))',\n\t\t\t\tthis.constructor.name, this.clsExpr) },\n\t\t},\n\t},\n\t'var': {\n\t\tclassName: 'VarDeclaration', rules: [':pos', ':name', 'trans:val'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.val) },\n\t\t\ttoString: function() { return Strings.format('%s(%s = %s)',\n\t\t\t\tthis.constructor.name, this.name, this.val) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('var %s = %s', this.name, this.val.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'throw': {\n\t\tclassName: 'Throw', rules: [':pos', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'throw ' + this.expr.asJS(depth) },\n\t\t},\n\t},\n\t'try': {\n\t\tclassName: 'TryCatchFinally', rules: [':pos', 'trans:trySeq', ':errName', 'trans:catchSeq', 'trans:finallySeq'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.trySeq, '\"'+this.errName+'\"', this.catchSeq, this.finallySeq) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s %s)',\n\t\t\t\tthis.constructor.name, this.trySeq, this.catchSeq, this.finallySeq) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar baseIndent = this.indent(depth-1),\n\t\t\t\t\tindent = this.indent(depth),\n\t\t\t\t\tstr = 'try {\\n' + indent + this.trySeq.asJS(depth) + '\\n' + baseIndent + '}';\n\t\t\t\tif (!this.isUndefined(this.catchSeq))\n\t\t\t\t\tstr += ' catch(' + this.errName + ') {\\n' +\n\t\t\t\t\t\tindent + this.catchSeq.asJS(depth) + '\\n' + baseIndent + '}';\n\t\t\t\tif (!this.isUndefined(this.finallySeq))\n\t\t\t\t\tstr += ' finally {\\n' + indent + this.finallySeq.asJS(depth) + '\\n' + baseIndent + '}';\n\t\t\t\treturn str;\n\t\t\t},\n\t\t},\n\t},\n\tfunc: {\n\t\tclassName: 'Function', rules: [':pos', ':args', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.args.collect(function(ea) { return '\"' + ea + '\"' }), this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(function(%s) %s)',\n\t\t\t\tthis.constructor.name, this.args.join(','), this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('function%s(%s) {\\n%s\\n}',\n\t\t\t\t\tthis.name ? ' ' + this.name : '',this.args.join(','),\n\t\t\t\t\tthis.indent(depth+1) + this.body.asJS(depth+1));\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tsetName: function(name) { this.name = name },\n\t\t\tgetName: function() { return this.name },\n\t\t\tparentFunction: function() { return this },\n\t\t\tstatements: function() { return this.body.children },\n\t\t},\n\t},\n\tjson: {\n\t\tclassName: 'ObjectLiteral', rules: [':pos', 'trans*:properties'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.properties) },\n\t\t\ttoString: function() { return Strings.format('%s({%s})',\n\t\t\t\tthis.constructor.name, this.properties.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn '{' + this.properties.invoke('asJS').join(',') + '}';\n\t\t\t},\n\t\t},\n\t},\n\tbinding: {\n\t\tclassName: 'ObjProperty', rules: [':pos', ':name', 'trans:property'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.property) },\n\t\t\ttoString: function() { return Strings.format('%s(%s: %s)',\n\t\t\t\tthis.constructor.name, this.name, this.property) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('\"%s\": %s', this.name, this.property.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'switch': {\n\t\tclassName: 'Switch', rules: [':pos', 'trans:expr', 'trans*:cases'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.expr, this.cases) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s)',\n\t\t\t\tthis.constructor.name, this.expr, this.cases.join('\\n')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('switch (%s) {%s}',\n\t\t\t\t\tthis.expr.asJS(depth), this.cases.invoke('asJS').join('\\n'));\n\t\t\t},\n\t\t},\n\t},\n\t'case': {\n\t\tclassName: 'Case', rules: [':pos', 'trans:condExpr', 'trans:thenExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.thenExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s: %s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.thenExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn 'case ' + this.condExpr.asJS(depth) + ': ' + this.thenExpr.asJS(depth);\n\t\t\t},\n\t\t},\n\t},\n\t'default': {\n\t\tclassName: 'Default', rules: [':pos', 'trans:defaultExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.defaultExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(default: %s)',\n\t\t\t\tthis.constructor.name, this.defaultExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'default: ' + this.defaultExpr.asJS(depth) },\n\t\t},\n\t},\n\t'regex': {\n\t\tclassName: 'Regex', rules: [':pos', ':exprString', ':flags'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.exprString, this.flags) },\n\t\t\ttoString: function() { return Strings.format('(/%s/%s)', this.exprString, this.flags) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return '/' + this.exprString + '/' + this.flags},\n\t\t},\n\t},\n},\n'rule helper', {\n\trulesReturningSomething: function(ruleSpec) {\n\t\tif (!ruleSpec.rules) return [];\t\n\t\treturn ruleSpec.rules.reject(function(ea) { return ea.startsWith(':') || !ea.include(':') });\n\t},\n\tforCollectionRulesDo: function(ruleSpec, func) {\n\t\t// rule \"trans*:foo\"\n\t\tvar rules = this.rulesReturningSomething(ruleSpec),\n\t\t\tcollectionRules = rules.select(function(ea) {return ea.include('*:') });\n\t\tcollectionRules.forEach(function(rule) {\n\t\t\tvar ruleParts = rule.split('*:');\n\t\t\tfunc.apply(this, ruleParts);\n\t\t}, this);\n\t\treturn collectionRules;\n\t},\n\tforSimpleRulesDo: function(ruleSpec, func) {\n\t\t// rule \"trans:foo\"\n\t\tvar rules = this.rulesReturningSomething(ruleSpec),\n\t\t\tcollectionRules = rules.select(function(ea) {return ea.include('*:') }),\n\t\t\tsimpleRules = rules.withoutAll(collectionRules);\n\t\tsimpleRules.forEach(function(rule) {\n\t\t\tvar ruleParts = rule.split(':');\n\t\t\tfunc.apply(this, ruleParts);\n\t\t}, this);\n\t\treturn simpleRules;\n\t},\n},\n'file handling', {\n\twriteToFile: function(fileName, content) {\n\t\tvar baseURL = URL.codeBase.withFilename(this.modulePath.replace(/\\./g, '/')),\n\t\t\turl = baseURL.withFilename('generated/' + fileName);\n\t\tnew WebResource(url).put(content);\n\t},\n},\n'rule creation', {\n\tcreateRule: function(name, spec) {\n\t\tvar ownRules = spec.rules || [],\n\t\t\targNames = this.argsFromRules(ownRules),\n\t\t\tclassName = this.modulePath + spec.className,\n\t\t\truleAppString = ownRules.length > 0 ? ('\\t' + ownRules.join(' ') + '\\n') : '',\n\t\t\truleStart = name + ' =\\n',\n\t\t\truleReturn = Strings.format('\\t-> { new %s(%s) },', className, argNames.join(', '));\n\t\treturn ruleStart + ruleAppString + ruleReturn;\n\t},\n\targsFromRules: function(rules) {\n\t\tif (!rules) return [];\n\t\treturn rules\n\t\t\t.select(function(ea) { return ea.include(':') })\n\t\t\t.collect(function(ea) { return ea.split(':').last() });\n\t},\n\n\tcreateJSTranslatorSource: function() {\n\t\tvar rules = this.customRules();\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\trules.push(this.createRule(name, ruleSpec));\n\t\t}, this);\n\n\t\tvar head = 'ometa JSTranslator <: Parser {\\n',\n\t\t\tbody = rules.join('\\n'),\n\t\t\tend = '\\n}';\n\n\t\tbody = body.substring(0, body.length-1); // remove last ,\n\n\t\treturn head + body + end;\n\t},\n\twriteAndEvalTranslator: function() {\n\t\tvar source = this.createJSTranslatorSource(),\n\t\t\ttranslated = OMetaSupport.translateToJs(source);\n\t\teval(translated);\n\n\t\tthis.writeToFile('Translator.ometa', source);\n\t},\n\n\n},\n'class creation', {\n\tassignmentsFromArgs: function(argNames) {\n\t\treturn argNames.collect(function(ea) {\n\t\t\treturn Strings.format('\\t\\tthis.%s = %s;', ea, ea);\n\t\t}).join('\\n');\n\t},\n\tparentCallsFromRules: function(ruleSpec) {\n\t\t// new lively.ast.SourceGenerator().parentCallsFromRules({rules: ['trans:foo', 'trans*:bar']})\n\t\tvar parentCalls = [];\n\t\tthis.forCollectionRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\tvar str = Strings.format('\\t\\t%s.forEach(function(node) { node.setParent(this) }, this);', ruleVarName);\n\t\t\tparentCalls.push(str)\n\t\t});\n\n\t\tthis.forSimpleRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\tvar str = Strings.format('\\t\\t%s.setParent(this);', ruleVarName);\n\t\t\tparentCalls.push(str);\n\t\t});\n\n\t\treturn parentCalls.join('\\n');\n\t},\n\tcreateASTClass: function(ruleSpec) {\n\t\tvar className = this.modulePath + ruleSpec.className,\n\t\t\tsuperclassName = this.rootNodeClassName,\n\t\t\targs = this.argsFromRules(ruleSpec.rules),\n\t\t\tsetParentCalls = this.parentCallsFromRules(ruleSpec),\n\t\t\tassignments = this.assignmentsFromArgs(args),\n\t\t\tcategories = [];\n\n\t\t// testing category\n\t\tcategories.push(Strings.format('\\n\\'testing\\', {\\n\\t%s: true,\\n}',\n\t\t\tthis.genTypeProperty(ruleSpec.className)));\n\n\t\t// intializer category\n\t\tif (args.length > 0 && !Properties.own(ruleSpec).include('initializing')) {\n\t\t\tcategories.push(Strings.format(\n\t\t\t\t'\\n\\'initializing\\', {\\n\\tinitialize: function($super, %s) {\\n%s\\n%s\\n\\t},\\n}',\n\t\t\t\targs.join(', '), assignments, setParentCalls));\n\t\t}\n\n\t\t// other categories\n\t\tProperties.own(ruleSpec).without('className', 'rules').forEach(function(catName) {\n\t\t\tvar src = '\\n\\'' + catName + '\\', {\\n',\n\t\t\t\tcategory = ruleSpec[catName],\n\t\t\t\tfunctionNames = Functions.own(category);\n\t\t\tfunctionNames.forEach(function(name) {\n\t\t\t\tsrc += Strings.format('\\t%s: %s,\\n', name, category[name])\n\t\t\t});\n\t\t\tsrc += '}';\n\t\t\tcategories.push(src);\n\t\t});\n\t\t\n\t\tcategories.push(this.visitingCategoryForNode(ruleSpec));\n\n\t\tvar body = categories.join(','),\n\t\t\tdef = Strings.format('%s.subclass(\\'%s\\', %s)', superclassName, className, body);\n\n\t\treturn def\n\t},\n\tgenTypeProperty: function(className) {\n\t\treturn 'is' + className;\n\t},\n\n\tcreateASTClassSourcesFromRules: function() {\n\t\tvar classDefs = this.customClasses();\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\tclassDefs.push(this.createASTClass(ruleSpec));\n\t\t}, this);\n\n\t\treturn classDefs.join('\\n\\n')\n\t},\n\tevalAndWriteClasses: function() {\n\t\tvar src = this.createASTClassSourcesFromRules();\n\t\tsrc += '\\n';\n\t\tsrc += this.abstractVisitorClassSource();\n\t\teval(src);\n\n\t\tvar baseName = 'Nodes',\n\t\t\tmoduleName = this.modulePath + 'generated.' + baseName,\n\t\t\tfileName = baseName + '.js',\n\t\t\tcontent = Strings.format('module(\\'%s\\').requires().toRun(function() {\\n%s\\n});', moduleName, src);\n\t\tthis.writeToFile(fileName, content);\n\t},\n\n},\n'visitor creation', {\n\n\tabstractVisitorClassSource: function() {\n\t\tvar categories = [this.visitingCategoryForAbstractVisitor()/*, this.doubleDispatchCategoryForVisitor()*/];\n\t\treturn Strings.format('Object.subclass(\\'%s\\', %s)', this.visitorClassName, categories.join(',\\n'));\n\t},\n\tvisitingCategoryForAbstractVisitor: function(ruleSpec) {\n\t\tvar src = '\\n\\'visiting\\', {\\n';\n\t\tsrc += '\\tvisit: function(node) { return node.accept(this) },\\n';\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\tsrc += Strings.format('\\tvisit%s: function(node) {},\\n', ruleSpec.className);\n\t\t});\n\t\tsrc += '\\n}'\n\t\treturn src;\n\t},\n\tdoubleDispatchCategoryForVisitor: function() {\n\t\t// new lively.ast.SourceGenerator().doubleDispatchCategoryForVisitor() \n\t\t// currently not used\n\t\tvar createVisitAndAcceptCalls = function(ruleSpec) {\n\t\t\tvar calls = [];\n\t\t\tcalls.push('\\t\\this.visit(node);')\n\t\t\tthis.forCollectionRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\t\tvar str = Strings.format('\\t\\tnode.%s.forEach(function(ea) { this.visit(ea) }, this);', ruleVarName);\n\t\t\t\tcalls.push(str)\n\t\t\t});\n\n\t\t\tthis.forSimpleRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\t\tvar str = Strings.format('\\t\\tthis.visit(node.%s);', ruleVarName);\n\t\t\t\tcalls.push(str);\n\t\t\t});\n\t\t\treturn calls.join('\\n')\n\n\t\t}.bind(this)\n\n\n\t\tvar src = '\\n\\'double dispatch\\', {\\n';\n\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\tsrc += Strings.format('\\taccept%s: function(node) {\\n%s\\n\\t},\\n', ruleSpec.className, createVisitAndAcceptCalls(ruleSpec));\n\t\t});\n\n\n\t\tsrc += '\\n}'\n\n\t\treturn src;\n\n\t},\n\n\n\tvisitingCategoryForNode: function(ruleSpec) {\n\t\tvar category = '\\'visiting\\', {\\n\\taccept: function(visitor) {\\n';\n\t\tcategory += '\\t\\treturn visitor.visit' + ruleSpec.className + '(this);';\n\t\tcategory += '\\n\\t},\\n}';\n\n\t\treturn category;\n\t},\n\n});\n\n\nObject.extend(Function.prototype, {\n\tast: function() {\n\t\tvar parseResult = lively.ast.Parser.parse(this.toString(), 'topLevel');\n\t\tif (!parseResult || Object.isString(parseResult))\n\t\t\treturn parseResult;\n\t\tparseResult = parseResult.children[0];\n\t\tif (parseResult.isVarDeclaration && parseResult.val.isFunction) {\n\t\t\tparseResult.val.setName(parseResult.name);\n\t\t\tparseResult.val.realFunction = this;\n\t\t\treturn parseResult.val;\n\t\t} else if (parseResult.isFunction) {\n\t\t\tparseResult.realFunction = this;\n\t\t}\n\t\treturn parseResult;\n\t},\n});\n\nlively.ast.Visitor.subclass('lively.ast.ClosureAnalyzer',\n'analyzing helper', {\n\tnewScope: function(optParentScope) {\n\t\treturn {\n\t\t\tboundVars: [],\n\t\t\tunboundVars: [],\n\t\t\tlocalUnboundVars: function() { return this.unboundVars.withoutAll(this.boundVars) },\n\t\t}\n\t},\n},\n'analyzing', {\n\tfindUnboundVariableNames: function(func) {\n\t\tvar ast = func.ast();\n\t\tthis.currentScope = this.newScope();\n\t\tthis.visit(ast);\n\t\treturn this.currentScope.localUnboundVars(); // FIXME unbound vars with nested scopes!\n\t},\n},\n'visiting', {\n\tvisitVariable: function(node) {\n\t\tthis.currentScope.unboundVars.push(node.name);\n\t},\n\tvisitVarDeclaration: function(node) {\n\t\tthis.currentScope.boundVars.push(node.name);\n\t\tthis.visitParts(node, ['val']);\n\t},\n\tvisitParts: function(node, parts) {\n\t\tfor (var i = 0; i < parts.length; i++)\n\t\t\tnode[parts[i]].accept(this)\n\t},\n\tvisitSequence: function(node) { node.children.invoke('accept', this) },\n\tvisitArrayLiteral: function(node) { node.elements.invoke('accept', this) },\n\tvisitObjectLiteral: function(node) { node.properties.invoke('accept', this) },\n\tvisitCond: function(node) { this.visitParts(node, ['condExpr', 'trueExpr', 'falseExpr']) },\n\tvisitIf: function(node) { this.visitCond(node) },\n\tvisitWhile: function(node) { this.visitParts(node, ['condExpr', 'body']) },\n\tvisitDoWhile: function(node) { this.visitParts(node, ['body', 'condExpr']) },\n\tvisitFor: function(node) { this.visitParts(node, ['init', 'condExpr', 'upd', 'body']) },\n\tvisitForIn: function(node) { this.visitParts(node, ['name', 'obj', 'body']) },\n\tvisitSet: function(node) { this.visitParts(node, ['left', 'right']) },\n\tvisitModifyingSet: function(node) { this.visitParts(node, ['left', 'right']) },\n\tvisitBinaryOp: function(node) { this.visitParts(node, ['left', 'right']) },\n\tvisitUnaryOp: function(node) { this.visitParts(node, ['expr']) },\n\tvisitPreOp: function(node) { this.visitParts(node, ['expr']) },\n\tvisitPostOp: function(node) { this.visitParts(node, ['expr']) },\n\tvisitGetSlot: function(node) { this.visitParts(node, ['slotName', 'obj']) },\n\tvisitReturn: function(node) { this.visitParts(node, ['expr']) },\n\tvisitWith: function(node) { this.visitParts(node, ['obj', 'body']) },\n\tvisitSend: function(node) { this.visitParts(node, ['recv']) },\n\tvisitCall: function(node) { this.visitParts(node, ['fn']) },\n\tvisitNew: function(node) { this.visitParts(node, ['clsExpr']) },\n\tvisitThrow: function(node) { this.visitParts(node, ['expr']) },\n\tvisitTryCatchFinally: function(node) { this.visitParts(node, ['trySeq', 'catchSeq', 'finallySeq']) },\n\tvisitFunction: function(node) { this.visitParts(node, ['body']) },\n\tvisitObjProperty: function(node) { this.visitParts(node, ['property']) },\n\tvisitSwitch: function(node) { this.visitParts(node, ['expr']) },\n\tvisitCase: function(node) { this.visitParts(node, ['condExpr', 'thenExpr']) },\n\tvisitDefault: function(node) { this.visitParts(node, ['defaultExpr']) },\n});\n\n}) // end of module\n","lastSyntaxHighlightTime":1317841988938,"styleClass":["Browser_codePaneText"],"focusHaloBorderWidth":0.5,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"807":{"_Position":{"__isSmartRef__":true,"id":808},"renderContextTable":{"__isSmartRef__":true,"id":809},"_Extent":{"__isSmartRef__":true,"id":810},"_ClipMode":"auto","_Padding":{"__isSmartRef__":true,"id":811},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":{"__isSmartRef__":true,"id":208},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"808":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"809":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"810":{"x":820,"y":302.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"811":{"x":5,"y":5,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"812":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"813":{"style":{"__isSmartRef__":true,"id":814},"chunkOwner":{"__isSmartRef__":true,"id":806},"storedString":"/*\n * Copyright (c) 2008-2011 Hasso Plattner Institute\n *\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nmodule('lively.ast.Parser').requires('lively.ast.generated.Translator', 'lively.ast.generated.Nodes', 'lively.ast.Interpreter', 'lively.ast.LivelyJSParser').toRun(function() {\n\n\nObject.extend(LivelyJSParser, {\n\thexDigits: \"0123456789abcdef\",\n\tkeywords: (function() {\n\t\tvar keywordWithIdx ={},\n\t\t\tkeywords = [\"break\", \"case\", \"catch\", \"continue\", \"default\", \"delete\", \"do\", \"else\", \"finally\",\n\t\t\t\"for\", \"function\", \"if\", \"in\", \"instanceof\", \"new\", \"return\", \"switch\", \"this\", \"throw\", \"try\",\n\t\t\t\"typeof\", \"var\", \"void\", \"while\", \"with\", \"ometa\", \"debugger\"];\n\t\tfor (var idx = 0; idx < keywords.length; idx++)\n\t\t\tkeywordWithIdx[keywords[idx]] = true;\n\t\treturn keywordWithIdx\n\t})(),\n\t_isKeyword: function(k) {\n\t\treturn this.keywords[k] === true;\n\t},\n});\n\nObject.extend(lively.ast.Parser, {\n\tjsParser: LivelyJSParser,\n\tastTranslator: JSTranslator,\n\tbasicParse: function(source, rule) {\n\t\t// first call the LKJSParser. this will result in a synbolic AST tree.\n\t\t// translate this into real AST objects using JSTranslator\n\t\tvar errorHandler = function() { alert(OMetaSupport.handleErrorDebug.apply(OMetaSupport, arguments)) },\n\t\t\tintermediate = OMetaSupport.matchAllWithGrammar(this.jsParser, rule, source, errorHandler);\n\t\tif (!intermediate || Object.isString(intermediate))\n\t\t\tthrow new Error('Could not parse JS source code: ' + intermediate);\n\t\tvar ast = OMetaSupport.matchWithGrammar(this.astTranslator, 'trans', intermediate);\n\t\tif (!ast || Object.isString(ast))\n\t\t\tthrow new Error('Could not translate symbolic AST tree: ' + ast);\n\t\treturn ast;\n\t},\n\n\tparse: function(src, optRule) { return this.basicParse(src, optRule || 'topLevel') },\n});\n\nlively.ast.Node.addMethods(\n'accessing', {\n\tsetParent: function(parentNode) { return this._parent = parentNode },\n\tgetParent: function(parentNode) { return this._parent },\n\thasParent: function(parentNode) { return this._parent != undefined },\n\tparentSequence: function() {\n\t\treturn this.hasParent() && this.getParent().parentSequence();\n\t},\n\tparentFunction: function() {\n\t\treturn this.hasParent() && this.getParent().parentFunction();\n\t},\n\tastIndex: function() {\n\t\tvar parentFunc = this.parentFunction();\n\t\tif (!parentFunc) throw new Error('astIndex: cannot get parent fucntion of ' + this);\n\t\treturn parentFunc.linearlyListNodesWithoutNestedFunctions().indexOf(this);\n\t},\n\tnodeForAstIndex: function(idx) {\n\t\treturn this.linearlyListNodesWithoutNestedFunctions()[idx]\n\t},\n\tnextStatement: function() {\n\t\tvar node = this, parent;\n\t\twhile (parent = node.getParent()) {\n\t\t\tif (parent.isSequence) {\n\t\t\t\tvar seqIdx = parent.children.indexOf(node);\n\t\t\t\tif (parent.children[seqIdx + 1])\n\t\t\t\t\treturn parent.children[seqIdx + 1]\n\t\t\t}\n\t\t\tnode = parent;\n\t\t}\n\t\treturn null;\n\n\t},\n\n\n},\n'testing', {\n\tisASTNode: true,\n\tisUndefined: function(expr) {\n\t\treturn expr.isVariable && expr.name === 'undefined';\n\t},\n},\n'enumerating', {\n\twithAllChildNodesDo: function(func, parent, nameInParent, depth) {\n\t\t// args of func: node, parent, nameInParent, depth; func returns true if recursive call should be made\n\t\tvar node = this,\n\t\t\tshouldContinue = func(node, parent, nameInParent, depth || 0);\n\t\tif (!shouldContinue) return;\n\t\tthis.doForAllChildNodes(function(childNode, nameInParent) {\n\t\t\tchildNode.withAllChildNodesDo(func, node, nameInParent, depth ? depth + 1 : 1)\n\t\t});\n\t},\n\twithAllChildNodesDoPostOrder: function(func, stopFunc, parent, nameInParent, depth) {\n\t\t// args of func: node, parent, nameInParent, depth; func returns true if recursive call should be made\n\t\tvar node = this,\n\t\t\tshouldStop = stopFunc && stopFunc(node, parent, nameInParent, depth || 0);\n\t\tif (shouldStop) return;\n\t\tthis.doForAllChildNodes(function(childNode, nameInParent) {\n\t\t\tchildNode.withAllChildNodesDoPostOrder(func, stopFunc, node, nameInParent, depth ? depth + 1 : 1)\n\t\t});\n\t\tfunc(node, parent, nameInParent, depth || 0);\n\t},\n\n\tdoForAllChildNodes: function(func) {\n\t\tfor (var name in this) {\n\t\t\tif (!this.hasOwnProperty(name) || name == '_parent') continue;\n\t\t\tvar value = this[name];\n\t\t\tif (value.isASTNode) { \n\t\t\t\tfunc(value, name, null)\n\t\t\t} else if (Object.isArray(value)) {\n\t\t\t\tvalue.forEach(function(item, i) { if (item.isASTNode) func(item, name, i) });\n\t\t\t}\n\t\t}\n\t},\n\tnodesMatching: function(matchFunc) {\n\t\tvar result = [];\n\t\tthis.withAllChildNodesDo(function(node, parent, nameInParent, depth) {\n\t\t\tif (matchFunc(node, parent, nameInParent, depth)) result.push(node);\n\t\t\treturn true;\n\t\t});\n\t\treturn result;\n\t},\n\tlinearlyListNodes: function() {\n\t\tvar nodes = [];\n\t\tthis.withAllChildNodesDoPostOrder(function(node) { nodes.push(node) });\n\t\treturn nodes;\n\t},\n\tlinearlyListNodesWithoutNestedFunctions: function() {\n\t\tvar root = this, nodes = [];\n\t\tthis.withAllChildNodesDoPostOrder(\n\t\t\tfunction(node) { nodes.push(node) },\n\t\t\tfunction(node) { return node.isFunction && node !== root } // stopFunc\n\t\t);\n\t\treturn nodes;\n\t},\n\n},\n'replacing', {\n\treplaceNodesMatching: function(testFunc, replacementNodeOrFunction) {\n\t\tvar nodes = this.nodesMatching(testFunc);\n\t\tnodes.forEach(function(node) {\n\t\t\t// Careful here! One could directly use node.replaceWith but if the replacement function\n\t\t\t// reuses node and replaces it already then parent will be changed!\n\t\t\tvar parent = node.getParent();\n\t\t\tif (!parent) throw new Error('No parent for node in replaceNodesMatching ' + node);\n\t\t\tvar replacementNode = (typeof replacementNodeOrFunction == 'function') ?\n\t\t\t\treplacementNodeOrFunction(node) : replacementNodeOrFunction;\n\t\t\tparent.replaceChildNode(node, replacementNode);\n\t\t})\n\t\treturn this;\n\t},\n\treplaceWith: function(otherNode) {\n\t\tif (!this.hasParent()) throw new Error('Need parent node for replaceWith but cannot find it ' + this);\n\t\tthis.getParent().replaceChildNode(this, otherNode);\n\t\treturn otherNode;\n\t},\n\treplaceChildNode: function(childNode, newNode) {\n\t\t// find name if childNode in me\n\t\tvar slotName, idx;\n\t\tthis.doForAllChildNodes(function(node, nameInParent, i) {\n\t\t\tif (node !== childNode) return;\n\t\t\tslotName = nameInParent;\n\t\t\tidx = i;\n\t\t});\n\t\tif (slotName === undefined)\n\t\t\tthrow new Error('Cannot find childNode in me! (#replaceChildNode)');\n\t\tif (idx === undefined || idx === null) {\n\t\t\tthis[slotName] = newNode;\n\t\t} else { // Array\n\t\t\tthis[slotName][idx] = newNode;\n\t\t}\n\t\tnewNode.setParent(this);\n\t},\n\n\n},\n'evaluation', {\n\teval: function() {\n\t\ttry {\n\t\t\tvar js = this.asJS(),\n\t\t\t\tsrc = '(' + js + ')',\n\t\t\t\tresult = eval(src);\n\t\t} catch(e) {\n\t\t\talert('Could not eval ' + js + ' because:\\n' + e + '\\n' + e.stack);\n\t\t}\n\t\treturn result;\n\t},\n},\n'debugging', {\n\terror: function(msg) { throw new Error(msg) },\n\tindent: function(depth) { return Strings.indent('', '\t', depth) },\n\ttoString: function() { return this.constructor.name },\n\tprintTree: function(postOrder) {\n\t\tvar nodeStrings = [], idx = 0,\n\t\t\tenumFunc = postOrder ? 'withAllChildNodesDoPostOrder' : 'withAllChildNodesDo';\n\t\tthis[enumFunc](function(node, parent, nameInParent, depth) {\n\t\t\tnodeStrings.push(idx.toString() + ' ' +\n\t\t\t\tStrings.indent(node.constructor.name + '(' + nameInParent + ')', ' ', depth));\n\t\t\tidx++;\n\t\t\treturn true;\n\t\t})\n\t\treturn nodeStrings.join('\\n');\n\t},\n\tprintConstructorCall: function(/* args */) {\n\t\tvar call = 'new ' + this.constructor.type + '(', argCalls = [];\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i], argCall = '';\n\t\t\tif (Object.isArray(arg)) {\n\t\t\t\targCall += '[';\n\t\t\t\targCall += arg.collect(function(ea) {return ea.isASTNode ? ea.printConstruction() : ea}).join(',');\n\t\t\t\targCall += ']';\n\t\t\t} else if (arg.isASTNode) {\n\t\t\t\targCall += arg.printConstruction();\n\t\t\t} else {\n\t\t\t\targCall += arg;\n\t\t\t}\n\t\t\targCalls.push(argCall);\n\t\t}\n\t\tcall += argCalls.join(',');\n\t\tcall += ')';\n\t\treturn call;\n\t},\n\n});\nObject.subclass('lively.ast.SourceGenerator',\n// usage:\n// gen = new lively.ast.SourceGenerator()\n// gen.writeAndEvalTranslator()\n// gen.evalAndWriteClasses()\n// lively.ast.Parser.astTranslator = JSTranslator\n// lively.ast.Parser.jsParser = LivelyJSParser\n'settings', {\n\tcustomRules: function() { return ['trans = [:t apply(t):ans] -> ans,'] },\n\tcustomClasses: function() { return [\"Object.subclass('\" + this.rootNodeClassName + \"');\"] },\n\n\ttranslatorRules: function() {\n\t\tvar names = this.constructor.categories['translator rules'];\n\t\t\tresult = {};\n\t\tnames.forEach(function(name) { result[name] = this[name] }, this);\n\t\treturn result;\n\t},\n\tmodulePath: 'lively.ast.',\n\trootNodeClassName: 'lively.ast.Node',\n\tvisitorClassName: 'lively.ast.Visitor',\n},\n'translator rules', {\n\tbegin: {\n\t\tclassName: 'Sequence', rules: [':pos', 'trans*:children', 'end'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.children) },\n\t\t\ttoString: function() {return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.children.join(','))\n\t\t\t},\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar indent = this.indent(depth || 0);\n\t\t\t\tdepth = depth || -1;\n\t\t\t\treturn this.children.invoke('asJS', depth + 1).join(';\\n' + indent);\n\t\t\t},\n\t\t},\n\t\tinsertion: {\n\t\t\tinsertBefore: function(newNode, existingNode) {\n\t\t\t\tfor (var i = 0; i < this.children.length; i++)\n\t\t\t\t\tif (this.children[i].nodesMatching(function(node) { return node === existingNode }).length > 0)\n\t\t\t\t\t\tbreak;\n\t\t\t\tif (!this.children[i])\n\t\t\t\t\tthrow dbgOn(new Error('insertBefore: ' + existingNode + ' not in ' + this));\n\t\t\t\treturn this.insertAt(newNode, i);\n\t\t\t},\n\t\t\tinsertAt: function(newNode, idx) {\n\t\t\t\tthis.children.pushAt(newNode, idx);\n\t\t\t\tnewNode.setParent(this);\n\t\t\t\treturn newNode;\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tparentSequence: function() { return this },\n\t\t},\n\t},\n\tnumber: {\n\t\tclassName: 'Number', rules: [':pos', ':value'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.pos, this.value) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)', this.constructor.name, this.value) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.value },\n\t\t},\n\t},\n\tstring: {\n\t\tclassName: 'String', rules: [':pos', ':value'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.value + '\"') },\n\t\t\ttoString: function() { return Strings.format('%s(%s)', this.constructor.name, this.value) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return '\"' + this.value + '\"' },\n\t\t},\n\t},\n\tcondExpr: {\n\t\tclassName: 'Cond', rules: [':pos', 'trans:condExpr', 'trans:trueExpr', 'trans:falseExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s?%s:%s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('(%s) ? (%s) : (%s)',\n\t\t\t\t\tthis.condExpr.asJS(depth), this.trueExpr.asJS(depth), this.falseExpr.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'if': {\n\t\tclassName: 'If', rules: [':pos', 'trans:condExpr', 'trans:trueExpr', 'trans:falseExpr'],\n\t\tinitializing: {\n\t\t\tinitialize: function($super, pos, condExpr, trueExpr, falseExpr) {\n\t\t\t\tthis.pos = pos;\n\t\t\t\tthis.condExpr = condExpr;\n\t\t\t\t// FIXME actually this could be done with OMeta\n\t\t\t\tthis.trueExpr = trueExpr.isSequence || this.isUndefined(trueExpr) ? trueExpr : new lively.ast.Sequence(trueExpr.pos, [trueExpr]);\n\t\t\t\tthis.falseExpr = falseExpr.isSequence || this.isUndefined(falseExpr) ? falseExpr : new lively.ast.Sequence(trueExpr.pos, [falseExpr]);\n\t\t\t\tcondExpr.setParent(this);\n\t\t\t\tthis.trueExpr.setParent(this);\n\t\t\t\tthis.falseExpr.setParent(this);\n\t\t\t},\n\t\t},\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s?%s:%s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.trueExpr, this.falseExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar str = Strings.format('if (%s) {%s}',\n\t\t\t\t\tthis.condExpr.asJS(depth), this.trueExpr.asJS(depth));\n\t\t\t\tif (!this.isUndefined(this.falseExpr))\n\t\t\t\t\tstr += ' else {' + this.falseExpr.asJS(depth) + '}';\n\t\t\t\treturn str;\n\t\t\t},\n\t\t},\n\t},\n\t'while': {\n\t\tclassName: 'While', rules: [':pos', 'trans:condExpr', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s?%s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('while (%s) {%s}',\n\t\t\t\t\tthis.condExpr.asJS(depth), this.body.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'doWhile': {\n\t\tclassName: 'DoWhile', rules: [':pos', 'trans:body', 'trans:condExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.body, this.condExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s while%s)',\n\t\t\t\tthis.constructor.name, this.body, this.condExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('do {%s} while (%s);',\n\t\t\t\t\tthis.body.asJS(depth), this.condExpr.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'for': {\n\t\tclassName: 'For', rules: [':pos', 'trans:init', 'trans:condExpr', 'trans:upd', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.init, this.condExpr, this.upd, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s;%s;%s do %s)',\n\t\t\t\tthis.constructor.name, this.init, this.condExpr, this.upd, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('for (%s; %s; %s) {%s}',\n\t\t\t\t\tthis.init.asJS(depth), this.condExpr.asJS(depth), this.upd.asJS(depth), this.body.asJS(depth));\n\t\t\t},\n\t\t},\n\t}, \n\tforIn: {\n\t\tclassName: 'ForIn', rules: [':pos', 'trans:name', 'trans:obj', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.name, this.obj, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s in %s do %s)',\n\t\t\t\tthis.constructor.name, this.name, this.obj, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('for (var %s in %s) {%s}',\n\t\t\t\t\tthis.name.asJS(depth), this.obj.asJS(depth), this.body.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\tset: {\n\t\tclassName: 'Set', rules: [':pos', 'trans:left', 'trans:right'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.left, this.right) },\n\t\t\ttoString: function() { return Strings.format('%s(%s = %s)',\n\t\t\t\tthis.constructor.name, this.left, this.right) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.left.asJS(depth) + ' = ' + this.right.asJS(depth) },\n\t\t},\n\t},\n\tmset: {\n\t\tclassName: 'ModifyingSet', rules: [':pos', 'trans:left', ':name', 'trans:right'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.left, '\"' + this.name + '\"', this.right) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s %s)',\n\t\t\t\tthis.constructor.name, this.left, this.name, this.right) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.left.asJS(depth) + ' ' + this.name + '= ' + this.right.asJS(depth) },\n\t\t},\n\t},\n\tbinop: {\n\t\tclassName: 'BinaryOp', rules: [':pos', ':name', 'trans:left', 'trans:right'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.name + '\"', this.left, this.right) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s %s)',\n\t\t\t\tthis.constructor.name, this.left, this.name, this.right) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.left.asJS(depth) + ' ' + this.name + ' ' + this.right.asJS(depth) },\n\t\t},\n\t},\n\tunop: {\n\t\tclassName: 'UnaryOp', rules: [':pos', ':name', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.name + '\"', this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s%s)',\n\t\t\t\tthis.constructor.name, this.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.name + this.expr.asJS(depth) },\n\t\t},\n\t},\n\tpreop: {\n\t\tclassName: 'PreOp', rules: [':pos', ':name', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"' + this.name+'\"', this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s%s)',\n\t\t\t\tthis.constructor.name, this.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.name + this.expr.asJS(depth) },\n\t\t},\n\t},\n\tpostop: {\n\t\tclassName: 'PostOp', rules: [':pos', ':name', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s%s)',\n\t\t\t\tthis.constructor.name, this.expr, this.name) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.expr.asJS(depth) + this.name },\n\t\t},\n\t},\n\t'this': {\n\t\tclassName: 'This', rules: [':pos'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos) },\n\t\t\ttoString: function() { return this.constructor.name },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'this' },\n\t\t},\n\t},\n\tget: {\n\t\tclassName: 'Variable', rules: [':pos', ':name'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"') },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.name) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return this.name },\n\t\t},\n\t},\n\tgetp: {\n\t\tclassName: 'GetSlot', rules: [':pos', 'trans:slotName', 'trans:obj'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.slotName, this.obj) },\n\t\t\ttoString: function() { return Strings.format('%s(%s[%s])',\n\t\t\t\tthis.constructor.name, this.obj, this.slotName) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar objJS = this.obj.asJS(depth);\n\t\t\t\tif (this.obj.isFunction) objJS = '(' + objJS + ')';\n\t\t\t\treturn objJS + '[' + this.slotName.asJS(depth) + ']';\n\t\t\t},\n\t\t},\n\t},\n\t'break': {\n\t\tclassName: 'Break', rules: [':pos'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'break' },\n\t\t},\n\t},\n\t'continue': {\n\t\tclassName: 'Continue', rules: [':pos'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'continue' },\n\t\t},\n\t},\n\tarr: {\n\t\tclassName: 'ArrayLiteral', rules: [':pos', 'trans*:elements'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.elements) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.elements.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return '[' + this.elements.invoke('asJS').join(',') + ']' },\n\t\t},\n\t},\n\t'return': {\n\t\tclassName: 'Return', rules: [':pos', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'return ' + this.expr.asJS(depth) },\n\t\t},\n\t},\n\t'with': {\n\t\tclassName: 'With', rules: [':pos', 'trans:obj', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.obj, this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s)',\n\t\t\t\tthis.constructor.name, this.obj, this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'with (' + this.obj.asJS(depth) + ') {' + this.body.asJS(depth) + '}' },\n\t\t},\n\t},\n\tsend: {\n\t\tclassName: 'Send', rules: [':pos', ':name', 'trans:recv', 'trans*:args'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.recv, this.args) },\n\t\t\ttoString: function() { return Strings.format('%s(%s[%s](%s))',\n\t\t\t\tthis.constructor.name, this.recv, this.name, this.args.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar recvJS = this.recv.asJS(depth);\n\t\t\t\tif (this.recv.isFunction) recvJS = '(' + recvJS + ')';\n\t\t\t\treturn Strings.format('%s[\"%s\"](%s)',\n\t\t\t\t\trecvJS, this.name, this.args.invoke('asJS').join(','));\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tgetName: function() { return this.name },\n\t\t},\n\t},\n\tcall: {\n\t\tclassName: 'Call', rules: [':pos', 'trans:fn', 'trans*:args'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.fn, this.args) },\n\t\t\ttoString: function() { return Strings.format('%s(%s(%s))',\n\t\t\t\tthis.constructor.name, this.fn, this.args.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('%s(%s)',\n\t\t\t\t\tthis.fn.asJS(depth), this.args.invoke('asJS').join(','));\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tgetName: function() { return this.fn.name },\n\t\t},\n\t},\n\t'new': {\n\t\tclassName: 'New', rules: [':pos', 'trans:clsExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.clsExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s(%s))',\n\t\t\t\tthis.constructor.name, this.clsExpr) },\n\t\t},\n\t},\n\t'var': {\n\t\tclassName: 'VarDeclaration', rules: [':pos', ':name', 'trans:val'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.val) },\n\t\t\ttoString: function() { return Strings.format('%s(%s = %s)',\n\t\t\t\tthis.constructor.name, this.name, this.val) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('var %s = %s', this.name, this.val.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'throw': {\n\t\tclassName: 'Throw', rules: [':pos', 'trans:expr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.expr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s)',\n\t\t\t\tthis.constructor.name, this.expr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'throw ' + this.expr.asJS(depth) },\n\t\t},\n\t},\n\t'try': {\n\t\tclassName: 'TryCatchFinally', rules: [':pos', 'trans:trySeq', ':errName', 'trans:catchSeq', 'trans:finallySeq'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.trySeq, '\"'+this.errName+'\"', this.catchSeq, this.finallySeq) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s %s)',\n\t\t\t\tthis.constructor.name, this.trySeq, this.catchSeq, this.finallySeq) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\tvar baseIndent = this.indent(depth-1),\n\t\t\t\t\tindent = this.indent(depth),\n\t\t\t\t\tstr = 'try {\\n' + indent + this.trySeq.asJS(depth) + '\\n' + baseIndent + '}';\n\t\t\t\tif (!this.isUndefined(this.catchSeq))\n\t\t\t\t\tstr += ' catch(' + this.errName + ') {\\n' +\n\t\t\t\t\t\tindent + this.catchSeq.asJS(depth) + '\\n' + baseIndent + '}';\n\t\t\t\tif (!this.isUndefined(this.finallySeq))\n\t\t\t\t\tstr += ' finally {\\n' + indent + this.finallySeq.asJS(depth) + '\\n' + baseIndent + '}';\n\t\t\t\treturn str;\n\t\t\t},\n\t\t},\n\t},\n\tfunc: {\n\t\tclassName: 'Function', rules: [':pos', ':args', 'trans:body'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.args.collect(function(ea) { return '\"' + ea + '\"' }), this.body) },\n\t\t\ttoString: function() { return Strings.format('%s(function(%s) %s)',\n\t\t\t\tthis.constructor.name, this.args.join(','), this.body) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('function%s(%s) {\\n%s\\n}',\n\t\t\t\t\tthis.name ? ' ' + this.name : '',this.args.join(','),\n\t\t\t\t\tthis.indent(depth+1) + this.body.asJS(depth+1));\n\t\t\t},\n\t\t},\n\t\taccessing: {\n\t\t\tsetName: function(name) { this.name = name },\n\t\t\tgetName: function() { return this.name },\n\t\t\tparentFunction: function() { return this },\n\t\t\tstatements: function() { return this.body.children },\n\t\t},\n\t},\n\tjson: {\n\t\tclassName: 'ObjectLiteral', rules: [':pos', 'trans*:properties'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.properties) },\n\t\t\ttoString: function() { return Strings.format('%s({%s})',\n\t\t\t\tthis.constructor.name, this.properties.join(',')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn '{' + this.properties.invoke('asJS').join(',') + '}';\n\t\t\t},\n\t\t},\n\t},\n\tbinding: {\n\t\tclassName: 'ObjProperty', rules: [':pos', ':name', 'trans:property'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, '\"'+this.name+'\"', this.property) },\n\t\t\ttoString: function() { return Strings.format('%s(%s: %s)',\n\t\t\t\tthis.constructor.name, this.name, this.property) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('\"%s\": %s', this.name, this.property.asJS(depth));\n\t\t\t},\n\t\t},\n\t},\n\t'switch': {\n\t\tclassName: 'Switch', rules: [':pos', 'trans:expr', 'trans*:cases'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.expr, this.cases) },\n\t\t\ttoString: function() { return Strings.format('%s(%s %s)',\n\t\t\t\tthis.constructor.name, this.expr, this.cases.join('\\n')) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn Strings.format('switch (%s) {%s}',\n\t\t\t\t\tthis.expr.asJS(depth), this.cases.invoke('asJS').join('\\n'));\n\t\t\t},\n\t\t},\n\t},\n\t'case': {\n\t\tclassName: 'Case', rules: [':pos', 'trans:condExpr', 'trans:thenExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.condExpr, this.thenExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(%s: %s)',\n\t\t\t\tthis.constructor.name, this.condExpr, this.thenExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) {\n\t\t\t\treturn 'case ' + this.condExpr.asJS(depth) + ': ' + this.thenExpr.asJS(depth);\n\t\t\t},\n\t\t},\n\t},\n\t'default': {\n\t\tclassName: 'Default', rules: [':pos', 'trans:defaultExpr'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.defaultExpr) },\n\t\t\ttoString: function() { return Strings.format('%s(default: %s)',\n\t\t\t\tthis.constructor.name, this.defaultExpr) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return 'default: ' + this.defaultExpr.asJS(depth) },\n\t\t},\n\t},\n\t'regex': {\n\t\tclassName: 'Regex', rules: [':pos', ':exprString', ':flags'],\n\t\tdebugging: {\n\t\t\tprintConstruction: function() { return this.printConstructorCall(this.pos, this.exprString, this.flags) },\n\t\t\ttoString: function() { return Strings.format('(/%s/%s)', this.exprString, this.flags) },\n\t\t},\n\t\tconversion: {\n\t\t\tasJS: function(depth) { return '/' + this.exprString + '/' + this.flags},\n\t\t},\n\t},\n},\n'rule helper', {\n\trulesReturningSomething: function(ruleSpec) {\n\t\tif (!ruleSpec.rules) return [];\t\n\t\treturn ruleSpec.rules.reject(function(ea) { return ea.startsWith(':') || !ea.include(':') });\n\t},\n\tforCollectionRulesDo: function(ruleSpec, func) {\n\t\t// rule \"trans*:foo\"\n\t\tvar rules = this.rulesReturningSomething(ruleSpec),\n\t\t\tcollectionRules = rules.select(function(ea) {return ea.include('*:') });\n\t\tcollectionRules.forEach(function(rule) {\n\t\t\tvar ruleParts = rule.split('*:');\n\t\t\tfunc.apply(this, ruleParts);\n\t\t}, this);\n\t\treturn collectionRules;\n\t},\n\tforSimpleRulesDo: function(ruleSpec, func) {\n\t\t// rule \"trans:foo\"\n\t\tvar rules = this.rulesReturningSomething(ruleSpec),\n\t\t\tcollectionRules = rules.select(function(ea) {return ea.include('*:') }),\n\t\t\tsimpleRules = rules.withoutAll(collectionRules);\n\t\tsimpleRules.forEach(function(rule) {\n\t\t\tvar ruleParts = rule.split(':');\n\t\t\tfunc.apply(this, ruleParts);\n\t\t}, this);\n\t\treturn simpleRules;\n\t},\n},\n'file handling', {\n\twriteToFile: function(fileName, content) {\n\t\tvar baseURL = URL.codeBase.withFilename(this.modulePath.replace(/\\./g, '/')),\n\t\t\turl = baseURL.withFilename('generated/' + fileName);\n\t\tnew WebResource(url).put(content);\n\t},\n},\n'rule creation', {\n\tcreateRule: function(name, spec) {\n\t\tvar ownRules = spec.rules || [],\n\t\t\targNames = this.argsFromRules(ownRules),\n\t\t\tclassName = this.modulePath + spec.className,\n\t\t\truleAppString = ownRules.length > 0 ? ('\\t' + ownRules.join(' ') + '\\n') : '',\n\t\t\truleStart = name + ' =\\n',\n\t\t\truleReturn = Strings.format('\\t-> { new %s(%s) },', className, argNames.join(', '));\n\t\treturn ruleStart + ruleAppString + ruleReturn;\n\t},\n\targsFromRules: function(rules) {\n\t\tif (!rules) return [];\n\t\treturn rules\n\t\t\t.select(function(ea) { return ea.include(':') })\n\t\t\t.collect(function(ea) { return ea.split(':').last() });\n\t},\n\n\tcreateJSTranslatorSource: function() {\n\t\tvar rules = this.customRules();\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\trules.push(this.createRule(name, ruleSpec));\n\t\t}, this);\n\n\t\tvar head = 'ometa JSTranslator <: Parser {\\n',\n\t\t\tbody = rules.join('\\n'),\n\t\t\tend = '\\n}';\n\n\t\tbody = body.substring(0, body.length-1); // remove last ,\n\n\t\treturn head + body + end;\n\t},\n\twriteAndEvalTranslator: function() {\n\t\tvar source = this.createJSTranslatorSource(),\n\t\t\ttranslated = OMetaSupport.translateToJs(source);\n\t\teval(translated);\n\n\t\tthis.writeToFile('Translator.ometa', source);\n\t},\n\n\n},\n'class creation', {\n\tassignmentsFromArgs: function(argNames) {\n\t\treturn argNames.collect(function(ea) {\n\t\t\treturn Strings.format('\\t\\tthis.%s = %s;', ea, ea);\n\t\t}).join('\\n');\n\t},\n\tparentCallsFromRules: function(ruleSpec) {\n\t\t// new lively.ast.SourceGenerator().parentCallsFromRules({rules: ['trans:foo', 'trans*:bar']})\n\t\tvar parentCalls = [];\n\t\tthis.forCollectionRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\tvar str = Strings.format('\\t\\t%s.forEach(function(node) { node.setParent(this) }, this);', ruleVarName);\n\t\t\tparentCalls.push(str)\n\t\t});\n\n\t\tthis.forSimpleRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\tvar str = Strings.format('\\t\\t%s.setParent(this);', ruleVarName);\n\t\t\tparentCalls.push(str);\n\t\t});\n\n\t\treturn parentCalls.join('\\n');\n\t},\n\tcreateASTClass: function(ruleSpec) {\n\t\tvar className = this.modulePath + ruleSpec.className,\n\t\t\tsuperclassName = this.rootNodeClassName,\n\t\t\targs = this.argsFromRules(ruleSpec.rules),\n\t\t\tsetParentCalls = this.parentCallsFromRules(ruleSpec),\n\t\t\tassignments = this.assignmentsFromArgs(args),\n\t\t\tcategories = [];\n\n\t\t// testing category\n\t\tcategories.push(Strings.format('\\n\\'testing\\', {\\n\\t%s: true,\\n}',\n\t\t\tthis.genTypeProperty(ruleSpec.className)));\n\n\t\t// intializer category\n\t\tif (args.length > 0 && !Properties.own(ruleSpec).include('initializing')) {\n\t\t\tcategories.push(Strings.format(\n\t\t\t\t'\\n\\'initializing\\', {\\n\\tinitialize: function($super, %s) {\\n%s\\n%s\\n\\t},\\n}',\n\t\t\t\targs.join(', '), assignments, setParentCalls));\n\t\t}\n\n\t\t// other categories\n\t\tProperties.own(ruleSpec).without('className', 'rules').forEach(function(catName) {\n\t\t\tvar src = '\\n\\'' + catName + '\\', {\\n',\n\t\t\t\tcategory = ruleSpec[catName],\n\t\t\t\tfunctionNames = Functions.own(category);\n\t\t\tfunctionNames.forEach(function(name) {\n\t\t\t\tsrc += Strings.format('\\t%s: %s,\\n', name, category[name])\n\t\t\t});\n\t\t\tsrc += '}';\n\t\t\tcategories.push(src);\n\t\t});\n\t\t\n\t\tcategories.push(this.visitingCategoryForNode(ruleSpec));\n\n\t\tvar body = categories.join(','),\n\t\t\tdef = Strings.format('%s.subclass(\\'%s\\', %s)', superclassName, className, body);\n\n\t\treturn def\n\t},\n\tgenTypeProperty: function(className) {\n\t\treturn 'is' + className;\n\t},\n\n\tcreateASTClassSourcesFromRules: function() {\n\t\tvar classDefs = this.customClasses();\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\tclassDefs.push(this.createASTClass(ruleSpec));\n\t\t}, this);\n\n\t\treturn classDefs.join('\\n\\n')\n\t},\n\tevalAndWriteClasses: function() {\n\t\tvar src = this.createASTClassSourcesFromRules();\n\t\tsrc += '\\n';\n\t\tsrc += this.abstractVisitorClassSource();\n\t\teval(src);\n\n\t\tvar baseName = 'Nodes',\n\t\t\tmoduleName = this.modulePath + 'generated.' + baseName,\n\t\t\tfileName = baseName + '.js',\n\t\t\tcontent = Strings.format('module(\\'%s\\').requires().toRun(function() {\\n%s\\n});', moduleName, src);\n\t\tthis.writeToFile(fileName, content);\n\t},\n\n},\n'visitor creation', {\n\n\tabstractVisitorClassSource: function() {\n\t\tvar categories = [this.visitingCategoryForAbstractVisitor()/*, this.doubleDispatchCategoryForVisitor()*/];\n\t\treturn Strings.format('Object.subclass(\\'%s\\', %s)', this.visitorClassName, categories.join(',\\n'));\n\t},\n\tvisitingCategoryForAbstractVisitor: function(ruleSpec) {\n\t\tvar src = '\\n\\'visiting\\', {\\n';\n\t\tsrc += '\\tvisit: function(node) { return node.accept(this) },\\n';\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\tsrc += Strings.format('\\tvisit%s: function(node) {},\\n', ruleSpec.className);\n\t\t});\n\t\tsrc += '\\n}'\n\t\treturn src;\n\t},\n\tdoubleDispatchCategoryForVisitor: function() {\n\t\t// new lively.ast.SourceGenerator().doubleDispatchCategoryForVisitor() \n\t\t// currently not used\n\t\tvar createVisitAndAcceptCalls = function(ruleSpec) {\n\t\t\tvar calls = [];\n\t\t\tcalls.push('\\t\\this.visit(node);')\n\t\t\tthis.forCollectionRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\t\tvar str = Strings.format('\\t\\tnode.%s.forEach(function(ea) { this.visit(ea) }, this);', ruleVarName);\n\t\t\t\tcalls.push(str)\n\t\t\t});\n\n\t\t\tthis.forSimpleRulesDo(ruleSpec, function(rule, ruleVarName) {\n\t\t\t\tvar str = Strings.format('\\t\\tthis.visit(node.%s);', ruleVarName);\n\t\t\t\tcalls.push(str);\n\t\t\t});\n\t\t\treturn calls.join('\\n')\n\n\t\t}.bind(this)\n\n\n\t\tvar src = '\\n\\'double dispatch\\', {\\n';\n\n\t\tProperties.forEachOwn(this.translatorRules(), function(name, ruleSpec) {\n\t\t\tsrc += Strings.format('\\taccept%s: function(node) {\\n%s\\n\\t},\\n', ruleSpec.className, createVisitAndAcceptCalls(ruleSpec));\n\t\t});\n\n\n\t\tsrc += '\\n}'\n\n\t\treturn src;\n\n\t},\n\n\n\tvisitingCategoryForNode: function(ruleSpec) {\n\t\tvar category = '\\'visiting\\', {\\n\\taccept: function(visitor) {\\n';\n\t\tcategory += '\\t\\treturn visitor.visit' + ruleSpec.className + '(this);';\n\t\tcategory += '\\n\\t},\\n}';\n\n\t\treturn category;\n\t},\n\n});\n\n\nObject.extend(Function.prototype, {\n\tast: function() {\n\t\tvar parseResult = lively.ast.Parser.parse(this.toString(), 'topLevel');\n\t\tif (!parseResult || Object.isString(parseResult))\n\t\t\treturn parseResult;\n\t\tparseResult = parseResult.children[0];\n\t\tif (parseResult.isVarDeclaration && parseResult.val.isFunction) {\n\t\t\tparseResult.val.setName(parseResult.name);\n\t\t\tparseResult.val.realFunction = this;\n\t\t\treturn parseResult.val;\n\t\t} else if (parseResult.isFunction) {\n\t\t\tparseResult.realFunction = this;\n\t\t}\n\t\treturn parseResult;\n\t},\n});\n\nlively.ast.Visitor.subclass('lively.ast.ClosureAnalyzer',\n'analyzing helper', {\n\tnewScope: function(optParentScope) {\n\t\treturn {\n\t\t\tboundVars: [],\n\t\t\tunboundVars: [],\n\t\t\tlocalUnboundVars: function() { return this.unboundVars.withoutAll(this.boundVars) },\n\t\t}\n\t},\n},\n'analyzing', {\n\tfindUnboundVariableNames: function(func) {\n\t\tvar ast = func.ast();\n\t\tthis.currentScope = this.newScope();\n\t\tthis.visit(ast);\n\t\treturn this.currentScope.localUnboundVars(); // FIXME unbound vars with nested scopes!\n\t},\n},\n'visiting', {\n\tvisitVariable: function(node) {\n\t\tthis.currentScope.unboundVars.push(node.name);\n\t},\n\tvisitVarDeclaration: function(node) {\n\t\tthis.currentScope.boundVars.push(node.name);\n\t\tthis.visitParts(node, ['val']);\n\t},\n\tvisitParts: function(node, parts) {\n\t\tfor (var i = 0; i < parts.length; i++)\n\t\t\tnode[parts[i]].accept(this)\n\t},\n\tvisitSequence: function(node) { node.children.invoke('accept', this) },\n\tvisitArrayLiteral: function(node) { node.elements.invoke('accept', this) },\n\tvisitObjectLiteral: function(node) { node.properties.invoke('accept', this) },\n\tvisitCond: function(node) { this.visitParts(node, ['condExpr', 'trueExpr', 'falseExpr']) },\n\tvisitIf: function(node) { this.visitCond(node) },\n\tvisitWhile: function(node) { this.visitParts(node, ['condExpr', 'body']) },\n\tvisitDoWhile: function(node) { this.visitParts(node, ['body', 'condExpr']) },\n\tvisitFor: function(node) { this.visitParts(node, ['init', 'condExpr', 'upd', 'body']) },\n\tvisitForIn: function(node) { this.visitParts(node, ['name', 'obj', 'body']) },\n\tvisitSet: function(node) { this.visitParts(node, ['left', 'right']) },\n\tvisitModifyingSet: function(node) { this.visitParts(node, ['left', 'right']) },\n\tvisitBinaryOp: function(node) { this.visitParts(node, ['left', 'right']) },\n\tvisitUnaryOp: function(node) { this.visitParts(node, ['expr']) },\n\tvisitPreOp: function(node) { this.visitParts(node, ['expr']) },\n\tvisitPostOp: function(node) { this.visitParts(node, ['expr']) },\n\tvisitGetSlot: function(node) { this.visitParts(node, ['slotName', 'obj']) },\n\tvisitReturn: function(node) { this.visitParts(node, ['expr']) },\n\tvisitWith: function(node) { this.visitParts(node, ['obj', 'body']) },\n\tvisitSend: function(node) { this.visitParts(node, ['recv']) },\n\tvisitCall: function(node) { this.visitParts(node, ['fn']) },\n\tvisitNew: function(node) { this.visitParts(node, ['clsExpr']) },\n\tvisitThrow: function(node) { this.visitParts(node, ['expr']) },\n\tvisitTryCatchFinally: function(node) { this.visitParts(node, ['trySeq', 'catchSeq', 'finallySeq']) },\n\tvisitFunction: function(node) { this.visitParts(node, ['body']) },\n\tvisitObjProperty: function(node) { this.visitParts(node, ['property']) },\n\tvisitSwitch: function(node) { this.visitParts(node, ['expr']) },\n\tvisitCase: function(node) { this.visitParts(node, ['condExpr', 'thenExpr']) },\n\tvisitDefault: function(node) { this.visitParts(node, ['defaultExpr']) },\n});\n\n}) // end of module\n","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"814":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"815":{"morph":{"__isSmartRef__":true,"id":806},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"816":{"x":0,"y":247.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"817":{"x":820,"y":302.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"818":{"resizeWidth":true,"resizeHeight":true},"819":{"sourceObj":{"__isSmartRef__":true,"id":806},"sourceAttrName":"textString","targetObj":{"__isSmartRef__":true,"id":806},"targetMethodName":"highlightJavaScriptSyntax","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"820":{"sourceObj":{"__isSmartRef__":true,"id":806},"sourceAttrName":"savedTextString","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"setSourceString","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":821},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"821":{"source":{"__isSmartRef__":true,"id":806},"target":{"__isSmartRef__":true,"id":217}},"822":{"source":{"__isSmartRef__":true,"id":217},"target":{"__isSmartRef__":true,"id":806}},"823":{"sourceObj":{"__isSmartRef__":true,"id":217},"sourceAttrName":"targetURL","targetObj":{"__isSmartRef__":true,"id":203},"targetMethodName":"setTextString","converter":null,"converterString":null,"updaterString":"function ($upd, value) { value && $upd(String(value)) }","varMapping":{"__isSmartRef__":true,"id":824},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":825},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"824":{"source":{"__isSmartRef__":true,"id":217},"target":{"__isSmartRef__":true,"id":203}},"825":{"updater":{"__isSmartRef__":true,"id":826}},"826":{"originalFunc":null,"varMapping":{"__isSmartRef__":true,"id":824},"source":"function ($upd, value) { value && $upd(String(value)) }","funcProperties":{"__isSmartRef__":true,"id":827},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"827":{},"828":{"protocol":"http:","hostname":"lively-kernel.org","pathname":"/repository/webwerkstatt/lively.ast/","__LivelyClassName__":"URL","__SourceModuleName__":"Global.lively.Network"},"829":{"source":{"__isSmartRef__":true,"id":203},"target":{"__isSmartRef__":true,"id":217}},"830":{"submorphs":[{"__isSmartRef__":true,"id":831}],"scripts":[],"shape":{"__isSmartRef__":true,"id":843},"id":213,"renderContextTable":{"__isSmartRef__":true,"id":848},"eventHandler":{"__isSmartRef__":true,"id":849},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":850},"priorExtent":{"__isSmartRef__":true,"id":851},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":78},"lighterFill":{"__isSmartRef__":true,"id":852},"label":{"__isSmartRef__":true,"id":831},"owner":{"__isSmartRef__":true,"id":202},"attributeConnections":[{"__isSmartRef__":true,"id":861}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"layout":{"__isSmartRef__":true,"id":866},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"831":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":832},"id":214,"renderContextTable":{"__isSmartRef__":true,"id":837},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":838}],"eventHandler":{"__isSmartRef__":true,"id":840},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":841},"priorExtent":{"__isSmartRef__":true,"id":842},"_MaxTextWidth":98.39999999999999,"_MinTextWidth":98.39999999999999,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":830},"isLabel":true,"_HandStyle":"default","_Align":"center","eventsAreIgnored":true,"_PointerEvents":"none","__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"832":{"_Position":{"__isSmartRef__":true,"id":833},"renderContextTable":{"__isSmartRef__":true,"id":834},"_Extent":{"__isSmartRef__":true,"id":835},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":836},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"833":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"834":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"835":{"x":98.39999999999999,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"836":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"837":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"838":{"style":{"__isSmartRef__":true,"id":839},"chunkOwner":{"__isSmartRef__":true,"id":831},"storedString":"codebase","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"839":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"840":{"morph":{"__isSmartRef__":true,"id":831},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"841":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"842":{"x":98.39999999999999,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"843":{"_Position":{"__isSmartRef__":true,"id":844},"renderContextTable":{"__isSmartRef__":true,"id":845},"_Extent":{"__isSmartRef__":true,"id":846},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":847},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":78},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"844":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"845":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"846":{"x":98.39999999999999,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"847":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"848":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"849":{"morph":{"__isSmartRef__":true,"id":830},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"850":{"x":656,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"851":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"852":{"stops":[{"__isSmartRef__":true,"id":853},{"__isSmartRef__":true,"id":855},{"__isSmartRef__":true,"id":857},{"__isSmartRef__":true,"id":859}],"vector":{"__isSmartRef__":true,"id":87},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"853":{"offset":0,"color":{"__isSmartRef__":true,"id":854}},"854":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"855":{"offset":0.4,"color":{"__isSmartRef__":true,"id":856}},"856":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"857":{"offset":0.6,"color":{"__isSmartRef__":true,"id":858}},"858":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"859":{"offset":1,"color":{"__isSmartRef__":true,"id":860}},"860":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"861":{"sourceObj":{"__isSmartRef__":true,"id":830},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"setTargetURL","converterString":"function () { return URL.codeBase.withFilename('lively/')}","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":862},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":863},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"862":{"source":{"__isSmartRef__":true,"id":830},"target":{"__isSmartRef__":true,"id":217}},"863":{"converter":{"__isSmartRef__":true,"id":864}},"864":{"originalFunc":null,"varMapping":{"__isSmartRef__":true,"id":862},"source":"function () { return URL.codeBase.withFilename('lively/')}","funcProperties":{"__isSmartRef__":true,"id":865},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global"},"865":{},"866":{"moveHorizontal":true},"867":{"submorphs":[{"__isSmartRef__":true,"id":868}],"scripts":[],"shape":{"__isSmartRef__":true,"id":880},"id":215,"renderContextTable":{"__isSmartRef__":true,"id":885},"eventHandler":{"__isSmartRef__":true,"id":886},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":887},"priorExtent":{"__isSmartRef__":true,"id":888},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":78},"lighterFill":{"__isSmartRef__":true,"id":889},"label":{"__isSmartRef__":true,"id":868},"owner":{"__isSmartRef__":true,"id":202},"attributeConnections":[{"__isSmartRef__":true,"id":898}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"layout":{"__isSmartRef__":true,"id":900},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"868":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":869},"id":216,"renderContextTable":{"__isSmartRef__":true,"id":874},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":875}],"eventHandler":{"__isSmartRef__":true,"id":877},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":878},"priorExtent":{"__isSmartRef__":true,"id":879},"_MaxTextWidth":65.6,"_MinTextWidth":65.6,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":867},"isLabel":true,"_HandStyle":"default","_Align":"center","eventsAreIgnored":true,"_PointerEvents":"none","__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"869":{"_Position":{"__isSmartRef__":true,"id":870},"renderContextTable":{"__isSmartRef__":true,"id":871},"_Extent":{"__isSmartRef__":true,"id":872},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":873},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"870":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"871":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"872":{"x":65.6,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"873":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"874":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"875":{"style":{"__isSmartRef__":true,"id":876},"chunkOwner":{"__isSmartRef__":true,"id":868},"storedString":"local","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"876":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"877":{"morph":{"__isSmartRef__":true,"id":868},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"878":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"879":{"x":65.6,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"880":{"_Position":{"__isSmartRef__":true,"id":881},"renderContextTable":{"__isSmartRef__":true,"id":882},"_Extent":{"__isSmartRef__":true,"id":883},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":884},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":78},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"881":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"882":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"883":{"x":65.6,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"884":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"885":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"886":{"morph":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"887":{"x":754.4,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"888":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"889":{"stops":[{"__isSmartRef__":true,"id":890},{"__isSmartRef__":true,"id":892},{"__isSmartRef__":true,"id":894},{"__isSmartRef__":true,"id":896}],"vector":{"__isSmartRef__":true,"id":87},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"890":{"offset":0,"color":{"__isSmartRef__":true,"id":891}},"891":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"892":{"offset":0.4,"color":{"__isSmartRef__":true,"id":893}},"893":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"894":{"offset":0.6,"color":{"__isSmartRef__":true,"id":895}},"895":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"896":{"offset":1,"color":{"__isSmartRef__":true,"id":897}},"897":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"898":{"sourceObj":{"__isSmartRef__":true,"id":867},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":217},"targetMethodName":"setTargetURL","converter":null,"converterString":"function () { return URL.source.getDirectory() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":899},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"899":{"source":{"__isSmartRef__":true,"id":867},"target":{"__isSmartRef__":true,"id":217}},"900":{"moveHorizontal":true},"901":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":902},"id":221,"renderContextTable":{"__isSmartRef__":true,"id":908},"eventHandler":{"__isSmartRef__":true,"id":909},"droppingEnabled":true,"halosEnabled":true,"__layered_draggingEnabled__":true,"_Position":{"__isSmartRef__":true,"id":910},"fixed":[{"__isSmartRef__":true,"id":219},{"__isSmartRef__":true,"id":254},{"__isSmartRef__":true,"id":289},{"__isSmartRef__":true,"id":324},{"__isSmartRef__":true,"id":359},{"__isSmartRef__":true,"id":394},{"__isSmartRef__":true,"id":429}],"scalingBelow":[{"__isSmartRef__":true,"id":806}],"scalingAbove":[{"__isSmartRef__":true,"id":470},{"__isSmartRef__":true,"id":689},{"__isSmartRef__":true,"id":736},{"__isSmartRef__":true,"id":771}],"minHeight":20,"pointerConnection":null,"owner":{"__isSmartRef__":true,"id":202},"styleClass":["Browser_resizer"],"__LivelyClassName__":"lively.morphic.HorizontalDivider","__SourceModuleName__":"Global.lively.morphic.Widgets"},"902":{"_Position":{"__isSmartRef__":true,"id":903},"renderContextTable":{"__isSmartRef__":true,"id":904},"_Extent":{"__isSmartRef__":true,"id":905},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":906},"_Fill":{"__isSmartRef__":true,"id":907},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"903":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"904":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"905":{"x":820,"y":5.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"906":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"907":{"r":0.95,"g":0.95,"b":0.95,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"908":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"909":{"morph":{"__isSmartRef__":true,"id":901},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"910":{"x":0,"y":242,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"911":{"_Position":{"__isSmartRef__":true,"id":912},"renderContextTable":{"__isSmartRef__":true,"id":913},"_Extent":{"__isSmartRef__":true,"id":914},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":915},"_Fill":{"__isSmartRef__":true,"id":916},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"912":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"913":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"914":{"x":820,"y":550,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"915":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"916":{"r":0.9,"g":0.9,"b":0.9,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"917":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"918":{"morph":{"__isSmartRef__":true,"id":202},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"919":{"adjustForNewBounds":true,"resizeWidth":true,"resizeHeight":true},"920":{"x":0,"y":21,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"921":{"submorphs":[{"__isSmartRef__":true,"id":922},{"__isSmartRef__":true,"id":934},{"__isSmartRef__":true,"id":969},{"__isSmartRef__":true,"id":1003}],"scripts":[],"shape":{"__isSmartRef__":true,"id":1038},"id":238,"renderContextTable":{"__isSmartRef__":true,"id":1047},"eventHandler":{"__isSmartRef__":true,"id":1048},"droppingEnabled":true,"halosEnabled":true,"layout":{"__isSmartRef__":true,"id":1049},"_Position":{"__isSmartRef__":true,"id":1050},"windowMorph":{"__isSmartRef__":true,"id":201},"label":{"__isSmartRef__":true,"id":922},"closeButton":{"__isSmartRef__":true,"id":934},"menuButton":{"__isSmartRef__":true,"id":969},"collapseButton":{"__isSmartRef__":true,"id":1003},"priorExtent":{"__isSmartRef__":true,"id":1051},"owner":{"__isSmartRef__":true,"id":201},"__LivelyClassName__":"lively.morphic.TitleBar","__SourceModuleName__":"Global.lively.morphic.Widgets"},"922":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":923},"id":239,"renderContextTable":{"__isSmartRef__":true,"id":927},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":928}],"eventHandler":{"__isSmartRef__":true,"id":930},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"evalEnabled":false,"isLabel":true,"_HandStyle":"default","layout":{"__isSmartRef__":true,"id":931},"_Align":"center","eventsAreIgnored":true,"_PointerEvents":"none","owner":{"__isSmartRef__":true,"id":921},"priorExtent":{"__isSmartRef__":true,"id":932},"_MaxTextWidth":761,"_MinTextWidth":761,"_MaxTextHeight":null,"_MinTextHeight":null,"_Position":{"__isSmartRef__":true,"id":933},"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"923":{"_Position":{"__isSmartRef__":true,"id":924},"renderContextTable":{"__isSmartRef__":true,"id":925},"_Extent":{"__isSmartRef__":true,"id":926},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":50},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":null,"_BorderRadius":0,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"924":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"925":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"926":{"x":761,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"927":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"928":{"style":{"__isSmartRef__":true,"id":929},"chunkOwner":{"__isSmartRef__":true,"id":922},"storedString":"Parser.js","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"929":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"930":{"morph":{"__isSmartRef__":true,"id":922},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"931":{"resizeWidth":true},"932":{"x":761,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"933":{"x":20,"y":3,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"934":{"submorphs":[{"__isSmartRef__":true,"id":935}],"scripts":[],"shape":{"__isSmartRef__":true,"id":946},"id":240,"renderContextTable":{"__isSmartRef__":true,"id":951},"eventHandler":{"__isSmartRef__":true,"id":952},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":953},"priorExtent":{"__isSmartRef__":true,"id":954},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":78},"lighterFill":{"__isSmartRef__":true,"id":955},"label":{"__isSmartRef__":true,"id":935},"owner":{"__isSmartRef__":true,"id":921},"layout":{"__isSmartRef__":true,"id":964},"attributeConnections":[{"__isSmartRef__":true,"id":965},{"__isSmartRef__":true,"id":967}],"doNotSerialize":["$$getHelpText","$$fire"],"doNotCopyProperties":["$$getHelpText","$$fire"],"__LivelyClassName__":"lively.morphic.WindowControl","__SourceModuleName__":"Global.lively.morphic.Widgets"},"935":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":936},"id":241,"renderContextTable":{"__isSmartRef__":true,"id":940},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":941}],"eventHandler":{"__isSmartRef__":true,"id":943},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":8,"_Position":{"__isSmartRef__":true,"id":944},"priorExtent":{"__isSmartRef__":true,"id":945},"_MaxTextWidth":17,"_MinTextWidth":17,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":934},"isLabel":true,"_HandStyle":"default","_Align":"center","eventsAreIgnored":true,"_PointerEvents":"none","__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"936":{"_Position":{"__isSmartRef__":true,"id":937},"renderContextTable":{"__isSmartRef__":true,"id":938},"_Extent":{"__isSmartRef__":true,"id":939},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":65},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"937":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"938":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"939":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"940":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"941":{"style":{"__isSmartRef__":true,"id":942},"chunkOwner":{"__isSmartRef__":true,"id":935},"storedString":"X","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"942":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"943":{"morph":{"__isSmartRef__":true,"id":935},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"944":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"945":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"946":{"_Position":{"__isSmartRef__":true,"id":947},"renderContextTable":{"__isSmartRef__":true,"id":948},"_Extent":{"__isSmartRef__":true,"id":949},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":950},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":78},"_StrokeOpacity":0,"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"947":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"948":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"949":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"950":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"951":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"952":{"morph":{"__isSmartRef__":true,"id":934},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"953":{"x":800,"y":3,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"954":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"955":{"stops":[{"__isSmartRef__":true,"id":956},{"__isSmartRef__":true,"id":958},{"__isSmartRef__":true,"id":960},{"__isSmartRef__":true,"id":962}],"vector":{"__isSmartRef__":true,"id":87},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"956":{"offset":0,"color":{"__isSmartRef__":true,"id":957}},"957":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"958":{"offset":0.4,"color":{"__isSmartRef__":true,"id":959}},"959":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"960":{"offset":0.6,"color":{"__isSmartRef__":true,"id":961}},"961":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"962":{"offset":1,"color":{"__isSmartRef__":true,"id":963}},"963":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"964":{"moveHorizontal":true},"965":{"sourceObj":{"__isSmartRef__":true,"id":934},"sourceAttrName":"getHelpText","targetObj":{"__isSmartRef__":true,"id":201},"targetMethodName":"getCloseHelp","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":966},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"966":{"source":{"__isSmartRef__":true,"id":934},"target":{"__isSmartRef__":true,"id":201}},"967":{"sourceObj":{"__isSmartRef__":true,"id":934},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":201},"targetMethodName":"initiateShutdown","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":968},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"968":{"source":{"__isSmartRef__":true,"id":934},"target":{"__isSmartRef__":true,"id":201}},"969":{"submorphs":[{"__isSmartRef__":true,"id":970}],"scripts":[],"shape":{"__isSmartRef__":true,"id":981},"id":242,"renderContextTable":{"__isSmartRef__":true,"id":986},"eventHandler":{"__isSmartRef__":true,"id":987},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":988},"priorExtent":{"__isSmartRef__":true,"id":989},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":78},"lighterFill":{"__isSmartRef__":true,"id":990},"label":{"__isSmartRef__":true,"id":970},"owner":{"__isSmartRef__":true,"id":921},"attributeConnections":[{"__isSmartRef__":true,"id":999},{"__isSmartRef__":true,"id":1001}],"doNotSerialize":["$$getHelpText","$$fire"],"doNotCopyProperties":["$$getHelpText","$$fire"],"__LivelyClassName__":"lively.morphic.WindowControl","__SourceModuleName__":"Global.lively.morphic.Widgets"},"970":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":971},"id":243,"renderContextTable":{"__isSmartRef__":true,"id":975},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":976}],"eventHandler":{"__isSmartRef__":true,"id":978},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":8,"_Position":{"__isSmartRef__":true,"id":979},"priorExtent":{"__isSmartRef__":true,"id":980},"_MaxTextWidth":17,"_MinTextWidth":17,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":969},"isLabel":true,"_HandStyle":"default","_Align":"center","eventsAreIgnored":true,"_PointerEvents":"none","__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"971":{"_Position":{"__isSmartRef__":true,"id":972},"renderContextTable":{"__isSmartRef__":true,"id":973},"_Extent":{"__isSmartRef__":true,"id":974},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":65},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"972":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"973":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"974":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"975":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"976":{"style":{"__isSmartRef__":true,"id":977},"chunkOwner":{"__isSmartRef__":true,"id":970},"storedString":"M","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"977":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"978":{"morph":{"__isSmartRef__":true,"id":970},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"979":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"980":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"981":{"_Position":{"__isSmartRef__":true,"id":982},"renderContextTable":{"__isSmartRef__":true,"id":983},"_Extent":{"__isSmartRef__":true,"id":984},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":985},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":78},"_StrokeOpacity":0,"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"982":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"983":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"984":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"985":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"986":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"987":{"morph":{"__isSmartRef__":true,"id":969},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"988":{"x":3,"y":3,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"989":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"990":{"stops":[{"__isSmartRef__":true,"id":991},{"__isSmartRef__":true,"id":993},{"__isSmartRef__":true,"id":995},{"__isSmartRef__":true,"id":997}],"vector":{"__isSmartRef__":true,"id":87},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"991":{"offset":0,"color":{"__isSmartRef__":true,"id":992}},"992":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"993":{"offset":0.4,"color":{"__isSmartRef__":true,"id":994}},"994":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"995":{"offset":0.6,"color":{"__isSmartRef__":true,"id":996}},"996":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"997":{"offset":1,"color":{"__isSmartRef__":true,"id":998}},"998":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"999":{"sourceObj":{"__isSmartRef__":true,"id":969},"sourceAttrName":"getHelpText","targetObj":{"__isSmartRef__":true,"id":201},"targetMethodName":"getMenuHelp","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1000},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1000":{"source":{"__isSmartRef__":true,"id":969},"target":{"__isSmartRef__":true,"id":201}},"1001":{"sourceObj":{"__isSmartRef__":true,"id":969},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":201},"targetMethodName":"showTargetMorphMenu","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1002},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1002":{"source":{"__isSmartRef__":true,"id":969},"target":{"__isSmartRef__":true,"id":201}},"1003":{"submorphs":[{"__isSmartRef__":true,"id":1004}],"scripts":[],"shape":{"__isSmartRef__":true,"id":1015},"id":244,"renderContextTable":{"__isSmartRef__":true,"id":1020},"eventHandler":{"__isSmartRef__":true,"id":1021},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":1022},"priorExtent":{"__isSmartRef__":true,"id":1023},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":78},"lighterFill":{"__isSmartRef__":true,"id":1024},"label":{"__isSmartRef__":true,"id":1004},"owner":{"__isSmartRef__":true,"id":921},"layout":{"__isSmartRef__":true,"id":1033},"attributeConnections":[{"__isSmartRef__":true,"id":1034},{"__isSmartRef__":true,"id":1036}],"doNotSerialize":["$$getHelpText","$$fire"],"doNotCopyProperties":["$$getHelpText","$$fire"],"__LivelyClassName__":"lively.morphic.WindowControl","__SourceModuleName__":"Global.lively.morphic.Widgets"},"1004":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":1005},"id":245,"renderContextTable":{"__isSmartRef__":true,"id":1009},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":1010}],"eventHandler":{"__isSmartRef__":true,"id":1012},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":8,"_Position":{"__isSmartRef__":true,"id":1013},"priorExtent":{"__isSmartRef__":true,"id":1014},"_MaxTextWidth":17,"_MinTextWidth":17,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":1003},"isLabel":true,"_HandStyle":"default","_Align":"center","eventsAreIgnored":true,"_PointerEvents":"none","__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1005":{"_Position":{"__isSmartRef__":true,"id":1006},"renderContextTable":{"__isSmartRef__":true,"id":1007},"_Extent":{"__isSmartRef__":true,"id":1008},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":65},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":51},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1006":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1007":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1008":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1009":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"1010":{"style":{"__isSmartRef__":true,"id":1011},"chunkOwner":{"__isSmartRef__":true,"id":1004},"storedString":"–","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1011":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1012":{"morph":{"__isSmartRef__":true,"id":1004},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1013":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1014":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1015":{"_Position":{"__isSmartRef__":true,"id":1016},"renderContextTable":{"__isSmartRef__":true,"id":1017},"_Extent":{"__isSmartRef__":true,"id":1018},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1019},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":78},"_StrokeOpacity":0,"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1016":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1017":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1018":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1019":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"1020":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1021":{"morph":{"__isSmartRef__":true,"id":1003},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1022":{"x":781,"y":3,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1023":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1024":{"stops":[{"__isSmartRef__":true,"id":1025},{"__isSmartRef__":true,"id":1027},{"__isSmartRef__":true,"id":1029},{"__isSmartRef__":true,"id":1031}],"vector":{"__isSmartRef__":true,"id":87},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1025":{"offset":0,"color":{"__isSmartRef__":true,"id":1026}},"1026":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1027":{"offset":0.4,"color":{"__isSmartRef__":true,"id":1028}},"1028":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1029":{"offset":0.6,"color":{"__isSmartRef__":true,"id":1030}},"1030":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1031":{"offset":1,"color":{"__isSmartRef__":true,"id":1032}},"1032":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1033":{"moveHorizontal":true},"1034":{"sourceObj":{"__isSmartRef__":true,"id":1003},"sourceAttrName":"getHelpText","targetObj":{"__isSmartRef__":true,"id":201},"targetMethodName":"getCollapseHelp","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1035},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1035":{"source":{"__isSmartRef__":true,"id":1003},"target":{"__isSmartRef__":true,"id":201}},"1036":{"sourceObj":{"__isSmartRef__":true,"id":1003},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":201},"targetMethodName":"toggleCollapse","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1037},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1037":{"source":{"__isSmartRef__":true,"id":1003},"target":{"__isSmartRef__":true,"id":201}},"1038":{"_Position":{"__isSmartRef__":true,"id":1039},"renderContextTable":{"__isSmartRef__":true,"id":1040},"_Extent":{"__isSmartRef__":true,"id":1041},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1042},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":180},"_Fill":{"__isSmartRef__":true,"id":1043},"_StrokeOpacity":1,"_BorderRadius":"8px 8px 0px 0px","__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1039":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1040":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1041":{"x":820,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1042":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"1043":{"stops":[{"__isSmartRef__":true,"id":1044},{"__isSmartRef__":true,"id":1045}],"vector":{"__isSmartRef__":true,"id":87},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1044":{"offset":0,"color":{"__isSmartRef__":true,"id":208}},"1045":{"offset":1,"color":{"__isSmartRef__":true,"id":1046}},"1046":{"r":0.8,"g":0.8,"b":0.8,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1047":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1048":{"morph":{"__isSmartRef__":true,"id":921},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1049":{"resizeWidth":true,"adjustForNewBounds":true},"1050":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1051":{"x":820,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1052":{"renderContextTable":{"__isSmartRef__":true,"id":1053},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1054},"_BorderWidth":0,"_Fill":null,"_StrokeOpacity":0,"_BorderRadius":0,"_Extent":{"__isSmartRef__":true,"id":1055},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1053":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1054":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"1055":{"x":820,"y":571,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1056":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1057":{"morph":{"__isSmartRef__":true,"id":201},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1058":{"adjustForNewBounds":true},"1059":{"x":42.5,"y":306.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1060":{"x":820,"y":571,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1061":{"x":379,"y":314,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1062":{"submorphs":[],"scripts":[],"id":226,"shape":{"__isSmartRef__":true,"id":1063},"grabbingEnabled":false,"droppingEnabled":false,"showsMorphMenu":false,"halosEnabled":false,"registeredForMouseEvents":true,"_world":{"__isSmartRef__":true,"id":0},"owner":{"__isSmartRef__":true,"id":0},"__SourceModuleName__":"Global.lively.morphic.Events","carriesGrabbedMorphs":false,"_Scale":1,"_Rotation":0,"renderContextTable":{"__isSmartRef__":true,"id":1069},"eventHandler":{"__isSmartRef__":true,"id":1070},"attributeConnections":[],"doNotSerialize":[],"doNotCopyProperties":[],"_Position":{"__isSmartRef__":true,"id":1071},"clickedOnMorph":{"__isSmartRef__":true,"id":0},"__LivelyClassName__":"lively.morphic.HandMorph","withLayers":["Global.NoMagnetsLayer"]},"1063":{"__SourceModuleName__":"Global.lively.morphic.Shapes","_Position":{"__isSmartRef__":true,"id":1064},"_Extent":{"__isSmartRef__":true,"id":1065},"_Fill":{"__isSmartRef__":true,"id":1066},"renderContextTable":{"__isSmartRef__":true,"id":1067},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1068},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"1064":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"1065":{"x":2,"y":2,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"1066":{"r":0.8,"g":0,"b":0,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1067":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1068":{"x":0,"y":0,"width":0,"height":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Rectangle"},"1069":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1070":{"morph":{"__isSmartRef__":true,"id":1062},"__SourceModuleName__":"Global.lively.morphic.Events","__LivelyClassName__":"lively.morphic.EventHandler"},"1071":{"x":1094,"y":304,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1072":{"__SourceModuleName__":"Global.lively.morphic.Shapes","_Position":{"__isSmartRef__":true,"id":1073},"_Extent":{"__isSmartRef__":true,"id":1074},"_Fill":{"__isSmartRef__":true,"id":1075},"renderContextTable":{"__isSmartRef__":true,"id":1076},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1077},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"1073":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"1074":{"x":2800,"y":2900,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"1075":{"r":1,"g":1,"b":1,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1076":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1077":{"x":0,"y":0,"width":0,"height":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Rectangle"},"1078":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"1079":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","setOrigin":"setOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1080":{"sourceObj":{"__isSmartRef__":true,"id":0},"sourceAttrName":"savedWorldAsURL","targetObj":{"__isSmartRef__":true,"id":0},"targetMethodName":"visitNewPageAfterSaveAs","converter":null,"converterString":null,"updaterString":"function ($upd, v) { \n if (v && v.toString() !== URL.source.toString()) {\n $upd(v) \n }\n }","varMapping":{"__isSmartRef__":true,"id":1081},"__SourceModuleName__":"Global.lively.bindings","__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1082},"__LivelyClassName__":"AttributeConnection"},"1081":{"source":{"__isSmartRef__":true,"id":0},"target":{"__isSmartRef__":true,"id":0}},"1082":{"updater":{"__isSmartRef__":true,"id":1083}},"1083":{"originalFunc":null,"varMapping":{"__isSmartRef__":true,"id":1084},"source":"function ($upd, v) { \n if (v && v.toString() !== URL.source.toString()) {\n $upd(v) \n }\n }","funcProperties":{"__isSmartRef__":true,"id":1085},"__SourceModuleName__":"Global","__LivelyClassName__":"lively.Closure"},"1084":{"source":{"__isSmartRef__":true,"id":0},"target":{"__isSmartRef__":true,"id":0}},"1085":{},"1086":{"morph":{"__isSmartRef__":true,"id":0},"__SourceModuleName__":"Global.lively.morphic.Events","__LivelyClassName__":"lively.morphic.EventHandler"},"1087":{"protocol":"http:","hostname":"lively-kernel.org","pathname":"/repository/webwerkstatt/webwerkstatt.xhtml","__SourceModuleName__":"Global.lively.Network","__LivelyClassName__":"URL"},"isSimplifiedRegistry":true}}]]>