Ejemplo n.º 1
0
        /// <summary>
        /// Imports a property registered in GlobalPropertyHelper into the lookup.
        /// </summary>
        public void ImportProperty <T>(string name, Func <T> getter, Action <T> setter = null)
        {
            EnsureNotSaving();

            if (_definedProperties.ContainsKey(name))
            {
                Error(CompilerMessages.PropertyImported, name);
            }

            var ent = GlobalPropertyHelper.RegisterProperty(ContextId, getter, setter);

            _definedProperties.Add(name, ent);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Imports a property registered in GlobalPropertyHelper into the lookup.
        /// </summary>
        public void ImportProperty <T>(string name, Func <T> getter, Action <T> setter = null)
        {
            if (Options.AllowSave)
            {
                Error(CompilerMessages.ImportIntoSaveableAssembly);
            }

            if (_DefinedProperties.ContainsKey(name))
            {
                Error(CompilerMessages.PropertyImported, name);
            }

            var ent = GlobalPropertyHelper.RegisterProperty(ContextId, getter, setter);

            _DefinedProperties.Add(name, ent);
        }
Ejemplo n.º 3
0
 public void Dispose()
 {
     GlobalPropertyHelper.UnregisterContext(_Context.ContextId);
 }
Ejemplo n.º 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 =>
                {
                    _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();
        }