         return result;
     }
     
+    public static var callCounter:int;
+    
     public static function typeInfoForProperty(object:*, className:String, propName:String):XObjTypeInfo
     {
         var isArray:Boolean = false;

            return new XObjTypeInfo();
        }
        
        var propertyCacheKey:String = className + "." + propName;
        var arrayElementType:String;
        
        typeInfo = typePropertyCache[propertyCacheKey];
        
        if (typeInfo == null || (propName in object))
        {
            typeInfo = new XObjTypeInfo();
            
            // go look it up (expensive)

                        }
                        else
                        {
                            // must be dynamic property or simply an error (no such property)
                            typeInfo.typeName = XObjUtils.getClassName(val);
                            // don't cache if dynamic
                            if (isDynamic)
                                shouldCache = false;
                        }
                    }
                    else
                    {
                        // bad request. no such property
                    }
                }
                else
                {
                    arrayElementType = typeDescInfo..variable.(@name == propName).metadata.(@name == 'ArrayElementType').arg.@value.toString().replace( /::/, "." );
