public DebugDocument(WindowsScriptEngine engine, UIntPtr sourceContext, UniqueDocumentInfo documentInfo, string code) { this.engine = engine; this.sourceContext = sourceContext; this.documentInfo = documentInfo; Code = code; Initialize(); }
public Module(CommonJSManager manager, ScriptEngine engine, UniqueDocumentInfo documentInfo, UIntPtr codeDigest, Func <object> evaluator) { this.manager = manager; this.engine = engine; DocumentInfo = documentInfo; CodeDigest = codeDigest; Evaluator = evaluator; }
public Module GetOrCreateModule(UniqueDocumentInfo documentInfo, UIntPtr codeDigest, Func <object> evaluator) { var cachedModule = GetCachedModule(documentInfo, codeDigest); if (cachedModule != null) { return(cachedModule); } return(CacheModule(new Module(this, engine, documentInfo, codeDigest, evaluator))); }
public Module GetOrCreateModule(UniqueDocumentInfo documentInfo, string code) { var codeDigest = code.GetDigest(); var cachedModule = GetCachedModule(documentInfo, codeDigest); if (cachedModule != null) { return(cachedModule); } return(CacheModule(new Module(this, engine, documentInfo, codeDigest, code))); }
private V8Script CompileInternal(UniqueDocumentInfo documentInfo, string code, V8CacheKind cacheKind, byte[] cacheBytes, out bool cacheAccepted) { if (FormatCode) { code = MiscHelpers.FormatCode(code); } if (documentInfo.Category == ModuleCategory.CommonJS) { code = CommonJSManager.Module.GetAugmentedCode(code); } return(proxy.Compile(documentInfo, code, cacheKind, cacheBytes, out cacheAccepted)); }
private V8Script CompileInternal(UniqueDocumentInfo documentInfo, string code) { if (FormatCode) { code = MiscHelpers.FormatCode(code); } if (documentInfo.Category == ModuleCategory.CommonJS) { code = CommonJSManager.Module.GetAugmentedCode(code); } return(proxy.Compile(documentInfo, code)); }
internal override object Execute(UniqueDocumentInfo documentInfo, string code, bool evaluate) { if (FormatCode) { code = MiscHelpers.FormatCode(code); } if (documentInfo.Category != DocumentCategory.Script) { throw new NotSupportedException("The script engine cannot execute documents of type '" + documentInfo.Category + "'"); } return(base.Execute(documentInfo, code, evaluate)); }
private Module GetCachedModule(UniqueDocumentInfo documentInfo, UIntPtr codeDigest) { for (var index = 0; index < moduleCache.Count; index++) { var cachedModule = moduleCache[index]; if ((cachedModule.DocumentInfo.UniqueId == documentInfo.UniqueId) && (cachedModule.CodeDigest == codeDigest)) { moduleCache.RemoveAt(index); moduleCache.Insert(0, cachedModule); return(cachedModule); } } return(null); }
internal sealed override object ExecuteRaw(UniqueDocumentInfo documentInfo, string code, bool evaluate) { if (!evaluate) { const ScriptTextFlags flags = ScriptTextFlags.IsVisible; Parse(documentInfo, code, flags, IntPtr.Zero, out _); return(null); } using (var resultVariantBlock = new CoTaskMemVariantBlock()) { const ScriptTextFlags flags = ScriptTextFlags.IsExpression; Parse(documentInfo, code, flags, resultVariantBlock.Addr, out _); return(Marshal.GetObjectForNativeVariant(resultVariantBlock.Addr)); } }
private UIntPtr CreateDebugDocument(UniqueDocumentInfo documentInfo, string code, out DebugDocument document) { UIntPtr sourceContext; if (!sourceManagement) { sourceContext = UIntPtr.Zero; document = null; } else { sourceContext = new UIntPtr(nextSourceContext++); document = new DebugDocument(this, sourceContext, documentInfo, code); debugDocumentMap[sourceContext] = document; } return(sourceContext); }
internal override object Execute(UniqueDocumentInfo documentInfo, string code, bool evaluate) { if (FormatCode) { code = MiscHelpers.FormatCode(code); } if (documentInfo.Category == ModuleCategory.CommonJS) { var module = CommonJSManager.GetOrCreateModule(documentInfo, code); return(ScriptInvoke(() => module.Process())); } if (documentInfo.Category != DocumentCategory.Script) { throw new NotSupportedException("The script engine cannot execute documents of type '" + documentInfo.Category + "'"); } return(base.Execute(documentInfo, code, evaluate)); }
private void Parse(UniqueDocumentInfo documentInfo, string code, ScriptTextFlags flags, IntPtr pVarResult, out EXCEPINFO excepInfo) { var sourceContext = CreateDebugDocument(documentInfo, code, out var debugDocument); if (sourceContext != UIntPtr.Zero) { flags |= ScriptTextFlags.HostManagesSource; } try { activeScript.ParseScriptText(code, null, null, null, sourceContext, 0, flags, pVarResult, out excepInfo); } finally { if (documentInfo.Flags.GetValueOrDefault().HasFlag(DocumentFlags.IsTransient) && (sourceContext != UIntPtr.Zero)) { debugDocumentMap.Remove(sourceContext); debugDocument.Close(); } } }
public static unsafe string LoadModule(void *pSourceDocumentInfo, string specifier, DocumentCategory category, out UniqueDocumentInfo documentInfo) { var engine = ScriptEngine.Current; if (engine == null) { throw new InvalidOperationException("Module loading requires a script engine"); } var settings = engine.DocumentSettings; var document = settings.Loader.LoadDocument(settings, ((UniqueDocumentInfo)GetHostObject(pSourceDocumentInfo)).Info, specifier, category, null); var code = document.GetTextContents(); documentInfo = document.Info.MakeUnique(engine); return(code); }
internal override object ExecuteRaw(UniqueDocumentInfo documentInfo, string code, bool evaluate) { throw new PlatformNotSupportedException(); }
public abstract V8Script Compile(UniqueDocumentInfo documentInfo, string code, V8CacheKind cacheKind, byte[] cacheBytes, out bool cacheAccepted);
public abstract V8Script Compile(UniqueDocumentInfo documentInfo, string code, V8CacheKind cacheKind, out byte[] cacheBytes);
public abstract V8Script Compile(UniqueDocumentInfo documentInfo, string code);
public abstract object Execute(UniqueDocumentInfo documentInfo, string code, bool evaluate);
internal override object Execute(UniqueDocumentInfo documentInfo, string code, bool evaluate) { VerifyNotDisposed(); return(ScriptInvoke(() => ExecuteRaw(documentInfo, code, evaluate))); }
internal V8Script(UniqueDocumentInfo documentInfo, UIntPtr codeDigest) { UniqueDocumentInfo = documentInfo; CodeDigest = codeDigest; }
public V8ScriptImpl(UniqueDocumentInfo documentInfo, UIntPtr codeDigest, V8Script.Handle hScript) : base(documentInfo, codeDigest) { holder = new V8EntityHolder("V8 compiled script", () => hScript); }
public Module(CommonJSManager manager, ScriptEngine engine, UniqueDocumentInfo documentInfo, UIntPtr codeDigest, string code) : this(manager, engine, documentInfo, codeDigest, () => engine.ExecuteRaw(documentInfo, GetAugmentedCode(code), true)) { }