Пример #1
0
 public void SetParameter(ModuleBinding module, ParameterBinding param, object value)
 {
     var binding = new Binding();
     binding.Module = module;
     binding.Parameter = param;
     SetParameter(binding, value);
 }
Пример #2
0
        /// <inheritdoc />
        protected override AmbientNamespaceDefinition?GetNamespaceDefinition()
        {
            var members = new List <NamespaceFunctionDefinition>();

            foreach (NameResolutionSemantics semantics in Enum.GetValues(typeof(NameResolutionSemantics)))
            {
                var memberName = ToCamelCase(semantics.ToString());
                members.Add(Function(memberName, ModuleBinding.CreateEnum(Symbol(memberName), (int)semantics)));
            }

            return(new AmbientNamespaceDefinition(
                       typeof(NameResolutionSemantics).Name,
                       members.ToArray()));
        }
Пример #3
0
        /// <inheritdoc />
        protected override AmbientNamespaceDefinition?GetNamespaceDefinition()
        {
            var members = new List <NamespaceFunctionDefinition>();

            foreach (SealSourceDirectoryOption kind in Enum.GetValues(typeof(SealSourceDirectoryOption)))
            {
                var memberName = ToCamelCase(kind.ToString());
                members.Add(Function(memberName, ModuleBinding.CreateEnum(Symbol(memberName), (int)kind)));
            }

            return(new AmbientNamespaceDefinition(
                       "Transformer." + typeof(SealSourceDirectoryOption).Name,
                       members.ToArray()));
        }
Пример #4
0
        private List <NamespaceFunctionDefinition> GetGlobalFunctionDefinitions()
        {
            var globRecursivelyBinding = ModuleBinding.CreateFun(Symbol(Constants.Names.GlobRFunction), GlobRecursively, GlobSignature, StringTable);

            return(new List <NamespaceFunctionDefinition>
            {
                Function(Constants.Names.GlobFunction, this.Glob, GlobSignature),
                Function(Constants.Names.GlobRFunction, globRecursivelyBinding),
                Function(Constants.Names.GlobRecursivelyFunction, globRecursivelyBinding),
                Function(Constants.Names.GlobFoldersFunction, this.GlobFolders, GlobFoldersSignature),
                Function("addIf", AddIf, AddIfSignature),
                Function("addIfLazy", AddIfLazy, AddIfLazySignature),
                Function("sign", Sign, SignSignature),
            });
        }
        /// <inheritdoc />
        protected override AmbientNamespaceDefinition?GetNamespaceDefinition()
        {
            var  members = new List <NamespaceFunctionDefinition>();
            Type containerIsolationLevelType = typeof(ContainerIsolationLevel);

            foreach (string isolationLevelName in Enum.GetNames(containerIsolationLevelType))
            {
                var value      = Enum.Parse(containerIsolationLevelType, isolationLevelName);
                var memberName = ToCamelCase(isolationLevelName);
                members.Add(Function(memberName, ModuleBinding.CreateEnum(Symbol(memberName), (int)value)));
            }

            return(new AmbientNamespaceDefinition(
                       typeof(ContainerIsolationLevel).Name,
                       members.ToArray()));
        }
Пример #6
0
        /// <inheritdoc />
        protected override AmbientNamespaceDefinition?GetNamespaceDefinition()
        {
            var members = new List <NamespaceFunctionDefinition>();

            foreach (ArtifactKind kind in Enum.GetValues(typeof(ArtifactKind)))
            {
                // Undefined is an artificial value.
                if (kind != ArtifactKind.Undefined)
                {
                    var memberName = ToCamelCase(kind.ToString());
                    members.Add(Function(memberName, ModuleBinding.CreateEnum(Symbol(memberName), (int)kind)));
                }
            }

            return(new AmbientNamespaceDefinition(
                       typeof(ArtifactKind).Name,
                       members.ToArray()));
        }
        public void Bind(ModuleBinding module)
        {
            Module = module;
            KnobOctave.SetBinding(module, ParameterBinding.Octave);
            KnobSemi.SetBinding(module, ParameterBinding.Semi);
            KnobCent.SetBinding(module, ParameterBinding.Cent);
            KnobWavePosition.SetBinding(module, ParameterBinding.WavePosition);

            var coll = Extensions.GetLogicalChildCollection<Knob>(this);

            foreach (var knob in coll)
                knob.ValueChanged += ValueChanged;

            foreach (var knob in coll)
            {
                knob.Value = knob.Value;
                ValueChanged(knob, null);
            }
        }
Пример #8
0
        public void Bind(ModuleBinding module)
        {
            KnobA.SetBinding(module, ParameterBinding.Attack);
            KnobH.SetBinding(module, ParameterBinding.Hold);
            KnobD.SetBinding(module, ParameterBinding.Decay);
            KnobS.SetBinding(module, ParameterBinding.Sustain);
            KnobR.SetBinding(module, ParameterBinding.Release);

            var coll = Extensions.GetLogicalChildCollection<Knob>(this);

            foreach (var knob in coll)
                knob.ValueChanged += ValueChanged;

            foreach (var knob in coll)
            {
                knob.Value = knob.Value;
                ValueChanged(knob, null);
            }
        }
        public void Bind(ModuleBinding module)
        {
            KnobCutoff.SetBinding(module, ParameterBinding.Cutoff);
            KnobResonance.SetBinding(module, ParameterBinding.Resonance);
            KnobX.SetBinding(module, ParameterBinding.X);
            KnobA.SetBinding(module, ParameterBinding.A);
            KnobB.SetBinding(module, ParameterBinding.B);
            KnobC.SetBinding(module, ParameterBinding.C);
            KnobD.SetBinding(module, ParameterBinding.D);

            var coll = Extensions.GetLogicalChildCollection<Knob>(this);

            foreach (var knob in coll)
                knob.ValueChanged += ValueChanged;

            foreach (var knob in coll)
            {
                knob.Value = knob.Value;
                ValueChanged(knob, null);
            }
        }
Пример #10
0
 /// <nodoc />
 public NamespaceFunctionDefinition(string name, ModuleBinding functionDefinition)
 {
     Name = name;
     FunctionDefinition = functionDefinition;
 }
Пример #11
0
        private static bool UpgradeScripts(UdonSharpProgramAsset[] programAssets)
        {
            if (programAssets.Length == 0)
            {
                return(false);
            }

            if (programAssets.All(e => e.ScriptVersion >= UdonSharpProgramVersion.CurrentVersion))
            {
                return(false);
            }

            CompilationContext compilationContext = new CompilationContext(new UdonSharpCompileOptions());

            ModuleBinding[] bindings = compilationContext.LoadSyntaxTreesAndCreateModules(CompilationContext.GetAllFilteredSourcePaths(false), UdonSharpUtils.GetProjectDefines(false));

            CSharpCompilation compilation = CSharpCompilation.Create(
                $"UdonSharpRoslynUpgradeAssembly{_assemblyCounter++}",
                bindings.Select(e => e.tree),
                CompilationContext.GetMetadataReferences(),
                new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));

            bool scriptUpgraded  = false;
            bool versionUpgraded = false;

            foreach (var programAsset in programAssets)
            {
                string        assetPath = AssetDatabase.GetAssetPath(programAsset.sourceCsScript);
                ModuleBinding binding   = bindings.FirstOrDefault(e => e.filePath == assetPath);

                if (binding == null)
                {
                    continue;
                }

                if (programAsset.ScriptVersion < UdonSharpProgramVersion.V1SerializationUpdate)
                {
                    SyntaxTree    bindingTree  = binding.tree;
                    SemanticModel bindingModel = compilation.GetSemanticModel(bindingTree);

                    SerializationUpdateSyntaxRewriter rewriter = new SerializationUpdateSyntaxRewriter(bindingModel);

                    SyntaxNode newRoot = rewriter.Visit(bindingTree.GetRoot());

                    if (rewriter.Modified)
                    {
                        try
                        {
                            File.WriteAllText(binding.filePath, newRoot.ToFullString(), Encoding.UTF8);
                            scriptUpgraded = true;

                            UdonSharpUtils.Log($"Upgraded field serialization attributes on U# script '{binding.filePath}'", programAsset.sourceCsScript);
                        }
                        catch (Exception e)
                        {
                            UdonSharpUtils.LogError($"Could not upgrade U# script, exception: {e}");
                        }
                    }
                    // We expect this to come through a second time after scripts have been updated and change the version on the asset.
                    else
                    {
                        programAsset.ScriptVersion = UdonSharpProgramVersion.V1SerializationUpdate;
                        EditorUtility.SetDirty(programAsset);
                        versionUpgraded = true;
                    }
                }
            }

            if (scriptUpgraded)
            {
                AssetDatabase.Refresh();
                return(true);
            }

            if (versionUpgraded)
            {
                UdonSharpCompilerV1.CompileSync(new UdonSharpCompileOptions());
            }

            return(false);
        }
Пример #12
0
		/// <summary>
		/// Perform recursive module initialization.
		/// </summary>
		/// <param name="root"></param>
		static void InitRecursive ( ModuleBinding root, string prefix )
		{
			var children = GetModuleBindings( root.Module );

			foreach ( var child in children ) {
				if (child.InitOrder==InitOrder.Before) {
					InitRecursive( child, prefix + root.NiceName + "/" );
				}
			}

			Log.Message( "---- Init : {0} ----", prefix + root.NiceName );
			root.Module.Initialize();

			disposeList.Add( root );

			foreach ( var child in children ) {
				if (child.InitOrder==InitOrder.After) {
					InitRecursive( child, prefix + root.NiceName + "/" );
				}
			}
		}
Пример #13
0
        public void SetWave(double[] wave, ModuleBinding module, int waveIndex)
        {
            foreach (var voice in Manager.Voices)
            {
                IOscillator osc = null;

                if (module == ModuleBinding.Osc1)
                    osc = voice.Osc1;
                else if (module == ModuleBinding.Osc2)
                    osc = voice.Osc2;
                //else if (module == ModuleBinding.Osc3)
                //	osc = voice.Osc3;
                //else if (module == ModuleBinding.Osc4)
                //	osc = voice.Osc4;

                if (osc == null || !(osc is WavetableOsc))
                    continue;

                WavetableOsc wo = osc as WavetableOsc;
                wo.SetWave(wave, waveIndex);
            }
        }
Пример #14
0
        private static Dictionary <string, MondFunction> BindImpl(Type type)
        {
            ModuleBinding binding;

            lock (Cache)
            {
                if (Cache.TryGetValue(type, out binding))
                {
                    return(binding.Functions);
                }
            }

            var moduleAttrib = type.Attribute <MondModuleAttribute>();

            if (moduleAttrib == null)
            {
                throw new MondBindingException(BindingError.TypeMissingAttribute, "MondModule");
            }

            var moduleName = moduleAttrib.Name ?? type.Name;

            var result = new Dictionary <string, MondFunction>();

            var methods = type.GetMethods(BindingFlags.Public | BindingFlags.Static);

            foreach (var method in MondFunctionBinder.BindStatic(moduleName, methods))
            {
                var name = method.Item1;

                if (result.ContainsKey(name))
                {
                    throw new MondBindingException(BindingError.DuplicateDefinition, name);
                }

                result[name] = method.Item2;
            }

            var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Static);

            foreach (var property in properties.PropertyMethods())
            {
                var name = property.Item1;

                if (result.ContainsKey(name))
                {
                    throw new MondBindingException(BindingError.DuplicateDefinition, name);
                }

                var propertyArray = new[] { property.Item2 };

                var propertyBinding = MondFunctionBinder.BindStatic(moduleName, propertyArray, MondFunctionBinder.MethodType.Property, name)
                                      .FirstOrDefault();

                if (propertyBinding != null)
                {
                    result[name] = propertyBinding.Item2;
                }
            }

            binding = new ModuleBinding(result);

            lock (Cache)
                Cache[type] = binding;

            return(result);
        }
Пример #15
0
        public static void SetBinding(this System.Windows.Controls.Control control, ModuleBinding module, ParameterBinding parameter)
        {
            var map = new Binding();
            map.Module = module;
            map.Parameter = parameter;

            ParameterBindings[control] = map;
        }
Пример #16
0
        public ObjectInfo GetObjectInfo(object context, object obj)
        {
            obj = obj is EvaluationResult evalResult
                ? evalResult.Value
                : obj;

            if (obj == null || IsInvalid(obj))
            {
                return(s_nullObj);
            }

            if (obj.GetType().IsArray)
            {
                return(ArrayObjInfo(((IEnumerable)obj).Cast <object>().ToArray()));
            }

            var customResult = m_customRenderer?.Invoke(this, context, obj);

            if (customResult != null)
            {
                return(customResult);
            }

            return(obj switch
            {
                ScopeLocals scope => new ObjectInfo(LocalsScopeName, null, Lazy.Create(() => GetLocalsForStackEntry(scope.EvalState, scope.FrameIndex))),
                ScopePipGraph scope => PipGraphInfo(scope.Graph).WithPreview(PipGraphScopeName),
                ScopeAllModules scope => ArrayObjInfo(scope.EvaluatedModules.ToArray()).WithPreview(EvaluatedModulesScopeName),
                IModuleAndContext mc => GetObjectInfo(mc.Tree.RootContext, mc.Module),
                ObjectInfo objInf => objInf,
                IPipGraph graph => PipGraphInfo(graph),
                Pip pip => GenericObjectInfo(pip, $"<{pip.PipType}>").Build(),
                PipProvenance prov => ProvenanceInfo(prov),
                EnvironmentVariable envVar => EnvironmentVariableInfo(envVar),
                PipFragment pipFrag => PipFragmentInfo(context, pipFrag),
                Thunk thunk => thunk.Value != null?GetObjectInfo(context, thunk.Value) : new ObjectInfo("<not evaluated>"),
                    FunctionLikeExpression lambda => LambdaInfo(lambda),
                    Closure cls => LambdaInfo(cls.Function),
                    SymbolAtom sym => new ObjectInfo(sym.ToString(StringTable)),
                    StringId id => new ObjectInfo(id.ToString(StringTable)),
                    PipId id => new ObjectInfo($"{id.Value}"),
                    UndefinedLiteral _ => new ObjectInfo("undefined", UndefinedLiteral.Instance),
                    UndefinedValue _ => new ObjectInfo("undefined", UndefinedValue.Instance),
                    AbsolutePath path => new ObjectInfo($"p`{path.ToString(PathTable)}`", path),
                    RelativePath path => new ObjectInfo($"r`{path.ToString(StringTable)}`", path),
                    PathAtom atom => new ObjectInfo($"a`{atom.ToString(StringTable)}`", atom),
                    FileArtifact file => new ObjectInfo($"f`{file.Path.ToString(PathTable)}`", file),
                    DirectoryArtifact dir => new ObjectInfo($"d`{dir.Path.ToString(PathTable)}`", dir),
                    int num => new ObjectInfo($"{num}"),
                    uint num => new ObjectInfo($"{num}"),
                    short num => new ObjectInfo($"{num}", (int)num),
                    long num => new ObjectInfo($"{num}"),
                    char ch => new ObjectInfo($"'{ch}'", ch.ToString()),
                    string str => new ObjectInfo($"\"{str}\"", str),
                    Enum e => new ObjectInfo($"{e.GetType().Name}.{e}", e),
                    NumberLiteral numLit => new ObjectInfo(numLit.UnboxedValue.ToString(), numLit),
                    Func <object> func => FuncObjInfo(func),
                    ArraySegment <object> arrSeg => ArrayObjInfo(arrSeg),
                    IEnumerable enu => new ObjectInfoBuilder().Preview("IEnumerable").Prop("Result", Lazy.Create <object>(() => enu.Cast <object>().ToArray())).Build(),
                    ArrayLiteral arrLit => ArrayObjInfo(arrLit.Values.Select(v => v.Value).ToArray()).WithOriginal(arrLit),
                    ModuleBinding binding => GetObjectInfo(context, binding.Body),
                    ErrorValue error => ErrorValueInfo(),
                    object o => GenericObjectInfo(o).Build(),
                    _ => s_nullObj
            });
Пример #17
0
 /// <summary>
 ///     Factory method that creates instance of the <see cref="NamespaceFunctionDefinition" />.
 /// </summary>
 protected static NamespaceFunctionDefinition Function(string name, ModuleBinding body)
 {
     return(new NamespaceFunctionDefinition(name, body));
 }
Пример #18
0
 /// <summary>
 ///     Factory method that creates instance of the <see cref="NamespaceFunctionDefinition" />.
 /// </summary>
 protected NamespaceFunctionDefinition EnumMember(string name, int value)
 {
     return(new NamespaceFunctionDefinition(name, ModuleBinding.CreateEnum(Symbol(name), value)));
 }