//public static TheClass Get(CsEntity pEntity) {
        //    CsEntityClass typeRef = pEntity as CsEntityClass;
        //    if (typeRef != null) {
        //        CsClass theClass = typeRef.nodes.First.Value as CsClass;
        //        if (theClass == null) {
        //            return get(typeRef);
        //        }

        //        if (!_classes.ContainsKey(theClass))
        //            _classes[theClass] = new TheClass(theClass);

        //        return _classes[theClass];
        //    }

        //    CsEntityInterface entityInterface = pEntity as CsEntityInterface;


        //}

        public static TheClass Get(CsEntityTypeRef pEntityTyperef, FactoryExpressionCreator pCreator)
        {
            if (pEntityTyperef == null)
            {
                return(null);
            }

            if (
                pEntityTyperef.u is CsEntityGenericParam ||
                pEntityTyperef.u is CsEntityArraySpecifier
                )
            {
                return(null);
            }

            CsEntityInstanceSpecifier entityInstanceSpecifier = pEntityTyperef.u as CsEntityInstanceSpecifier;

            CsEntity entityClass = entityInstanceSpecifier == null
                                                                                        ? (CsEntity)pEntityTyperef.u
                                                                                        : (CsEntity)entityInstanceSpecifier.type.u;

            return(Get(entityClass, pCreator));
            //return Get(entityClass.nodes.First.Value);
        }
Exemple #2
0
        public static string GetType(CsEntityTypeRef pDirective)
        {
            if (pDirective == null)
            {
                return(null);
            }

            if (_entityTypeRef.ContainsKey(pDirective.type))
            {
                return(_entityTypeRef[pDirective.type]);
            }

            switch (pDirective.type)
            {
            case cs_entity_type.et_valuetype:
                return(null);

            case cs_entity_type.et_array:
                return(GetType(((CsEntityArraySpecifier)pDirective.u).type) + "[]");

            case cs_entity_type.et_enum:
                return(((CsEntityEnum)pDirective.u).name);

            case cs_entity_type.et_generic_param:
                CsEntityGenericParam egp = pDirective.u as CsEntityGenericParam;
                //TODO: check generics parameters
                return("<" + egp.name + ">");

            case cs_entity_type.et_genericinst:
                CsEntityInstanceSpecifier eis = pDirective.u as CsEntityInstanceSpecifier;
                if (eis != null)
                {
                    string ret = GetType(eis.type);

                    if (eis.arguments != null)
                    {
                        List <string> val = new List <string> {
                            "<"
                        };

                        foreach (CsEntityTypeRef argument in eis.arguments)
                        {
                            val.Add(GetType(argument));
                            val.Add(", ");
                        }
                        val.RemoveAt(val.Count - 1);
                        val.Add(">");
                        ret += string.Join("", val.ToArray());
                    }

                    return(ret);
                }

                throw new Exception();

            case cs_entity_type.et_class:
                CsEntityInterface itf = pDirective.u as CsEntityInterface;
                if (itf != null)
                {
                    if (itf.interfaces != null && itf.interfaces.Count > 0)
                    {
                        List <string> val = new List <string>(itf.interfaces.Count);
                        foreach (CsEntityTypeRef typeRef in itf.interfaces)
                        {
                            val.Add(GetType(typeRef));
                        }

                        return(string.Join(", ", val.ToArray()));
                    }

                    if (!string.IsNullOrEmpty(itf.name))
                    {
                        return(itf.name);
                    }
                }

                CsEntityClass cls = pDirective.u as CsEntityClass;
                if (cls != null)
                {
                    //if (cls.indexers != null) {
                    //    foreach (CsEntityProperty indexer in cls.indexers) {
                    //        return GetType(indexer.type);
                    //    }
                    //}

                    return(cls.name);
                }

                CsEntityDelegate entityDelegate = pDirective.u as CsEntityDelegate;
                if (entityDelegate != null)
                {
                    return("function");
                }

                return("IHaveNOIdeaWhatShouldBeHere");
            }

            throw new Exception("Unknown EntityTypeRef: " + pDirective.type);
        }
		//public static TheClass Get(CsEntity pEntity) {
		//    CsEntityClass typeRef = pEntity as CsEntityClass;
		//    if (typeRef != null) {
		//        CsClass theClass = typeRef.nodes.First.Value as CsClass;
		//        if (theClass == null) {
		//            return get(typeRef);
		//        }

		//        if (!_classes.ContainsKey(theClass))
		//            _classes[theClass] = new TheClass(theClass);

		//        return _classes[theClass];
		//    }

		//    CsEntityInterface entityInterface = pEntity as CsEntityInterface;


		//}

		public static TheClass Get(CsEntityTypeRef pEntityTyperef, FactoryExpressionCreator pCreator) {
			if (pEntityTyperef == null)
				return null;

			if (
				pEntityTyperef.u is CsEntityGenericParam ||
				pEntityTyperef.u is CsEntityArraySpecifier
			) return null;

			CsEntityInstanceSpecifier entityInstanceSpecifier = pEntityTyperef.u as CsEntityInstanceSpecifier;

			CsEntity entityClass = entityInstanceSpecifier == null
											? (CsEntity)pEntityTyperef.u
											: (CsEntity)entityInstanceSpecifier.type.u;

			return Get(entityClass, pCreator);
			//return Get(entityClass.nodes.First.Value);
		}
Exemple #4
0
		public static string GetType(CsEntityTypeRef pDirective) {
			if (pDirective == null) {
				return null;
			}

			if (_entityTypeRef.ContainsKey(pDirective.type)) {
				return _entityTypeRef[pDirective.type];
			}

			switch (pDirective.type) {
				case cs_entity_type.et_valuetype:
					return null;

				case cs_entity_type.et_array:
					return GetType(((CsEntityArraySpecifier)pDirective.u).type) + "[]";

				case cs_entity_type.et_enum:
					return ((CsEntityEnum)pDirective.u).name;

				case cs_entity_type.et_generic_param:
					CsEntityGenericParam egp = pDirective.u as CsEntityGenericParam;
					//TODO: check generics parameters
					return "<"+egp.name+">";

				case cs_entity_type.et_genericinst:
					CsEntityInstanceSpecifier eis = pDirective.u as CsEntityInstanceSpecifier;
					if (eis != null) {
						string ret = GetType(eis.type);

						if (eis.arguments != null) {
							List<string> val = new List<string> {"<"};

							foreach (CsEntityTypeRef argument in eis.arguments) {
								val.Add(GetType(argument));
								val.Add(", ");
							}
							val.RemoveAt(val.Count - 1);
							val.Add(">");
							ret += string.Join("", val.ToArray());
						}

						return ret;
					}

					throw new Exception();

				case cs_entity_type.et_class:
					CsEntityInterface itf = pDirective.u as CsEntityInterface;
					if (itf != null) {
						if (itf.interfaces != null && itf.interfaces.Count > 0) {
							List<string> val = new List<string>(itf.interfaces.Count);
							foreach (CsEntityTypeRef typeRef in itf.interfaces) {
								val.Add(GetType(typeRef));
							}

							return string.Join(", ", val.ToArray());
						}

						if (!string.IsNullOrEmpty(itf.name)) {
							return itf.name;
						}
					}

					CsEntityClass cls = pDirective.u as CsEntityClass;
					if (cls != null) {
						//if (cls.indexers != null) {
						//    foreach (CsEntityProperty indexer in cls.indexers) {
						//        return GetType(indexer.type);
						//    }
						//}

						return cls.name;
					}

					CsEntityDelegate entityDelegate = pDirective.u as CsEntityDelegate;
					if (entityDelegate != null) {
						return "function";
					}

					return "IHaveNOIdeaWhatShouldBeHere";
			}

			throw new Exception("Unknown EntityTypeRef: " + pDirective.type);
		}
Exemple #5
0
		public Expression(string pValue, CsEntityTypeRef pType, bool pIsInternal) {
			Value = pValue;
			Type = pType;
			InternalType = pIsInternal;
		}
Exemple #6
0
		public Expression(string pValue, CsEntityTypeRef pType) {
			Value = pValue;
			Type = pType;
		}