本文整理汇总了C#中Evaluator.CreateFunctionObject方法的典型用法代码示例。如果您正苦于以下问题:C# Evaluator.CreateFunctionObject方法的具体用法?C# Evaluator.CreateFunctionObject怎么用?C# Evaluator.CreateFunctionObject使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Evaluator
的用法示例。
在下文中一共展示了Evaluator.CreateFunctionObject方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CompileImpl
/// <exception cref="System.IO.IOException"></exception>
private object CompileImpl(Scriptable scope, TextReader sourceReader, string sourceString, string sourceName, int lineno, object securityDomain, bool returnFunction, Evaluator compiler, ErrorReporter compilationErrorReporter)
{
if (sourceName == null)
{
sourceName = "unnamed script";
}
if (securityDomain != null && GetSecurityController() == null)
{
throw new ArgumentException("securityDomain should be null if setSecurityController() was never called");
}
// One of sourceReader or sourceString has to be null
if (!(sourceReader == null ^ sourceString == null))
{
Kit.CodeBug();
}
// scope should be given if and only if compiling function
if (!(scope == null ^ returnFunction))
{
Kit.CodeBug();
}
CompilerEnvirons compilerEnv = new CompilerEnvirons();
compilerEnv.InitFromContext(this);
if (compilationErrorReporter == null)
{
compilationErrorReporter = compilerEnv.GetErrorReporter();
}
if (debugger != null)
{
if (sourceReader != null)
{
sourceString = Kit.ReadReader(sourceReader);
sourceReader = null;
}
}
Parser p = new Parser(compilerEnv, compilationErrorReporter);
if (returnFunction)
{
p.calledByCompileFunction = true;
}
AstRoot ast;
if (sourceString != null)
{
ast = p.Parse(sourceString, sourceName, lineno);
}
else
{
ast = p.Parse(sourceReader, sourceName, lineno);
}
if (returnFunction)
{
// parser no longer adds function to script node
if (!(ast.GetFirstChild() != null && ast.GetFirstChild().GetType() == Token.FUNCTION))
{
// XXX: the check just looks for the first child
// and allows for more nodes after it for compatibility
// with sources like function() {};;;
throw new ArgumentException("compileFunction only accepts source with single JS function: " + sourceString);
}
}
IRFactory irf = new IRFactory(compilerEnv, compilationErrorReporter);
ScriptNode tree = irf.TransformTree(ast);
// discard everything but the IR tree
p = null;
ast = null;
irf = null;
if (compiler == null)
{
compiler = CreateCompiler();
}
object bytecode = compiler.Compile(compilerEnv, tree, tree.GetEncodedSource(), returnFunction);
if (debugger != null)
{
if (sourceString == null)
{
Kit.CodeBug();
}
if (bytecode is DebuggableScript)
{
DebuggableScript dscript = (DebuggableScript)bytecode;
NotifyDebugger_r(this, dscript, sourceString);
}
else
{
throw new Exception("NOT SUPPORTED");
}
}
object result;
if (returnFunction)
{
result = compiler.CreateFunctionObject(this, scope, bytecode, securityDomain);
}
else
{
result = compiler.CreateScriptObject(bytecode, securityDomain);
}
return result;
}