Esempio n. 1
0
        public static void Compile(Executable exe, ContentLoader loader, string filename)
        {
            Import(exe, loader, "main", filename, ImportMode.File);

            for (int i = 0; i < exe.PackageCount; i++)
            {
                var pkg = exe.GetPackage(i);
                pkg.ResolveNode();
            }
        }
Esempio n. 2
0
        void InitialCall(Executable exe)
        {
            _callStack.Clear();
            _dataStack.Clear();

            Constants = exe.Constants;

            // 为了防止用户在Executable new之后添加其他的函数
            // 所以链接过程在第一次调用时, 虽然耗时
            _entryList = exe.GenEntryList();

            // 将指令中所有的entry互相链接
            exe.LinkEntryPoint();

            // 依赖包按依赖顺序初始化
            for (int i = 0; i < exe.PackageCount; i++)
            {
                var pkg = exe.GetPackage(i);

                // 已经创建过了
                if (i < _package.Count)
                {
                    continue;
                }

                var rtPkg = new RuntimePackage(pkg);

                _package.Add(rtPkg);

                if (pkg.InitEntry != null)
                {
                    // 执行包的全局入口( 只会还行一次)
                    ExecuteFunc(exe, rtPkg, pkg.InitEntry, 0, 0);
                }
            }
        }