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("}");
}