本文整理汇总了C#中IEnvironment.EnterContext方法的典型用法代码示例。如果您正苦于以下问题:C# IEnvironment.EnterContext方法的具体用法?C# IEnvironment.EnterContext怎么用?C# IEnvironment.EnterContext使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IEnvironment
的用法示例。
在下文中一共展示了IEnvironment.EnterContext方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Call
public virtual IDynamic Call(IEnvironment environment, IDynamic thisBinding, IArgs args)
{
var oldContext = environment.Context;
var newEnvironment = Scope.NewDeclarativeEnvironment();
using (var newContext = environment.EnterContext())
{
newContext.LexicalEnviroment = newEnvironment;
newContext.VariableEnviroment = newEnvironment;
newContext.Strict = ExecutableCode.Strict;
if (ExecutableCode.Strict)
{
newContext.ThisBinding = thisBinding;
}
else
{
switch (thisBinding.TypeCode)
{
case LanguageTypeCode.Undefined:
case LanguageTypeCode.Null:
newContext.ThisBinding = Environment.GlobalObject;
break;
default:
newContext.ThisBinding = thisBinding.ConvertToObject();
break;
}
}
BindFormalParameters(args);
Environment.BindFunctionDeclarations(ExecutableCode.FunctionDeclarations, ExecutableCode.Strict, true);
BindArgumentsObject(args);
Environment.BindVariableDeclarations(ExecutableCode.VariableDeclarations, ExecutableCode.Strict, true);
return ExecutableCode.Code(environment, args);
}
}
示例2: Call
public IDynamic Call(IEnvironment environment, IDynamic thisBinding, IArgs args)
{
using (var newContext = environment.EnterContext())
{
Environment.Context.ThisBinding = thisBinding;
return _code(environment, args);
}
}
示例3: Eval
internal static IDynamic Eval(IEnvironment environment, IArgs args)
{
var x = args[0];
if (x.TypeCode != LanguageTypeCode.String)
{
return x;
}
var compiler = new CompilerService(environment);
var context = environment.Context;
var e = compiler.CompileEvalCode(x.ConvertToString().BaseValue, context.Strict);
using (var c = environment.EnterContext())
{
c.ThisBinding = context.ThisBinding;
c.LexicalEnviroment = context.LexicalEnviroment;
c.VariableEnviroment = context.VariableEnviroment;
if (e.Strict)
{
var s = context.LexicalEnviroment.NewDeclarativeEnvironment();
c.LexicalEnviroment = s;
c.VariableEnviroment = s;
}
return e.Code(environment, environment.EmptyArgs);
}
}