Esempio n. 1
0
        void SelectCode(JToken token)
        {
            JProperty JpToken = token.ToObject <JProperty>();

            if (JpToken.Name == "Field")
            {
                foreach (var internalField in JpToken.Children().Children())
                {
                    CustomType type = TypeStack.Peek();
                    TypeStack.Push(GetField(internalField, type));
                    foreach (var nextToken in internalField)
                    {
                        SelectCode(nextToken);
                    }
                    TypeStack.Pop();
                }
            }
            else if (JpToken.Name == "Property")
            {
                foreach (var internalProperty in JpToken.Children().Children())
                {
                    CustomType type = TypeStack.Peek();
                    TypeStack.Push(GetProperty(internalProperty, type));
                    foreach (var nextToken in internalProperty)
                    {
                        SelectCode(nextToken);
                    }
                    TypeStack.Pop();
                }
            }
            else if (JpToken.Name == "Value" || JpToken.Name == "Constructor")
            {
                var    customType = TypeStack.Pop();
                var    type       = customType.Value.GetType();
                object value      = null;
                if (JpToken.Name == "Value")
                {
                    value = Convert.ChangeType(JpToken.Value, type);
                }
                else
                {
                    var             list        = GetParsing(JpToken);
                    ConstructorInfo constructor = type.GetConstructor(list.Select((data) => data.type).ToArray());
                    value = constructor?.Invoke(list.Select((data) => data.value).ToArray());
                }

                customType.SetValue(TypeStack.Peek().Value, value);
                TypeStack.Push(customType);
            }
            else if (JpToken.Name == "CallFunc")
            {
                var        q          = JpToken.Value["Param"];
                var        customType = TypeStack.Peek();
                var        list       = GetParsing(q);
                var        type       = list.Select((data) => data.type).ToArray();
                var        value      = list.Select((data) => data.value).ToArray();
                MethodInfo t          = customType.Type.GetMethod(JpToken.Value["Name"].ToString());
                t?.Invoke(customType.Value, value.Length == 0 ? null : value);
            }
            else if (JpToken.Name == "EventHandler")
            {
                var customType = TypeStack.Pop();

                EventInfo  info   = customType.Type.GetEvent(JpToken.Value["Name"].ToString());
                MethodInfo minfo  = TypeStack.Peek().Type.GetMethod(JpToken.Value["Method"].ToString());
                Delegate   method = Delegate.CreateDelegate(info.EventHandlerType, TypeStack.Peek().Value, minfo);
                info.AddEventHandler(customType.Value, method);
                TypeStack.Push(customType);
            }
        }
Esempio n. 2
0
 public CustomType Add(CustomType Item)
 {
     List.Add(Item);
     return(Item);
 }
Esempio n. 3
0
 public CustomType GetFunction(JToken token, CustomType type)
 {
     return(new CustomType(null));
 }