public override void Visit(MethodModel method) { if (method.Class != null) { if (method.Class.Name.EndsWith(" class")) this.writer.Write(string.Format("{0}Class.prototype['{1}'] = function(", method.Class.Name.Substring(0, method.Class.Name.Length - " class".Length), ToMethodName(method.Selector))); else this.writer.Write(string.Format("{0}.prototype['{1}'] = function(", method.Class.Name, ToMethodName(method.Selector))); } else { this.writer.Write(string.Format("function {0}(", ToMethodName(method.Selector))); } int nparameters = 0; foreach (string name in method.ParameterNames) { if (nparameters > 0) this.writer.Write(", "); this.writer.Write(name); nparameters++; } this.writer.WriteLine(")"); this.writer.WriteLineStart("{"); this.writer.WriteLine("var self = this;"); // TODO Review local variable for block returns if (method.HasBlock()) this.writer.WriteLine("var __context = {};"); this.writer.WriteLine(string.Format("console.log('{0}');", ToMethodName(method.Selector))); foreach (string locname in method.LocalVariables) this.writer.WriteLine(string.Format("var {0} = null", ToVariableName(locname))); MethodModel previousMethod = this.CurrentMethod; try { this.CurrentMethod = method; this.Visit(method.Body); } finally { this.CurrentMethod = previousMethod; } if (method.Class != null) this.writer.WriteLineEnd("};"); else this.writer.WriteLineEnd("}"); }