コード例 #1
0
ファイル: LoadedModule.cs プロジェクト: thedemoncat/OneScript
        public LoadedModule(ModuleImage image)
        {
            Code              = image.Code.ToArray();
            EntryMethodIndex  = image.EntryMethodIndex;
            MethodRefs        = image.MethodRefs.ToArray();
            VariableRefs      = image.VariableRefs.ToArray();
            Methods           = image.Methods.ToArray();
            Constants         = new IValue[image.Constants.Count];
            Variables         = new VariablesFrame(image.Variables);
            ExportedProperies = image.ExportedProperties.ToArray();
            ExportedMethods   = image.ExportedMethods.ToArray();
            ModuleInfo        = image.ModuleInfo;
            LoadAddress       = image.LoadAddress;
            for (int i = 0; i < image.Constants.Count; i++)
            {
                var def = image.Constants[i];
                Constants[i] = ValueFactory.Parse(def.Presentation, def.Type);
            }

            // Resolve annotation constants
            for (int i = 0; i < Methods.Length; i++)
            {
                EvaluateAnnotationParametersValues(Methods[i].Signature.Annotations);
                for (int j = 0; j < Methods[i].Signature.ArgCount; j++)
                {
                    EvaluateAnnotationParametersValues(Methods[i].Signature.Params[j].Annotations);
                }
            }
        }
コード例 #2
0
        void ReleaseDesignerOutlets()
        {
            if (hintTable != null)
            {
                hintTable.Dispose();
                hintTable = null;
            }

            if (labelOne != null)
            {
                labelOne.Dispose();
                labelOne = null;
            }

            if (ModuleImage != null)
            {
                ModuleImage.Dispose();
                ModuleImage = null;
            }

            if (ModulePageNav != null)
            {
                ModulePageNav.Dispose();
                ModulePageNav = null;
            }
        }
コード例 #3
0
        public void TestThatModuleInfoIsSerialized()
        {
            var mi = new ModuleImage
            {
                ModuleInfo = new ModuleInformation
                {
                    Origin      = "AAA",
                    ModuleName  = "BBB",
                    CodeIndexer = new SourceCodeIterator()
                }
            };

            var formatter = new BinaryFormatter();

            using (var ms = new MemoryStream())
            {
                formatter.Serialize(ms, mi);
                ms.Position = 0;

                var obj = (ModuleImage)formatter.Deserialize(ms);
                Assert.That(obj.ModuleInfo.Origin, Is.EqualTo("AAA"));
                Assert.That(obj.ModuleInfo.ModuleName, Is.EqualTo("BBB"));
                Assert.That(obj.ModuleInfo.CodeIndexer, Is.Null);
            }
        }
コード例 #4
0
        public Process CreateProcess(IHostApplication host, ModuleImage moduleImage, ICodeSource src)
        {
            SetGlobalEnvironment(host, src);
            var module = _engine.LoadModuleImage(moduleImage);

            return(InitProcess(host, module));
        }
コード例 #5
0
 protected internal virtual void Close()
 {
     if (_image != null)
     {
         _image.Close();
         _image = null;
     }
 }
コード例 #6
0
ファイル: Compiler.cs プロジェクト: pauliv2/OneScript
        public ModuleImage Compile(Parser parser, ICompilerContext context)
        {
            _module = new ModuleImage();
            _ctx = context;
            _parser = parser;
            _parser.Start();

            BuildModule();
            CheckForwardedDeclarations();

            return _module;
        }
コード例 #7
0
 internal LoadedModule(ModuleImage image)
 {
     this.Code              = image.Code.ToArray();
     this.EntryMethodIndex  = image.EntryMethodIndex;
     this.MethodRefs        = image.MethodRefs.ToArray();
     this.VariableRefs      = image.VariableRefs.ToArray();
     this.Methods           = image.Methods.ToArray();
     this.Constants         = new IValue[image.Constants.Count];
     this.Variables         = new VariablesFrame(image.Variables);
     this.ExportedProperies = image.ExportedProperties.ToArray();
     this.ExportedMethods   = image.ExportedMethods.ToArray();
     this.ModuleInfo        = image.ModuleInfo;
     for (int i = 0; i < image.Constants.Count; i++)
     {
         var def = image.Constants[i];
         this.Constants[i] = ValueFactory.Parse(def.Presentation, def.Type);
     }
 }
コード例 #8
0
        protected void LoadSignature(IBinaryAccessor accessor, ModuleImage image)
        {
            byte sigType = accessor.ReadByte();

            if ((sigType & Metadata.SignatureType.Property) != Metadata.SignatureType.Property)
            {
                throw new CodeModelException(string.Format(SR.AssemblyLoadError, _module.Location));
            }

            _hasThis = ((sigType & Metadata.SignatureType.HasThis) == Metadata.SignatureType.HasThis);

            int paramCount = accessor.ReadCompressedInteger();

            _returnType = TypeSignature.Load(accessor, _module);

            _parameters = new PropertyParameterCollection(this);
            _parameters.Load(accessor, paramCount);
        }
コード例 #9
0
ファイル: LoadedModule.cs プロジェクト: Shemetov/OneScript
 internal LoadedModule(ModuleImage image)
 {
     this.Code = image.Code.ToArray();
     this.EntryMethodIndex = image.EntryMethodIndex;
     this.MethodRefs = image.MethodRefs.ToArray();
     this.VariableRefs = image.VariableRefs.ToArray();
     this.Methods = image.Methods.ToArray();
     this.Constants = new IValue[image.Constants.Count];
     this.VariableFrameSize = image.VariableFrameSize;
     this.ExportedProperies = image.ExportedProperties.ToArray();
     this.ExportedMethods = image.ExportedMethods.ToArray();
     this.ModuleInfo = image.ModuleInfo;
     for (int i = 0; i < image.Constants.Count; i++)
     {
         var def = image.Constants[i];
         this.Constants[i] = ValueFactory.Parse(def.Presentation, def.Type);
     }
 }
コード例 #10
0
        public void rr(string source)
        {
            ICodeSource sourceToCompile = Engine.Loader.FromFile(source);
            ModuleImage module          = Engine.GetCompilerService().Compile(sourceToCompile);

            UserAddedScript script = new UserAddedScript
            {
                Type   = UserAddedScriptType.Class,
                Image  = module,
                Symbol = source
            };

            Engine.LoadUserScript(script);

            //var builder = new ClassBuilder<UserScriptContextInstance>();
            //var reflected = builder.SetModule(module)
            //                       .SetTypeName("Dummy")
            //                       .ExportDefaults()
            //                       .Build();
        }
コード例 #11
0
        public async Task <bool> UploadSampleImage(ModuleSampleImageList model)
        {
            //_contex.ModuleImages
            var dataModel = new ModuleImage();

            dataModel.ModulId     = model.ModuleId;
            dataModel.SampleImage = model.SampleImage;
            dataModel.Description = model.ImageDesc;
            dataModel.CreateDate  = DateTime.UtcNow;
            dataModel.UpdateDate  = DateTime.UtcNow;

            _contex.ModuleImages.Add(dataModel);

            return(await _contex.SaveChangesAsync() > 0 ? true : false);

            //return await Task.Run(() =>
            //{

            //});
        }
コード例 #12
0
        public LoadedModule(ModuleImage image)
        {
            Code              = image.Code.ToArray();
            EntryMethodIndex  = image.EntryMethodIndex;
            MethodRefs        = image.MethodRefs.ToArray();
            VariableRefs      = image.VariableRefs.ToArray();
            Methods           = image.Methods.ToArray();
            Constants         = new IValue[image.Constants.Count];
            Variables         = new VariablesFrame(image.Variables);
            ExportedProperies = image.ExportedProperties.ToArray();
            ExportedMethods   = image.ExportedMethods.ToArray();
            ModuleInfo        = image.ModuleInfo;
            LoadAddress       = image.LoadAddress;
            for (int i = 0; i < image.Constants.Count; i++)
            {
                var def = image.Constants[i];
                Constants[i] = ValueFactory.Parse(def.Presentation, def.Type);
            }

            ResolveAnnotationConstants();
        }
コード例 #13
0
        public void LoadAndRegister(string typeName, ModuleImage moduleImage)
        {
            if (_loadedModules.ContainsKey(typeName))
            {
                var alreadyLoadedSrc = _loadedModules[typeName].ModuleInfo.Origin;
                var currentSrc       = moduleImage.ModuleInfo.Origin;

                if (alreadyLoadedSrc != currentSrc)
                {
                    throw new RuntimeException("Type «" + typeName + "» already registered");
                }

                return;
            }

            var loadedModule = new LoadedModule(moduleImage);

            _loadedModules.Add(typeName, loadedModule);

            TypeManager.RegisterType(typeName, typeof(AttachedScriptsFactory));
        }
コード例 #14
0
        private void WriteImage(TextWriter output, ModuleImage module)
        {
            output.WriteLine(".variableFrame:");
            module.Variables.ForEach(x => output.WriteLine(" " + x));

            output.WriteLine(".constants");
            for (int i = 0; i < module.Constants.Count; i++)
            {
                var item = module.Constants[i];
                output.WriteLine(
                    String.Format("{0,-3}:type: {1}, val: {2}",
                                  i,
                                  Enum.GetName(typeof(DataType), item.Type),
                                  item.Presentation));
            }
            output.WriteLine(".code");
            for (int i = 0; i < module.Code.Count; i++)
            {
                var item = module.Code[i];
                output.WriteLine(
                    String.Format("{0,-3}:({1,-10}{2,3})",
                                  i,
                                  Enum.GetName(typeof(OperationCode), item.Code),
                                  item.Argument));
            }
            output.WriteLine(".procedures");
            foreach (var item in module.Methods)
            {
                WriteMethodDefinition(output, item);
            }
            output.WriteLine(".varmap");
            WriteSymbolMap(output, module.VariableRefs);
            output.WriteLine(".procmap");
            WriteSymbolMap(output, module.MethodRefs);
            output.WriteLine(".moduleEntry");
            output.WriteLine(module.EntryMethodIndex.ToString());
            output.WriteLine(".exports");
            WriteExports(output, module.ExportedProperties);
            WriteExports(output, module.ExportedMethods);
        }
コード例 #15
0
ファイル: ModuleWriter.cs プロジェクト: Shemetov/OneScript
 private void WriteImage(TextWriter output, ModuleImage module)
 {
     output.WriteLine(".variableFrame:" + module.VariableFrameSize.ToString());
     output.WriteLine(".constants");
     for (int i = 0; i < module.Constants.Count; i++)
     {
         var item = module.Constants[i];
         output.WriteLine(
             String.Format("{0,-3}:type: {1}, val: {2}",
             i,
             Enum.GetName(typeof(DataType), item.Type),
             item.Presentation));
     }
     output.WriteLine(".code");
     for (int i = 0; i < module.Code.Count; i++)
     {
         var item = module.Code[i];
         output.WriteLine(
             String.Format("{0,-3}:({1,-10}{2,3})",
             i,
             Enum.GetName(typeof(OperationCode), item.Code),
             item.Argument));
     }
     output.WriteLine(".procedures");
     foreach (var item in module.Methods)
     {
         WriteMethodDefinition(output, item);
     }
     output.WriteLine(".varmap");
     WriteSymbolMap(output, module.VariableRefs);
     output.WriteLine(".procmap");
     WriteSymbolMap(output, module.MethodRefs);
     output.WriteLine(".moduleEntry");
     output.WriteLine(module.EntryMethodIndex.ToString());
     output.WriteLine(".exports");
     WriteExports(output, module.ExportedProperties);
     WriteExports(output, module.ExportedMethods);
 }
コード例 #16
0
        private void LoadImage()
        {
            PEImage pe = null;

            try
            {
                pe = PEImage.LoadFile(_location, _assemblyManager.FileLoadMode);

                CorHeader corHeader;
                var       metadata = MemoryMappedMetadata.Load(pe, out corHeader);

                _image = new ModuleImage(this, pe, metadata, corHeader);
            }
            catch (Exception)
            {
                if (pe != null)
                {
                    pe.Dispose();
                    pe = null;
                }

                throw;
            }
        }
コード例 #17
0
        protected void LoadSignature(IBinaryAccessor accessor, ModuleImage image)
        {
            _sigType = accessor.ReadByte();

            if ((_sigType & Metadata.SignatureType.Generic) == Metadata.SignatureType.Generic)
            {
                accessor.ReadCompressedInteger();                 // GenericParameterCount (unused)
            }
            int paramCount = accessor.ReadCompressedInteger();

            int[] rids;
            image.GetParamsByMethod(_rid, out rids);

            int ridIndex = 0;

            _returnType = new MethodReturnType(this);
            _returnType.Load(accessor, rids, ref ridIndex);

            if (paramCount > 0)
            {
                _parameters = new MethodParameterCollection(this);
                _parameters.Load(accessor, paramCount, rids, ridIndex);
            }
        }