コード例 #1
0
        private void FillProperty(JsObject def, string funcName, bool isSetter)
        {
            var member   = def[funcName];
            var func     = member.As <JsFunction>();
            var propName = funcName.Substring(4);
            var prop     = _PropertiesByName[propName].As <JsImplPropertyInfo>();

            if (prop == null)
            {
                prop = new JsImplPropertyInfo();
                _PropertiesByName[propName] = prop;
                _Properties.push(prop);
                prop._Name          = propName;
                prop._DeclaringType = this;
                prop._IsStatic      = _JsType.staticDefinition != null && _JsType.staticDefinition[funcName] != null;
                var propTypeName = JsTypeHelper.getMemberTypeName(def, propName);
                if (propTypeName != null)
                {
                    prop._PropertyType = GetType(propTypeName).As <JsImplType>();
                }
                else
                {
                    //TODO: Fix this! Nullable<float> doenst work
                }
            }
            if (isSetter)
            {
                prop._Setter = func;
            }
            else
            {
                prop._Getter = func;
            }
        }
コード例 #2
0
        public static Type GetType(string name, bool throwOnError)
        {
            if (JsTypeHelper._HasTypeArguments(name))
            {
                var jsTypeAndArgs = JsTypeHelper._GetTypeWithArguments(name, throwOnError);
                if (jsTypeAndArgs == null)
                {
                    return(null);
                }
                var genericType = JsCompilerGlobal._TypeOf(jsTypeAndArgs[0].As <JsType>());
                var jsTypeArgs  = jsTypeAndArgs[1].As <JsExtendedArray>();
                for (var i = 0; i < jsTypeArgs.length; i++)
                {
                    jsTypeArgs[i] = JsCompilerGlobal._TypeOf(jsTypeArgs[i].As <JsType>());
                }
                var type = genericType.As <JsImplType>()._MakeGenericType(jsTypeArgs);
                return(type);
            }
            var jsType = JsTypeHelper.GetType(name);

            if (jsType == null)
            {
                if (throwOnError)
                {
                    throw new Exception("Type " + name + " was not found");
                }
                return(null);
            }
            return(JsCompilerGlobal._TypeOf(jsType));
        }
コード例 #3
0
 internal void VerifyCustomAttributesOnTypeAndMembers()
 {
     if (verifiedCustomAttributesOnTypeAndMembers)
     {
         return;
     }
     verifiedCustomAttributesOnTypeAndMembers = true;
     if (_JsType.customAttributes == null)
     {
         return;
     }
     for (var i = 0; i < _JsType.customAttributes.length; i++)
     {
         var attDef  = _JsType.customAttributes[i].As <JsAttribute>();
         var attType = JsTypeHelper.GetType(attDef.typeName);
         var jsCtor  = attType.As <JsObject>()[attDef.ctorName].As <JsFunction>();
         var att     = Js.ApplyNew(jsCtor, attDef.positionalArguments);
         if (attDef.namedArguments != null)
         {
             foreach (string propName in attDef.namedArguments)
             {
                 var value = attDef.namedArguments[propName];
                 if (Js.Typeof(value) == "function")
                 {
                     value = value.As <JsFunction>().call(null);
                 }
                 att.As <JsObject>()["set_" + propName].As <JsFunction>().call(att, value);
             }
         }
         var target = GetAttributeTarget(attDef.targetType, attDef.targetMemberName);
         if (target._CustomAttributes == null)
         {
             target._CustomAttributes = new JsExtendedArray();
         }
         target._CustomAttributes.push(att);
     }
 }