本文整理汇总了C#中Rhino.Context.NewObject方法的典型用法代码示例。如果您正苦于以下问题:C# Context.NewObject方法的具体用法?C# Context.NewObject怎么用?C# Context.NewObject使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Rhino.Context
的用法示例。
在下文中一共展示了Context.NewObject方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: RunJsTest
public virtual void RunJsTest(Context cx, Scriptable shared, string name, string source)
{
// create a lightweight top-level scope
Scriptable scope = cx.NewObject(shared);
scope.SetPrototype(shared);
System.Console.Out.Write(name + ": ");
object result;
try
{
result = cx.EvaluateString(scope, source, "jstest input", 1, null);
}
catch (Exception e)
{
System.Console.Out.WriteLine("FAILED");
throw;
}
NUnit.Framework.Assert.IsTrue(result != null);
NUnit.Framework.Assert.IsTrue("success".Equals(result));
System.Console.Out.WriteLine("passed");
}
示例2: NewObjectLiteral
public static Scriptable NewObjectLiteral(object[] propertyIds, object[] propertyValues, int[] getterSetters, Context cx, Scriptable scope)
{
Scriptable @object = cx.NewObject(scope);
for (int i = 0, end = propertyIds.Length; i != end; ++i)
{
object id = propertyIds[i];
int getterSetter = getterSetters == null ? 0 : getterSetters[i];
object value = propertyValues[i];
if (id is string)
{
if (getterSetter == 0)
{
if (IsSpecialProperty((string)id))
{
SpecialRef(@object, (string)id, cx).Set(cx, value);
}
else
{
@object.Put((string)id, @object, value);
}
}
else
{
ScriptableObject so = (ScriptableObject)@object;
Callable getterOrSetter = (Callable)value;
bool isSetter = getterSetter == 1;
so.SetGetterOrSetter((string)id, 0, getterOrSetter, isSetter);
}
}
else
{
int index = System.Convert.ToInt32(((int)id));
@object.Put(index, @object, value);
}
}
return @object;
}
示例3: WrapException
public static Scriptable WrapException(Exception t, Scriptable scope, Context cx)
{
RhinoException re;
string errorName;
string errorMsg;
Exception javaException = null;
if (t is EcmaError)
{
EcmaError ee = (EcmaError)t;
re = ee;
errorName = ee.GetName();
errorMsg = ee.GetErrorMessage();
}
else
{
if (t is WrappedException)
{
WrappedException we = (WrappedException)t;
re = we;
javaException = we.GetWrappedException();
errorName = "JavaException";
errorMsg = javaException.GetType().FullName + ": " + javaException.Message;
}
else
{
if (t is EvaluatorException)
{
// Pure evaluator exception, nor WrappedException instance
EvaluatorException ee = (EvaluatorException)t;
re = ee;
errorName = "InternalError";
errorMsg = ee.Message;
}
else
{
if (cx.HasFeature(Context.FEATURE_ENHANCED_JAVA_ACCESS))
{
// With FEATURE_ENHANCED_JAVA_ACCESS, scripts can catch
// all exception types
re = new WrappedException(t);
errorName = "JavaException";
errorMsg = t.ToString();
}
else
{
// Script can catch only instances of JavaScriptException,
// EcmaError and EvaluatorException
throw Kit.CodeBug();
}
}
}
}
string sourceUri = re.SourceName();
if (sourceUri == null)
{
sourceUri = string.Empty;
}
int line = re.LineNumber();
object[] args;
if (line > 0)
{
args = new object[] { errorMsg, sourceUri, Sharpen.Extensions.ValueOf(line) };
}
else
{
args = new object[] { errorMsg, sourceUri };
}
Scriptable errorObject = cx.NewObject(scope, errorName, args);
ScriptableObject.PutProperty(errorObject, "name", errorName);
// set exception in Error objects to enable non-ECMA "stack" property
if (errorObject is NativeError)
{
((NativeError)errorObject).SetStackProvider(re);
}
if (javaException != null && IsVisible(cx, javaException))
{
object wrap = cx.GetWrapFactory().Wrap(cx, scope, javaException, null);
ScriptableObject.DefineProperty(errorObject, "javaException", wrap, ScriptableObject.PERMANENT | ScriptableObject.READONLY);
}
if (IsVisible(cx, re))
{
object wrap = cx.GetWrapFactory().Wrap(cx, scope, re, null);
ScriptableObject.DefineProperty(errorObject, "rhinoException", wrap, ScriptableObject.PERMANENT | ScriptableObject.READONLY);
}
return errorObject;
}
示例4: Parse
public static object Parse(Context cx, Scriptable scope, string jtext, Callable reviver)
{
object unfiltered = Parse(cx, scope, jtext);
Scriptable root = cx.NewObject(scope);
root.Put(string.Empty, root, unfiltered);
return Walk(cx, scope, reviver, root, string.Empty);
}
示例5: ExecuteModuleScript
private Scriptable ExecuteModuleScript(Context cx, string id, Scriptable exports, ModuleScript moduleScript, bool isMain)
{
ScriptableObject moduleObject = (ScriptableObject)cx.NewObject(nativeScope);
Uri uri = moduleScript.GetUri();
Uri @base = moduleScript.GetBase();
DefineReadOnlyProperty(moduleObject, "id", id);
if (!sandboxed)
{
DefineReadOnlyProperty(moduleObject, "uri", uri.ToString());
}
Scriptable executionScope = new ModuleScope(nativeScope, uri, @base);
// Set this so it can access the global JS environment objects.
// This means we're currently using the "MGN" approach (ModuleScript
// with Global Natives) as specified here:
// <http://wiki.commonjs.org/wiki/Modules/ProposalForNativeExtension>
executionScope.Put("exports", executionScope, exports);
executionScope.Put("module", executionScope, moduleObject);
moduleObject.Put("exports", moduleObject, exports);
Install(executionScope);
if (isMain)
{
DefineReadOnlyProperty(this, "main", moduleObject);
}
ExecuteOptionalScript(preExec, cx, executionScope);
moduleScript.GetScript().Exec(cx, executionScope);
ExecuteOptionalScript(postExec, cx, executionScope);
return ScriptRuntime.ToObject(nativeScope, ScriptableObject.GetProperty(moduleObject, "exports"));
}
示例6: GetExportedModuleInterface
private Scriptable GetExportedModuleInterface(Context cx, string id, Uri uri, Uri @base, bool isMain)
{
// Check if the requested module is already completely loaded
Scriptable exports = exportedModuleInterfaces.Get(id);
if (exports != null)
{
if (isMain)
{
throw new InvalidOperationException("Attempt to set main module after it was loaded");
}
return exports;
}
// Check if it is currently being loaded on the current thread
// (supporting circular dependencies).
IDictionary<string, Scriptable> threadLoadingModules = loadingModuleInterfaces.Value;
if (threadLoadingModules != null)
{
exports = threadLoadingModules.Get(id);
if (exports != null)
{
return exports;
}
}
// The requested module is neither already loaded, nor is it being
// loaded on the current thread. End of fast path. We must synchronize
// now, as we have to guarantee that at most one thread can load
// modules at any one time. Otherwise, two threads could end up
// attempting to load two circularly dependent modules in opposite
// order, which would lead to either unacceptable non-determinism or
// deadlock, depending on whether we underprotected or overprotected it
// with locks.
lock (loadLock)
{
// Recheck if it is already loaded - other thread might've
// completed loading it just as we entered the synchronized block.
exports = exportedModuleInterfaces.Get(id);
if (exports != null)
{
return exports;
}
// Nope, still not loaded; we're loading it then.
ModuleScript moduleScript = GetModule(cx, id, uri, @base);
if (sandboxed && !moduleScript.IsSandboxed())
{
throw ScriptRuntime.ThrowError(cx, nativeScope, "Module \"" + id + "\" is not contained in sandbox.");
}
exports = cx.NewObject(nativeScope);
// Are we the outermost locked invocation on this thread?
bool outermostLocked = threadLoadingModules == null;
if (outermostLocked)
{
threadLoadingModules = new Dictionary<string, Scriptable>();
loadingModuleInterfaces.Value = threadLoadingModules;
}
// Must make the module exports available immediately on the
// current thread, to satisfy the CommonJS Modules/1.1 requirement
// that "If there is a dependency cycle, the foreign module may not
// have finished executing at the time it is required by one of its
// transitive dependencies; in this case, the object returned by
// "require" must contain at least the exports that the foreign
// module has prepared before the call to require that led to the
// current module's execution."
threadLoadingModules.Put(id, exports);
try
{
// Support non-standard Node.js feature to allow modules to
// replace the exports object by setting module.exports.
Scriptable newExports = ExecuteModuleScript(cx, id, exports, moduleScript, isMain);
if (exports != newExports)
{
threadLoadingModules.Put(id, newExports);
exports = newExports;
}
}
catch (Exception e)
{
// Throw loaded module away if there was an exception
Sharpen.Collections.Remove(threadLoadingModules, id);
throw;
}
finally
{
if (outermostLocked)
{
// Make loaded modules visible to other threads only after
// the topmost triggering load has completed. This strategy
// (compared to the one where we'd make each module
// globally available as soon as it loads) prevents other
// threads from observing a partially loaded circular
// dependency of a module that completed loading.
exportedModuleInterfaces.PutAll(threadLoadingModules);
loadingModuleInterfaces.Value = null;
}
}
}
return exports;
}
示例7: ExecIdCall
public override object ExecIdCall(IdFunctionObject f, Context cx, Scriptable scope, Scriptable thisObj, object[] args)
{
if (!f.HasTag(XMLCTOR_TAG))
{
return base.ExecIdCall(f, cx, scope, thisObj, args);
}
int id = f.MethodId();
switch (id)
{
case Id_defaultSettings:
{
options.SetDefault();
Scriptable obj = cx.NewObject(scope);
WriteSetting(obj);
return obj;
}
case Id_settings:
{
Scriptable obj = cx.NewObject(scope);
WriteSetting(obj);
return obj;
}
case Id_setSettings:
{
if (args.Length == 0 || args[0] == null || args[0] == Undefined.instance)
{
options.SetDefault();
}
else
{
if (args[0] is Scriptable)
{
ReadSettings((Scriptable)args[0]);
}
}
return Undefined.instance;
}
}
throw new ArgumentException(id.ToString());
}