Пример #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="LuaScript"/> class.
        /// </summary>
        /// <param name="modules">Lua core modules.</param>
        public LuaScript(CoreModules modules)
        {
            _script = new Script(modules);
            Factory = new LuaClassFactory();
            Set("_factory", Factory);

            //TODO: Store it in database.
            Execute(@"
			function new(className, ...)
				return _factory.New(className, ...)
			end

			function static(className)
				return _factory.Static(className);
			end

			function using(namespace)
				return _factory.AddNamespace(namespace);
			end

			function typenameof(object)
				local type = type(object);
				return type == 'userdata' and object.getCLRType().FullName or type
			end

			function foreach(collection, action)
				for i = 0, collection.Count - 1 do
					action(collection[i]);
				end
			end"            );
        }
 public UserScriptRunner(CoreModules modules)
 {
     Lua = new Script(modules);
     Lua.Globals["RegisterHook"]      = (Action <DynValue, string>)RegisterHook;
     Lua.Globals["RegisterCoroutine"] = (Action <DynValue, string, bool>)RegisterCoroutine;
     Lua.Globals["RemoveHook"]        = (Action <string>)RemoveHook;
     GlobalScriptBindings.Initialize(Lua);
 }
Пример #3
0
        /// <summary>
        /// Creates a MoonSharp script with bindings
        /// </summary>
        /// <param name="bindings"></param>
        /// <returns></returns>
        public static Script CreateBoundScript(ScriptBindings bindings = null, CoreModules modules = CoreModules.Preset_HardSandbox | CoreModules.Coroutine | CoreModules.OS_Time)
        {
            Script script = new Script(modules);

            GlobalScriptBindings.Initialize(script);
            bindings.Initialize(script);
            return(script);
        }
Пример #4
0
 public static IEnumerable <CoreModuleInfo> FindModules(string name, bool ignoreCase = true)
 {
     return
         (CoreModules.Where(
              cmi =>
              String.Equals(
                  cmi.Name, name, ignoreCase ? StringComparison.InvariantCultureIgnoreCase : StringComparison.InvariantCulture)));
 }
Пример #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Script"/> class.
        /// </summary>
        /// <param name="coreModules">The core modules to be pre-registered in the default global table.</param>
        public Script(CoreModules coreModules)
        {
            Options          = new ScriptOptions(DefaultOptions);
            PerformanceStats = new PerformanceStatistics();
            Registry         = new Table(this);

            m_ByteCode      = new ByteCode(this);
            m_GlobalTable   = new Table(this).RegisterCoreModules(coreModules);
            m_MainProcessor = new Processor(this, m_GlobalTable, m_ByteCode);
        }
Пример #6
0
        public ScriptObject(CoreModules coreModules) : base(coreModules)
        {
            guid = System.Guid.NewGuid();

            this.Options.ScriptLoader = new BittyScriptLoader();
            // This is also where we load all of the BFun globals
            ((BittyScriptLoader)this.Options.ScriptLoader).IgnoreLuaPathGlobal = true;
            ((BittyScriptLoader)this.Options.ScriptLoader).ModulePaths         =
                BittyScriptLoader.UnpackStringPaths("/system/?.lua;/objects/?.lua;/modules/?.lua");
        }
Пример #7
0
		/// <summary>
		/// Initializes a new instance of the <see cref="Script"/> class.
		/// </summary>
		/// <param name="coreModules">The core modules to be pre-registered in the default global table.</param>
		public Script(CoreModules coreModules)
		{
			Options = new ScriptOptions(DefaultOptions);
			PerformanceStats = new PerformanceStatistics();
			Registry = new Table(this);

			m_ByteCode = new ByteCode(this);
			m_GlobalTable = new Table(this).RegisterCoreModules(coreModules);
			m_MainProcessor = new Processor(this, m_GlobalTable, m_ByteCode);
		}
Пример #8
0
 public LuaBlazorCompiler(CoreModules modules = CoreModules.Preset_HardSandbox)
 {
     _script = new(modules)
     {
         Options =
         {
             Stdin  = Stream.Null,
             Stdout = Stream.Null,
             Stderr = Stream.Null,
         },
     };
 }
Пример #9
0
        Script GenerateLuaScript()
        {
            CoreModules modules = CoreModules.Preset_Default;
            Script      script  = new Script(modules);

            script.Options.DebugPrint = s => ConsolePrint(s);

            script.Globals["io"]  = typeof(Lua_IO);
            script.Globals["sys"] = typeof(Lua_System);

            return(script);
        }
Пример #10
0
 private void RegisterModules(LuaModules luaModules, CoreModules modules = CoreModules.Preset_SoftSandbox)
 {
     foreach (Enum value in Enum.GetValues(typeof(LuaModules)))
     {
         if (luaModules.HasFlag(value) && Convert.ToInt32(value) != 0)
         {
             var name  = value.ToString().ToLowerInvariant();
             var table = AddDefaultFunctions(new Table(Script).RegisterCoreModules(modules));
             Script.DoFile(name, table);
             Script.Globals[name] = table;
         }
     }
 }
Пример #11
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Script"/> class.
        /// </summary>
        /// <param name="coreModules">The core modules to be pre-registered in the default global table.</param>
        public Script(CoreModules coreModules)
        {
            Options          = new ScriptOptions(DefaultOptions);
            PerformanceStats = new PerformanceStatistics();
            Registry         = new Table(this);

            m_ByteCode      = new ByteCode(this);
            m_MainProcessor = new Processor(this, m_GlobalTable, m_ByteCode);
            m_GlobalTable   = new Table(this).RegisterCoreModules(coreModules);
            foreach (var t in TypeDescriptorRegistry.RegisteredTypes)
            {
                Type valType = t.Value.Type;
                if (valType.GetTypeInfo().Assembly.FullName != typeof(Script).GetTypeInfo().Assembly.FullName)
                {
                    // m_GlobalTable.RegisterModuleType(t.Value.Type);
                    if (t.Value is StandardUserDataDescriptor)
                    {
                        StandardUserDataDescriptor desc = (StandardUserDataDescriptor)t.Value;
                        foreach (var member in desc.Members)
                        {
                            if (member.Value is MethodMemberDescriptor)
                            {
                                MethodMemberDescriptor methDesc = (MethodMemberDescriptor)member.Value;
                                if (methDesc.IsConstructor)
                                {
                                    m_GlobalTable.Set(methDesc.Name, methDesc.GetCallbackAsDynValue(this));
                                }
                            }
                            else if (member.Value is OverloadedMethodMemberDescriptor)
                            {
                                OverloadedMethodMemberDescriptor methDesc = (OverloadedMethodMemberDescriptor)member.Value;
                                foreach (var overloadDesc in methDesc.m_Overloads)
                                {
                                    if (overloadDesc is MethodMemberDescriptor)
                                    {
                                        MethodMemberDescriptor actualDesc = (MethodMemberDescriptor)overloadDesc;
                                        if (actualDesc.IsConstructor)
                                        {
                                            //m_GlobalTable.Set(desc.FriendlyName, actualDesc.GetCallbackAsDynValue(this));
                                            m_GlobalTable.Set(desc.FriendlyName, DynValue.NewCallback(methDesc.GetCallbackFunction(this)));
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
 /// <summary>
 /// Creates a new HookedScriptRunner with the specified modules, throws exception if Coroutines flag is not included
 /// </summary>
 /// <param name="modules"></param>
 public HookedScriptRunner(CoreModules modules)
 {
     if (!modules.HasFlag(CoreModules.Coroutine))
     {
         throw new ArgumentException("Modules must contain the Coroutine Flag to be used in a HookedScriptRunner", "modules");
     }
     Lua = new Script(modules);
     Lua.Globals["Script"]            = new ScriptReference(Lua);
     Lua.Globals["RegisterHook"]      = (Action <DynValue, string>)RegisterHook;
     Lua.Globals["RegisterCoroutine"] = (Action <DynValue, string, bool>)RegisterCoroutine;
     Lua.Globals["RemoveHook"]        = (Action <string>)RemoveHook;
     //Global init
     GlobalScriptBindings.Initialize(Lua);
 }
Пример #13
0
        /// <summary>
        /// Register the core modules to a table
        /// </summary>
        /// <param name="table">The table.</param>
        /// <param name="modules">The modules.</param>
        /// <returns></returns>
        public static Table RegisterCoreModules(this Table table, CoreModules modules)
        {
            modules = Script.GlobalOptions.Platform.FilterSupportedCoreModules(modules);

            if (modules.Has(CoreModules.GlobalConsts))
            {
                RegisterConstants(table);
            }
            if (modules.Has(CoreModules.TableIterators))
            {
                RegisterModuleType <TableIteratorsModule>(table);
            }
            if (modules.Has(CoreModules.Basic))
            {
                RegisterModuleType <BasicModule>(table);
            }
            if (modules.Has(CoreModules.Metatables))
            {
                RegisterModuleType <MetaTableModule>(table);
            }
            if (modules.Has(CoreModules.LoadMethods))
            {
                RegisterModuleType <LoadModule>(table);
            }
            if (modules.Has(CoreModules.Table))
            {
                RegisterModuleType <TableModule>(table);
            }
            if (modules.Has(CoreModules.ErrorHandling))
            {
                RegisterModuleType <ErrorHandlingModule>(table);
            }
            if (modules.Has(CoreModules.Coroutine))
            {
                RegisterModuleType <CoroutineModule>(table);
            }
            if (modules.Has(CoreModules.Dynamic))
            {
                RegisterModuleType <DynamicModule>(table);
            }
            if (modules.Has(CoreModules.PicoMath))
            {
                RegisterModuleType <PicoMathModule>(table);
            }

            return(table);
        }
Пример #14
0
        public static ScriptObject CreateScriptObject(CoreModules coreModules, UPath path, Guid?creator)
        {
            var ob = new ScriptObject(coreModules);

            if (creator == null)
            {
                if ((UPath)path == (UPath)KernelHelper.Configuration["driverObject"])
                {
                    ob.SetCreatorGuid(Core.GetGuid());
                }
                else
                {
                    return(null);
                }
            }
            ob.scriptPath = path;
            ob.Touch();
            return(ob);
        }
Пример #15
0
    public static string GenerateLuaSequence()
    {
        CoreModules modules = CoreModules.Preset_HardSandbox; // Allows access to only a select few APIs in Lua code.
        var         luaFile = Resources.Load <TextAsset>("Lua/LuaCode");
        string      functions;

        functions = luaFile.ToString();

        //final LUA code
        LuaCode = functions + CsharpCode + @"
        return sequence
        end
        ";

        Script   myLuaScript = new Script(modules);
        DynValue temp        = myLuaScript.DoString(LuaCode);

        temp = myLuaScript.Call(myLuaScript.Globals["getSequence"]); //calls getSequence function from  LUA script and returns the sequence

        return(temp.ToString());
    }
Пример #16
0
    /// <summary>
    /// Default settings are a soft sandbox and setting up the file system script loader
    /// </summary>
    public LuaVM(VMSettings vmSettings, string[] extraPath, CoreModules presetComplete)
    {
        m_LuaScript =
            new Script(presetComplete)
        {
            Options =
            {
                ScriptLoader = new UnityAssetsScriptLoader(),
                DebugPrint   = log => Logger.Log(Channel.LuaNative, log),
            }
        };
        ((ScriptLoaderBase)m_LuaScript.Options.ScriptLoader).ModulePaths = extraPath;

        if ((vmSettings & VMSettings.AttachAPIs) == VMSettings.AttachAPIs)
        {
            AttachAPIS();
        }

        if ((vmSettings & VMSettings.AttachEnums) == VMSettings.AttachEnums)
        {
            AttachLuaEnums();
        }
    }
Пример #17
0
 public ExecutionConstrainedScript(CoreModules coreModules) : base(coreModules)
 {
 }
Пример #18
0
		/// <summary>
		/// Filters the CoreModules enumeration to exclude non-supported operations
		/// </summary>
		/// <param name="module">The requested modules.</param>
		/// <returns>
		/// The requested modules, with unsupported modules filtered out.
		/// </returns>
		public override CoreModules FilterSupportedCoreModules(CoreModules module)
		{
			return module & (~(CoreModules.IO | CoreModules.OS_System));
		}
Пример #19
0
		/// <summary>
		/// Filters the CoreModules enumeration to exclude non-supported operations
		/// </summary>
		/// <param name="module">The requested modules.</param>
		/// <returns>
		/// The requested modules, with unsupported modules filtered out.
		/// </returns>
		public override CoreModules FilterSupportedCoreModules(CoreModules module)
		{
			return module;
		}
 public CoreModules FilterSupportedCoreModules(CoreModules module)
 {
     throw new NotImplementedException();
 }
Пример #21
0
 public override CoreModules FilterSupportedCoreModules(CoreModules module)
 {
     return(module & ~CoreModules.LoadMethods);
 }
Пример #22
0
 public static bool Has(this CoreModules val, CoreModules flag)
 {
     return((val & flag) == flag);
 }
Пример #23
0
        public static Table RegisterCoreModules(this Table table, CoreModules modules)
        {
            modules = Platform.Current.FilterSupportedCoreModules(modules);

            if (modules.Has(CoreModules.GlobalConsts))
            {
                RegisterConstants(table);
            }
            if (modules.Has(CoreModules.TableIterators))
            {
                RegisterModuleType <TableIteratorsModule>(table);
            }
            if (modules.Has(CoreModules.Basic))
            {
                RegisterModuleType <BasicModule>(table);
            }
            if (modules.Has(CoreModules.Metatables))
            {
                RegisterModuleType <MetaTableModule>(table);
            }
            if (modules.Has(CoreModules.String))
            {
                RegisterModuleType <StringModule>(table);
            }
            if (modules.Has(CoreModules.LoadMethods))
            {
                RegisterModuleType <LoadModule>(table);
            }
            if (modules.Has(CoreModules.Table))
            {
                RegisterModuleType <TableModule>(table);
            }
            if (modules.Has(CoreModules.Table))
            {
                RegisterModuleType <TableModule_Globals>(table);
            }
            if (modules.Has(CoreModules.ErrorHandling))
            {
                RegisterModuleType <ErrorHandlingModule>(table);
            }
            if (modules.Has(CoreModules.Math))
            {
                RegisterModuleType <MathModule>(table);
            }
            if (modules.Has(CoreModules.Coroutine))
            {
                RegisterModuleType <CoroutineModule>(table);
            }
            if (modules.Has(CoreModules.Bit32))
            {
                RegisterModuleType <Bit32Module>(table);
            }
            if (modules.Has(CoreModules.Dynamic))
            {
                RegisterModuleType <DynamicModule>(table);
            }
            if (modules.Has(CoreModules.OS_System))
            {
                RegisterModuleType <OsSystemModule>(table);
            }
            if (modules.Has(CoreModules.OS_Time))
            {
                RegisterModuleType <OsTimeModule>(table);
            }
            if (modules.Has(CoreModules.IO))
            {
                RegisterModuleType <IoModule>(table);
            }
            if (modules.Has(CoreModules.Debug))
            {
                RegisterModuleType <DebugModule>(table);
            }

            return(table);
        }
		/// <summary>
		/// Filters the CoreModules enumeration to exclude non-supported operations
		/// </summary>
		/// <param name="module">The requested modules.</param>
		/// <returns>
		/// The requested modules, with unsupported modules filtered out.
		/// </returns>
		public abstract CoreModules FilterSupportedCoreModules(CoreModules module);
Пример #25
0
		public static bool Has(this CoreModules val, CoreModules flag)
		{
			return (val & flag) == flag;
		}
Пример #26
0
		private bool AreCoreModulesFullySupported(CoreModules modules)
		{
			CoreModules supp = Script.GlobalOptions.Platform.FilterSupportedCoreModules(modules);
			return supp == modules;
		}
Пример #27
0
 public static CoreModuleInfo GetModule(Type t)
 {
     return(CoreModules.FirstOrDefault(cmi => cmi.TypeOf.IsEqualOrChildOf(t)));
 }
Пример #28
0
        private bool AreCoreModulesFullySupported(CoreModules modules)
        {
            CoreModules supp = Script.GlobalOptions.Platform.FilterSupportedCoreModules(modules);

            return(supp == modules);
        }
 public BasicScriptRunner(CoreModules modules = CoreModules.Preset_HardSandbox | CoreModules.Coroutine | CoreModules.OS_Time)
 {
     Lua = new Script(modules);
     Lua.Globals["Script"] = new ScriptReference(Lua);
     GlobalScriptBindings.Initialize(Lua);
 }
 public SubCommandAttribute(int width, int height, CoreModules modules)
 {
     Width       = width;
     Height      = height;
     CoreModules = modules;
 }
		public override CoreModules FilterSupportedCoreModules(CoreModules module)
		{
			throw new NotImplementedException();
		}
Пример #32
0
 /// <summary>
 /// Filters the CoreModules enumeration to exclude non-supported operations
 /// </summary>
 /// <param name="module">The requested modules.</param>
 /// <returns>
 /// The requested modules, with unsupported modules filtered out.
 /// </returns>
 public override CoreModules FilterSupportedCoreModules(CoreModules module)
 {
     return(module & (~(CoreModules.IO | CoreModules.OS_System)));
 }
Пример #33
0
 public LuaVM(CoreModules presetComplete, string[] extraPath)
     : this(VMSettings.AttachAll, extraPath, presetComplete)
 {
 }
 public CoreModules FilterSupportedCoreModules(CoreModules module)
 {
     return(module & ~(CoreModules.OS_System | CoreModules.IO));
 }
Пример #35
0
 /// <summary>
 /// Filters the CoreModules enumeration to exclude non-supported operations
 /// </summary>
 /// <param name="module">The requested modules.</param>
 /// <returns>
 /// The requested modules, with unsupported modules filtered out.
 /// </returns>
 public abstract CoreModules FilterSupportedCoreModules(CoreModules module);
Пример #36
0
 public override CoreModules FilterSupportedCoreModules(CoreModules module)
 {
     return(CoreModules.Basic);
 }
Пример #37
0
 public bool AreCoreModulesFullySupported(CoreModules modules)
 {
     return(FilterSupportedCoreModules(modules) == modules);
 }