Exemple #1
0
        private BaseBlock CopyBlock(object value)
        {
            object[] args = null;

            if (value is IModuleBlock)
            {
                var oldBlock = value as IModuleBlock;
                args = new object[] { oldBlock.GCommand };
            }
            else if (value is VariableBlock)
            {
                var oldBlock = value as VariableBlock;
                args = new object[] { oldBlock.FriendlyName, oldBlock.GVariable };
            }
            else if (value is FunctionBlock)
            {
                var oldBlock = value as FunctionBlock;
                args = new object[] { oldBlock.GFunction };
            }
            else if (value is ComputeBlock)
            {
                args = new object[] { (value as ComputeBlock).OperatorType };
            }

            if (value.GetType().GetInterfaces().Contains(typeof(IModuleBlock)))
            {
                var moduleBlock = value as IModuleBlock;
                if (moduleBlock.GCommand.Parent != null)
                {
                    Task.Run(async() =>
                    {
                        await compiler.LoadReferenceAsync(moduleBlock.GCommand.Parent.Path);
                        await compiler.LoadDependenciesAsync(moduleBlock.GCommand.Parent.Dependencies);
                    });
                }
            }

            return(Activator.CreateInstance(value.GetType(), args) as BaseBlock);
        }