Exemple #1
0
 public DebugDocument(WindowsScriptEngine engine, UIntPtr sourceContext, UniqueDocumentInfo documentInfo, string code)
 {
     this.engine        = engine;
     this.sourceContext = sourceContext;
     this.documentInfo  = documentInfo;
     Code = code;
     Initialize();
 }
Exemple #2
0
            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;
            }
Exemple #3
0
        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)));
        }
Exemple #4
0
        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));
        }
Exemple #7
0
        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));
        }
Exemple #8
0
        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));
            }
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        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();
                }
            }
        }
Exemple #13
0
        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);
        }
Exemple #14
0
 internal override object ExecuteRaw(UniqueDocumentInfo documentInfo, string code, bool evaluate)
 {
     throw new PlatformNotSupportedException();
 }
Exemple #15
0
 public abstract V8Script Compile(UniqueDocumentInfo documentInfo, string code, V8CacheKind cacheKind, byte[] cacheBytes, out bool cacheAccepted);
Exemple #16
0
 public abstract V8Script Compile(UniqueDocumentInfo documentInfo, string code, V8CacheKind cacheKind, out byte[] cacheBytes);
Exemple #17
0
 public abstract V8Script Compile(UniqueDocumentInfo documentInfo, string code);
Exemple #18
0
 public abstract object Execute(UniqueDocumentInfo documentInfo, string code, bool evaluate);
Exemple #19
0
 internal override object Execute(UniqueDocumentInfo documentInfo, string code, bool evaluate)
 {
     VerifyNotDisposed();
     return(ScriptInvoke(() => ExecuteRaw(documentInfo, code, evaluate)));
 }
Exemple #20
0
 internal V8Script(UniqueDocumentInfo documentInfo, UIntPtr codeDigest)
 {
     UniqueDocumentInfo = documentInfo;
     CodeDigest         = codeDigest;
 }
Exemple #21
0
 public V8ScriptImpl(UniqueDocumentInfo documentInfo, UIntPtr codeDigest, V8Script.Handle hScript)
     : base(documentInfo, codeDigest)
 {
     holder = new V8EntityHolder("V8 compiled script", () => hScript);
 }
Exemple #22
0
 public Module(CommonJSManager manager, ScriptEngine engine, UniqueDocumentInfo documentInfo, UIntPtr codeDigest, string code)
     : this(manager, engine, documentInfo, codeDigest, () => engine.ExecuteRaw(documentInfo, GetAugmentedCode(code), true))
 {
 }