示例#1
0
        private void CompileInlineMethod(IMethod method, InlineMethodInfo info)
        {
            var jsMethod = method.Data as JsGeneratedMethod;

            if (jsMethod != null)
            {
                return;
            }

            var func  = CompileInlineFunction(method, info);
            var klass = CompileClass(method.DeclaringType);

            jsMethod    = new JsGeneratedMethod(method.JsFullName(), func);
            method.Data = jsMethod;

            klass.Add(jsMethod);
        }
示例#2
0
        private static JsFunction CompileInlineFunction(IMethod method, InlineMethodInfo info)
        {
            var parameters = method.JsParams();
            var func       = new JsFunction(null, parameters);

            switch (info.Kind)
            {
            case InlineKind.Property:
                //TODO: support static properties
                var propertyName = info.Name;
                if (method.IsSetter())
                {
                    func.Body.Add("this".Id().Set(propertyName, parameters[0].Id()));
                }
                else
                {
                    func.Body.Add("this".Id().Get(propertyName).Return());
                }
                break;

            case InlineKind.Operator:
                var text = "return ";
                for (int i = 0; i < method.Parameters.Count; i++)
                {
                    if (i > 0)
                    {
                        text += info.Name;
                    }
                    text += parameters[i];
                }
                text += ";";
                func.Body.Add(new JsText(text));
                break;

            default:
                var type = method.DeclaringType;
                //TODO: use ABC, pfx meta attributes
                var typeName = type.Namespace == "Avm" ? type.Name : type.JsFullName(method);
                var target   = method.IsStatic ? typeName.Id() : "this".Id();
                func.Body.Add(target.Get(info.Name).Call(parameters.Select(x => x.Id()).ToArray()).Return());
                break;
            }

            return(func);
        }