Exemple #1
0
        public void BlacklistTypes2()
        {
            var opts = new LensCompilerOptions
            {
                SafeMode = SafeMode.Blacklist,
                SafeModeExplicitTypes = new List <string> {
                    "System.GC"
                }
            };

            var src = @"
GC::Collect ()
";

            try
            {
                Compile(src, opts);
                Assert.Fail();
            }
            catch (LensCompilerException ex)
            {
                Assert.AreEqual(
                    string.Format(CompilerMessages.SafeModeIllegalType, typeof(GC).FullName),
                    ex.Message
                    );
            }
        }
Exemple #2
0
        public void BlacklistNamespaces2()
        {
            var opts = new LensCompilerOptions
            {
                SafeMode = SafeMode.Blacklist,
                SafeModeExplicitNamespaces = new List <string> {
                    "System.Text"
                }
            };

            var src = @"
use System.Text.RegularExpressions
new List<Regex> ()
";

            try
            {
                Compile(src, opts);
                Assert.Fail();
            }
            catch (LensCompilerException ex)
            {
                Assert.AreEqual(
                    string.Format(CompilerMessages.SafeModeIllegalType, typeof(List <Regex>).FullName),
                    ex.Message
                    );
            }
        }
Exemple #3
0
        public void BlacklistTypes1()
        {
            var opts = new LensCompilerOptions
            {
                SafeMode = SafeMode.Blacklist,
                SafeModeExplicitTypes = new List <string> {
                    "System.Collections.Stack"
                }
            };

            var src = @"
use System.Collections
var s = new Stack ()
s.Push 1
";

            try
            {
                Compile(src, opts);
                Assert.Fail();
            }
            catch (LensCompilerException ex)
            {
                Assert.AreEqual(
                    string.Format(CompilerMessages.SafeModeIllegalType, typeof(System.Collections.Stack).FullName),
                    ex.Message
                    );
            }
        }
Exemple #4
0
        public Context(LensCompilerOptions options = null)
        {
            Options = options ?? new LensCompilerOptions();

            _DefinedTypes = new Dictionary<string, TypeEntity>();
            _DefinedProperties = new Dictionary<string, GlobalPropertyInfo>();

            Unique = new UniqueNameGenerator();

            if (Options.UseDefaultNamespaces)
            {
                Namespaces.Add("System", true);
                Namespaces.Add("System.Linq", true);
                Namespaces.Add("System.Text.RegularExpressions", true);
            }

            _AssemblyCache = new ReferencedAssemblyCache(Options.UseDefaultAssemblies);
            _ExtensionResolver = new ExtensionMethodResolver(Namespaces, _AssemblyCache);
            _TypeResolver = new TypeResolver(Namespaces, _AssemblyCache)
            {
                ExternalLookup = name =>
                {
                    TypeEntity ent;
                    _DefinedTypes.TryGetValue(name, out ent);
                    return ent == null ? null : ent.TypeBuilder;
                }
            };

            AssemblyName an;
            lock(typeof(Context))
                an = new AssemblyName(Unique.AssemblyName());

            if (Options.AllowSave)
            {
                if(string.IsNullOrEmpty(Options.FileName))
                    Options.FileName = an.Name + (Options.SaveAsExe ? ".exe" : ".dll");

                MainAssembly = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.RunAndSave);
                MainModule = MainAssembly.DefineDynamicModule(an.Name, Options.FileName);
            }
            else
            {
                MainAssembly = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Run);
                MainModule = MainAssembly.DefineDynamicModule(an.Name);
            }

            ContextId = GlobalPropertyHelper.RegisterContext();

            MainType = CreateType(EntityNames.MainTypeName, prepare: false);
            MainType.Kind = TypeEntityKind.Main;
            MainType.Interfaces = new[] {typeof (IScript)};
            MainMethod = MainType.CreateMethod(EntityNames.RunMethodName, typeof(object), Type.EmptyTypes, false, true, false);

            if(Options.LoadStandardLibrary)
                initStdlib();

            InitSafeMode();
        }
Exemple #5
0
        private static LensCompiler createCompiler(LensCompilerOptions opts)
        {
            var compiler = new LensCompiler(opts ?? new LensCompilerOptions {
                AllowSave = true
            });

            compiler.RegisterAssembly(Assembly.Load("System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"));
            return(compiler);
        }
Exemple #6
0
        public void RandTest2()
        {
            var src = "rand 1 1000";
            var opts = new LensCompilerOptions { AllowSave = true };
            var fx = new LensCompiler(opts).Compile(src);

            for (var idx = 0; idx < 1000; idx++)
            {
                var res = (int)fx();
                Assert.IsTrue(res >= 1 && res <= 1000);
            }
        }
Exemple #7
0
        public void RandTest1()
        {
            var src  = "rand ()";
            var opts = new LensCompilerOptions();
            var fx   = new LensCompiler(opts).Compile(src);

            for (var idx = 0; idx < 1000; idx++)
            {
                var res = (double)fx();
                Assert.IsTrue(res >= 0 && res <= 1);
            }
        }
Exemple #8
0
        protected static LensCompiler CreateCompiler(LensCompilerOptions opts)
        {
            var compiler = new LensCompiler(opts ?? new LensCompilerOptions
            {
                #if NET_CLASSIC
                AllowSave = true
                #endif
            });

            compiler.RegisterAssembly(Assembly.Load("System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"));
            return(compiler);
        }
Exemple #9
0
        public void RandTest2()
        {
            var src  = "rand 1 1000";
            var opts = new LensCompilerOptions();
            var fx   = new LensCompiler(opts).Compile(src);

            for (var idx = 0; idx < 1000; idx++)
            {
                var res = (int)fx();
                Assert.IsTrue(res >= 1 && res <= 1000);
            }
        }
Exemple #10
0
        public void RandTest3()
        {
            var src  = "rand (new [1; 2; 3; 4; 5])";
            var opts = new LensCompilerOptions();
            var fx   = new LensCompiler(opts).Compile(src);

            for (var idx = 0; idx < 100; idx++)
            {
                var res = (int)fx();
                Assert.IsTrue(res >= 1 && res <= 5);
            }
        }
Exemple #11
0
        public void RandTest1()
        {
            var src = "rand ()";
            var opts = new LensCompilerOptions { AllowSave = true };
            var fx = new LensCompiler(opts).Compile(src);

            for (var idx = 0; idx < 1000; idx ++)
            {
                var res = (double) fx();
                Assert.IsTrue(res >= 0 && res <= 1);
            }
        }
Exemple #12
0
        protected static void Test(string src, object value, bool testConstants = false)
        {
            var opts = new LensCompilerOptions
            {
                UnrollConstants = true,
                #if NET_CLASSIC
                AllowSave = true
                #endif
            };

            Assert.AreEqual(value, Compile(src, opts));
            if (testConstants)
            {
                Assert.AreEqual(value, Compile(src));
            }
        }
Exemple #13
0
        private void TestSubsystem(Type type, SafeModeSubsystem system, string code)
        {
            var opts = new LensCompilerOptions
            {
                SafeMode = SafeMode.Blacklist,
                SafeModeExplicitSubsystems = system
            };

            try
            {
                Compile(code, opts);
                Assert.Fail();
            }
            catch (LensCompilerException ex)
            {
                Assert.AreEqual(
                    string.Format(CompilerMessages.SafeModeIllegalType, type.FullName),
                    ex.Message
                    );
            }
        }
Exemple #14
0
        public void BlacklistNamespaces1()
        {
            var opts = new LensCompilerOptions
            {
                SafeMode = SafeMode.Blacklist,
                SafeModeExplicitNamespaces = new List<string> { "System.Text" }
            };

            var src = @"new System.Text.RegularExpressions.Regex ""test""";
            try
            {
                Compile(src, opts);
                Assert.Fail();
            }
            catch (LensCompilerException ex)
            {
                Assert.AreEqual(
                    string.Format(CompilerMessages.SafeModeIllegalType, typeof(Regex).FullName),
                    ex.Message
                );
            }
        }
Exemple #15
0
        public void BlacklistTypes1()
        {
            var opts = new LensCompilerOptions
            {
                SafeMode = SafeMode.Blacklist,
                SafeModeExplicitTypes = new List<string> { "System.Collections.Stack" }
            };

            var src = @"
            use System.Collections
            var s = new Stack ()
            s.Push 1
            ";
            try
            {
                Compile(src, opts);
                Assert.Fail();
            }
            catch (LensCompilerException ex)
            {
                Assert.AreEqual(
                    string.Format(CompilerMessages.SafeModeIllegalType, typeof(System.Collections.Stack).FullName),
                    ex.Message
                );
            }
        }
Exemple #16
0
 protected static object Compile(string src, LensCompilerOptions opts = null)
 {
     return(CreateCompiler(opts).Run(src));
 }
Exemple #17
0
 protected static object Compile(string src, LensCompilerOptions opts = null)
 {
     opts = opts ?? new LensCompilerOptions { AllowSave = true };
     return new LensCompiler(opts).Run(src);
 }
Exemple #18
0
        public void BlacklistTypes2()
        {
            var opts = new LensCompilerOptions
            {
                SafeMode = SafeMode.Blacklist,
                SafeModeExplicitTypes = new List<string> { "System.GC" }
            };

            var src = @"
            GC::Collect ()
            ";
            try
            {
                Compile(src, opts);
                Assert.Fail();
            }
            catch (LensCompilerException ex)
            {
                Assert.AreEqual(
                    string.Format(CompilerMessages.SafeModeIllegalType, typeof(GC).FullName),
                    ex.Message
                );
            }
        }
Exemple #19
0
 protected static void Test(IEnumerable <NodeBase> nodes, object value, LensCompilerOptions opts)
 {
     Assert.AreEqual(value, Compile(nodes, opts));
 }
Exemple #20
0
 protected static object Compile(IEnumerable<NodeBase> nodes, LensCompilerOptions opts = null)
 {
     opts = opts ?? new LensCompilerOptions { AllowSave = true };
     return new LensCompiler(opts).Run(nodes);
 }
Exemple #21
0
 protected static void Test(string src, object value, LensCompilerOptions opts)
 {
     Assert.AreEqual(value, Compile(src, opts));
 }
Exemple #22
0
 protected static void Test(string src, object value, LensCompilerOptions opts)
 {
     Assert.AreEqual(value, Compile(src, opts));
 }
Exemple #23
0
 protected static void Test(IEnumerable<NodeBase> nodes, object value, LensCompilerOptions opts)
 {
     Assert.AreEqual(value, Compile(nodes, opts));
 }
Exemple #24
0
        private void testSubsystem(Type type, SafeModeSubsystem system, string code)
        {
            var opts = new LensCompilerOptions
            {
                SafeMode = SafeMode.Blacklist,
                SafeModeExplicitSubsystems = system
            };

            try
            {
                Compile(code, opts);
                Assert.Fail();
            }
            catch (LensCompilerException ex)
            {
                Assert.AreEqual(
                    string.Format(CompilerMessages.SafeModeIllegalType, type.FullName),
                    ex.Message
                );
            }
        }
Exemple #25
0
 private static LensCompiler createCompiler(LensCompilerOptions opts)
 {
     var compiler = new LensCompiler(opts ?? new LensCompilerOptions { AllowSave = true });
     compiler.RegisterAssembly(Assembly.Load("System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"));
     return compiler;
 }
Exemple #26
0
        public Context(LensCompilerOptions options = null)
        {
            Options = options ?? new LensCompilerOptions();

            _definedTypes      = new Dictionary <string, TypeEntity>();
            _definedProperties = new Dictionary <string, GlobalPropertyInfo>();

            Unique = new UniqueNameGenerator();

            if (Options.UseDefaultNamespaces)
            {
                Namespaces.Add("System", true);
                Namespaces.Add("System.Linq", true);
                Namespaces.Add("System.Text.RegularExpressions", true);
            }

            AssemblyCache      = new ReferencedAssemblyCache(Options.UseDefaultAssemblies);
            _extensionResolver = new ExtensionMethodResolver(Namespaces, AssemblyCache);
            _typeResolver      = new TypeResolver(Namespaces, AssemblyCache)
            {
                ExternalLookup = name =>
                {
                    _definedTypes.TryGetValue(name, out var ent);
                    return(ent?.TypeBuilder);
                }
            };

            AssemblyName an;

            lock (typeof(Context))
                an = new AssemblyName(Unique.AssemblyName());

#if NET_CLASSIC
            if (Options.AllowSave)
            {
                if (string.IsNullOrEmpty(Options.FileName))
                {
                    Options.FileName = an.Name + (Options.SaveAsExe ? ".exe" : ".dll");
                }

                MainAssembly = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.RunAndSave);
                MainModule   = MainAssembly.DefineDynamicModule(an.Name, Options.FileName);
            }
            else
            {
                MainAssembly = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Run);
                MainModule   = MainAssembly.DefineDynamicModule(an.Name);
            }
#else
            MainAssembly = AssemblyBuilder.DefineDynamicAssembly(an, AssemblyBuilderAccess.Run);
            MainModule   = MainAssembly.DefineDynamicModule(an.Name);
#endif

            ContextId = GlobalPropertyHelper.RegisterContext();

            MainType            = CreateType(EntityNames.MainTypeName, prepare: false);
            MainType.Kind       = TypeEntityKind.Main;
            MainType.Interfaces = new[] { typeof(IScript) };
            MainMethod          = MainType.CreateMethod(EntityNames.RunMethodName, typeof(object), Type.EmptyTypes, false, true, false);

            if (Options.LoadStandardLibrary)
            {
                InitStdlib();
            }

            InitSafeMode();
        }
Exemple #27
0
 protected static object Compile(IEnumerable<NodeBase> nodes, LensCompilerOptions opts = null)
 {
     return createCompiler(opts).Run(nodes);
 }
Exemple #28
0
 protected static object Compile(string src, LensCompilerOptions opts = null)
 {
     return createCompiler(opts).Run(src);
 }
Exemple #29
0
 protected static object Compile(IEnumerable <NodeBase> nodes, LensCompilerOptions opts = null)
 {
     return(CreateCompiler(opts).Run(nodes));
 }