private static object JsConstructor(Context cx, Scriptable scope, object[] args)
{
int arglen = args.Length;
StringBuilder sourceBuf = new StringBuilder();
sourceBuf.Append("function ");
if (cx.GetLanguageVersion() != Context.VERSION_1_2)
{
sourceBuf.Append("anonymous");
}
sourceBuf.Append('(');
// Append arguments as coma separated strings
for (int i = 0; i < arglen - 1; i++)
{
if (i > 0)
{
sourceBuf.Append(',');
}
sourceBuf.Append(ScriptRuntime.ToString(args[i]));
}
sourceBuf.Append(") {");
if (arglen != 0)
{
// append function body
string funBody = ScriptRuntime.ToString(args[arglen - 1]);
sourceBuf.Append(funBody);
}
sourceBuf.Append("\n}");
string source = sourceBuf.ToString();
int[] linep = new int[1];
string filename = Context.GetSourcePositionFromStack(linep);
if (filename == null)
{
filename = "<eval'ed string>";
linep[0] = 1;
}
string sourceURI = ScriptRuntime.MakeUrlForGeneratedScript(false, filename, linep[0]);
Scriptable global = ScriptableObject.GetTopLevelScope(scope);
ErrorReporter reporter;
reporter = DefaultErrorReporter.ForEval(cx.GetErrorReporter());
Evaluator evaluator = Context.CreateInterpreter();
if (evaluator == null)
{
throw new JavaScriptException("Interpreter not present", filename, linep[0]);
}
// Compile with explicit interpreter instance to force interpreter
// mode.
return cx.CompileFunction(global, source, evaluator, reporter, sourceURI, 1, null);
}