Exemple #1
0
        /// <summary>
        /// Adds a native function. The function must be a MethodInfo of a real method of the native type.
        /// </summary>
        /// <param name="delimiter"></param>
        /// <param name="name"></param>
        /// <param name="methodInfo"></param>
        /// <returns></returns>
        public IMemberFunction AddNativeFunction(IdDelimiter delimiter, string name, MethodInfo methodInfo)
        {
            var func = NativeMemberFunctionExtensions.CreateByMethodInfo(typeof(TType), methodInfo);

            addMemberFunction(this, func.GetType(), delimiter, name, func);
            return(func);
        }
Exemple #2
0
        /// <summary>
        /// Add a lambda function as foreign member function to a type.
        /// </summary>
        /// <typeparam name="T1"></typeparam>
        /// <typeparam name="T2"></typeparam>
        /// <typeparam name="T3"></typeparam>
        /// <typeparam name="T4"></typeparam>
        /// <typeparam name="T5"></typeparam>
        /// <typeparam name="T6"></typeparam>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="delimiter"></param>
        /// <param name="name"></param>
        /// <param name="func"></param>
        /// <returns></returns>
        public IMemberFunction AddForeignFunction <T1, T2, T3, T4, T5, T6, TResult>(IdDelimiter delimiter, string name, Func <TType, T1, T2, T3, T4, T5, T6, TResult> func)
        {
            var method = new ForeignMemberFunction <TType, T1, T2, T3, T4, T5, T6, TResult>(func);

            AddMemberFunction(delimiter, name, method);
            return(method);
        }
Exemple #3
0
 /// <summary>
 /// Creates a property using a lambda.
 /// </summary>
 /// <param name="delimiter"></param>
 /// <param name="name"></param>
 /// <param name="returnType"></param>
 /// <param name="getter"></param>
 public ForeignProperty(IdDelimiter delimiter, string name, Type returnType, Func <object, object> getter)
 {
     this.Delimiter  = delimiter;
     this.Name       = name;
     this.ReturnType = returnType;
     this.getter     = getter;
 }
Exemple #4
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="location"></param>
 /// <param name="this"></param>
 /// <param name="delimiter"></param>
 /// <param name="memberName"></param>
 public MemberExpression(IParserLocation location, IExpression @this, IdDelimiter delimiter, string memberName)
 {
     Location       = location;
     SemanticType   = null;
     ThisExpression = @this;
     MemberName     = memberName;
     Delimiter      = delimiter;
 }
Exemple #5
0
        /// <summary>
        /// Get a property by its name and delimiter.
        /// </summary>
        /// <param name="delimiter"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public IProperty GetByName(IdDelimiter delimiter, string name)
        {
            var key = CreateKey(delimiter, name);

            if (symbols.TryGetValue(key, out IProperty symbol))
            {
                return(symbol);
            }

            return(null);
        }
Exemple #6
0
        private void AddMemberFunction <TMemberFunction>(IdDelimiter delimiter, string name, TMemberFunction method)
            where TMemberFunction : IMemberFunction
        {
            var key = CreateKey(delimiter, name);

            if (!symbols.ContainsKey(key))
            {
                AddForeignProperty(delimiter, name, @this => method.BindThis(@this));
                return;
            }
            throw new InvalidOperationException("Duplicate symbol!");;
        }
Exemple #7
0
        /// <summary>
        /// Adds a lambda function to create a foreign property.
        /// </summary>
        /// <typeparam name="TProperty"></typeparam>
        /// <param name="delimiter"></param>
        /// <param name="name"></param>
        /// <param name="getter"></param>
        /// <returns></returns>
        public IProperty AddForeignProperty <TProperty>(IdDelimiter delimiter, string name, Func <TType, TProperty> getter)
        {
            var key = CreateKey(delimiter, name);

            if (symbols.ContainsKey(key))
            {
                throw new InvalidOperationException("Already assigned!");
            }
            IProperty result;

            symbols[key] = result = new ForeignProperty(delimiter, name, typeof(TProperty), (t) => getter((TType)t));
            return(result);
        }
Exemple #8
0
        /// <summary>
        /// Adds a native MethodInfo which is a real method of the native type.
        /// </summary>
        /// <param name="delimiter"></param>
        /// <param name="name"></param>
        /// <param name="propertyInfo"></param>
        /// <returns></returns>
        public IProperty AddNativeProperty(IdDelimiter delimiter, string name, PropertyInfo propertyInfo)
        {
            var key = CreateKey(delimiter, name);

            if (symbols.ContainsKey(key))
            {
                throw new InvalidOperationException("Already assigned!");
            }
            IProperty result;

            symbols[key] = result = new NativeProperty(name, propertyInfo);
            return(result);
        }
Exemple #9
0
 /// <summary>
 /// Creates the attribute
 /// </summary>
 /// <param name="name"></param>
 /// <param name="delimiter"></param>
 public CQLNativeMemberFunctionAttribute(string name, IdDelimiter delimiter)
 {
     Name      = name;
     Delimiter = delimiter;
 }
Exemple #10
0
 /// <summary>
 /// creates the attribute
 /// </summary>
 /// <param name="name"></param>
 /// <param name="delimiter"></param>
 public CQLNativeMemberPropertyAttribute(string name, IdDelimiter delimiter)
 {
     Name      = name;
     Delimiter = delimiter;
 }
Exemple #11
0
 private Tuple <IdDelimiter, string> CreateKey(IdDelimiter delimiter, string name)
 {
     return(new Tuple <IdDelimiter, string>(delimiter, Normalize(name)));
 }