Ejemplo n.º 1
0
        private YamlFunctionBinding GetOrCreateFunctionBinding(string name)
        {
            if (FunctionBindings.TryGetValue(name, out YamlFunctionBinding binding))
            {
                return(binding);
            }

            binding = new YamlFunctionBinding( )
            {
                Name = name
            };
            FunctionBindings.Add(binding);
            return(binding);
        }
Ejemplo n.º 2
0
        private void UpdateBindingMarshaling(YamlFunctionBinding fb, IMarshalInfo mi)
        {
            YamlBindingTransform xform;

            switch (mi)
            {
            case ArrayMarshalInfo ami:
                xform = new YamlArrayMarshalInfo( )
                {
                    Name      = ami.ParameterName,
                    Semantics = ami.Semantics,
                    SubType   = ami.ElementMarshalType,
                    SizeParam = ami.SizeParam,
                };
                break;

            case PrimitiveTypeMarshalInfo ptmi:
                xform = new YamlPrimitiveMarshalInfo( )
                {
                    Name      = ptmi.ParameterName,
                    Kind      = ptmi.PrimitiveType,
                    Semantics = ptmi.Semantics,
                };
                break;

            case StringMarshalInfo smi:
                xform = new YamlStringMarshalInfo( )
                {
                    Name      = smi.ParameterName,
                    Kind      = smi.DisposalKind,
                    Semantics = smi.Semantics,
                };
                break;

            default:
                throw new ArgumentException("Unknown marshal info");
            }

            if (mi.Semantics == ParamSemantics.Return)
            {
                fb.ReturnTransform = xform;
            }
            else
            {
                fb.ParamTransforms.Add(xform);
            }
        }