Ejemplo n.º 1
0
        void visit_object_type_symbol(ObjectTypeSymbol sym)
        {
            if (get_dbus_name(sym) == null)
            {
                return;
            }

            declare_interface_info(sym);
        }
Ejemplo n.º 2
0
        CCodeExpression get_property_info(ObjectTypeSymbol sym)
        {
            var infos = new CCodeInitializerList();

            CCodeDeclaration cdecl;

            foreach (Property prop in sym.get_properties())
            {
                if (prop.binding != MemberBinding.INSTANCE ||
                    prop.overrides || prop.access != SymbolAccessibility.PUBLIC)
                {
                    continue;
                }
                if (!is_dbus_visible(prop))
                {
                    continue;
                }

                var info = new CCodeInitializerList();
                info.append(new CCodeConstant("-1"));
                info.append(new CCodeConstant("\"%s\"".printf(get_dbus_name_for_member(prop))));
                info.append(new CCodeConstant("\"%s\"".printf(get_type_signature(prop.property_type, prop))));
                if (prop.get_accessor != null && prop.set_accessor != null)
                {
                    info.append(new CCodeConstant("G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE"));
                }
                else if (prop.get_accessor != null)
                {
                    info.append(new CCodeConstant("G_DBUS_PROPERTY_INFO_FLAGS_READABLE"));
                }
                else if (prop.set_accessor != null)
                {
                    info.append(new CCodeConstant("G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE"));
                }
                else
                {
                    info.append(new CCodeConstant("G_DBUS_PROPERTY_INFO_FLAGS_NONE"));
                }

                cdecl = new CCodeDeclaration("const GDBusPropertyInfo");
                cdecl.add_declarator(new CCodeVariableDeclarator("_" + get_ccode_lower_case_prefix(sym) + "dbus_property_info_" + prop.name, info));
                cdecl.modifiers = CCodeModifiers.STATIC;
                cfile.add_constant_declaration(cdecl);

                infos.append(new CCodeUnaryExpression(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier("_" + get_ccode_lower_case_prefix(sym) + "dbus_property_info_" + prop.name)));
            }

            infos.append(new CCodeConstant("NULL"));

            cdecl = new CCodeDeclaration("const GDBusPropertyInfo * const");
            cdecl.add_declarator(new CCodeVariableDeclarator("_" + get_ccode_lower_case_prefix(sym) + "dbus_property_info[]", infos));
            cdecl.modifiers = CCodeModifiers.STATIC;
            cfile.add_constant_declaration(cdecl);

            return(new CCodeIdentifier("_" + get_ccode_lower_case_prefix(sym) + "dbus_property_info"));
        }
 public ClassDeclaration(
     CodeFile file,
     TextSpan span,
     ObjectTypeSymbol symbol,
     TextSpan nameSpan,
     ConstructorSymbol?defaultConstructorSymbol,
     Func <IClassDeclaration, FixedList <IMemberDeclaration> > buildMembers)
     : base(file, span, symbol, nameSpan)
 {
     Symbol = symbol;
     DefaultConstructorSymbol = defaultConstructorSymbol;
     Members = buildMembers(this);
 }
Ejemplo n.º 4
0
        void declare_interface_info(ObjectTypeSymbol sym)
        {
            var info = new CCodeInitializerList();

            info.append(new CCodeConstant("-1"));
            info.append(new CCodeConstant("\"%s\"".printf(get_dbus_name(sym))));
            info.append(new CCodeCastExpression(new CCodeUnaryExpression(CCodeUnaryOperator.ADDRESS_OF, get_method_info(sym)), "GDBusMethodInfo **"));
            info.append(new CCodeCastExpression(new CCodeUnaryExpression(CCodeUnaryOperator.ADDRESS_OF, get_signal_info(sym)), "GDBusSignalInfo **"));
            info.append(new CCodeCastExpression(new CCodeUnaryExpression(CCodeUnaryOperator.ADDRESS_OF, get_property_info(sym)), "GDBusPropertyInfo **"));

            var cdecl = new CCodeDeclaration("const GDBusInterfaceInfo");

            cdecl.add_declarator(new CCodeVariableDeclarator("_" + get_ccode_lower_case_prefix(sym) + "dbus_interface_info", info));
            cdecl.modifiers = CCodeModifiers.STATIC;
            cfile.add_constant_declaration(cdecl);
        }
Ejemplo n.º 5
0
 protected CCodeExpression get_interface_info(ObjectTypeSymbol sym)
 {
     return(new CCodeIdentifier("_" + get_ccode_lower_case_prefix(sym) + "dbus_interface_info"));
 }
Ejemplo n.º 6
0
        CCodeExpression get_signal_info(ObjectTypeSymbol sym)
        {
            var infos = new CCodeInitializerList();

            CCodeDeclaration cdecl;

            foreach (Signal sig in sym.get_signals())
            {
                if (sig.access != SymbolAccessibility.PUBLIC)
                {
                    continue;
                }
                if (!is_dbus_visible(sig))
                {
                    continue;
                }

                var args_info = new CCodeInitializerList();

                CCodeInitializerList info;
                foreach (Parameter param in sig.get_parameters())
                {
                    info = new CCodeInitializerList();
                    info.append(new CCodeConstant("-1"));
                    info.append(new CCodeConstant("\"%s\"".printf(param.name)));
                    info.append(new CCodeConstant("\"%s\"".printf(get_type_signature(param.variable_type, param))));

                    cdecl = new CCodeDeclaration("const GDBusArgInfo");
                    cdecl.add_declarator(new CCodeVariableDeclarator("_" + get_ccode_lower_case_prefix(sym) + "dbus_arg_info_" + get_ccode_lower_case_name(sig) + "_" + param.name, info));
                    cdecl.modifiers = CCodeModifiers.STATIC;
                    cfile.add_constant_declaration(cdecl);

                    args_info.append(new CCodeUnaryExpression(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier("_" + get_ccode_lower_case_prefix(sym) + "dbus_arg_info_" + get_ccode_lower_case_name(sig) + "_" + param.name)));
                }

                args_info.append(new CCodeConstant("NULL"));

                cdecl = new CCodeDeclaration("const GDBusArgInfo * const");
                cdecl.add_declarator(new CCodeVariableDeclarator("_" + get_ccode_lower_case_prefix(sym) + "dbus_arg_info_" + get_ccode_lower_case_name(sig) + "[]", args_info));
                cdecl.modifiers = CCodeModifiers.STATIC;
                cfile.add_constant_declaration(cdecl);

                info = new CCodeInitializerList();
                info.append(new CCodeConstant("-1"));
                info.append(new CCodeConstant("\"%s\"".printf(get_dbus_name_for_member(sig))));
                info.append(new CCodeCastExpression(new CCodeUnaryExpression(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier("_" + get_ccode_lower_case_prefix(sym) + "dbus_arg_info_" + get_ccode_lower_case_name(sig))), "GDBusArgInfo **"));

                cdecl = new CCodeDeclaration("const GDBusSignalInfo");
                cdecl.add_declarator(new CCodeVariableDeclarator("_" + get_ccode_lower_case_prefix(sym) + "dbus_signal_info_" + get_ccode_lower_case_name(sig), info));
                cdecl.modifiers = CCodeModifiers.STATIC;
                cfile.add_constant_declaration(cdecl);

                infos.append(new CCodeUnaryExpression(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier("_" + get_ccode_lower_case_prefix(sym) + "dbus_signal_info_" + get_ccode_lower_case_name(sig))));
            }

            infos.append(new CCodeConstant("NULL"));

            cdecl = new CCodeDeclaration("const GDBusSignalInfo * const");
            cdecl.add_declarator(new CCodeVariableDeclarator("_" + get_ccode_lower_case_prefix(sym) + "dbus_signal_info[]", infos));
            cdecl.modifiers = CCodeModifiers.STATIC;
            cfile.add_constant_declaration(cdecl);

            return(new CCodeIdentifier("_" + get_ccode_lower_case_prefix(sym) + "dbus_signal_info"));
        }
Ejemplo n.º 7
0
        CCodeExpression get_method_info(ObjectTypeSymbol sym)
        {
            var infos = new CCodeInitializerList();

            CCodeDeclaration cdecl;

            foreach (Method m in sym.get_methods())
            {
                if (m is CreationMethod || m.binding != MemberBinding.INSTANCE ||
                    m.overrides || m.access != SymbolAccessibility.PUBLIC)
                {
                    continue;
                }
                if (!is_dbus_visible(m))
                {
                    continue;
                }

                var in_args_info  = new CCodeInitializerList();
                var out_args_info = new CCodeInitializerList();

                CCodeInitializerList info;
                foreach (Parameter param in m.get_parameters())
                {
                    if (param.variable_type is ObjectType && param.variable_type.data_type.get_full_name() == "GLib.Cancellable")
                    {
                        continue;
                    }
                    if (param.variable_type is ObjectType && param.variable_type.data_type.get_full_name() == "GLib.BusName")
                    {
                        continue;
                    }

                    info = new CCodeInitializerList();
                    info.append(new CCodeConstant("-1"));
                    info.append(new CCodeConstant("\"%s\"".printf(param.name)));
                    info.append(new CCodeConstant("\"%s\"".printf(get_type_signature(param.variable_type, param))));

                    cdecl = new CCodeDeclaration("const GDBusArgInfo");
                    cdecl.add_declarator(new CCodeVariableDeclarator("_" + get_ccode_lower_case_prefix(sym) + "dbus_arg_info_" + m.name + "_" + param.name, info));
                    cdecl.modifiers = CCodeModifiers.STATIC;
                    cfile.add_constant_declaration(cdecl);

                    if (param.direction == ParameterDirection.IN)
                    {
                        in_args_info.append(new CCodeUnaryExpression(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier("_" + get_ccode_lower_case_prefix(sym) + "dbus_arg_info_" + m.name + "_" + param.name)));
                    }
                    else
                    {
                        out_args_info.append(new CCodeUnaryExpression(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier("_" + get_ccode_lower_case_prefix(sym) + "dbus_arg_info_" + m.name + "_" + param.name)));
                    }
                }

                if (!(m.return_type is VoidType))
                {
                    info = new CCodeInitializerList();
                    info.append(new CCodeConstant("-1"));
                    info.append(new CCodeConstant("\"%s\"".printf(dbus_result_name(m))));
                    info.append(new CCodeConstant("\"%s\"".printf(get_type_signature(m.return_type, m))));

                    cdecl = new CCodeDeclaration("const GDBusArgInfo");
                    cdecl.add_declarator(new CCodeVariableDeclarator("_" + get_ccode_lower_case_prefix(sym) + "dbus_arg_info_" + m.name + "_result", info));
                    cdecl.modifiers = CCodeModifiers.STATIC;
                    cfile.add_constant_declaration(cdecl);

                    out_args_info.append(new CCodeUnaryExpression(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier("_" + get_ccode_lower_case_prefix(sym) + "dbus_arg_info_" + m.name + "_result")));
                }

                in_args_info.append(new CCodeConstant("NULL"));
                out_args_info.append(new CCodeConstant("NULL"));

                cdecl = new CCodeDeclaration("const GDBusArgInfo * const");
                cdecl.add_declarator(new CCodeVariableDeclarator("_" + get_ccode_lower_case_prefix(sym) + "dbus_arg_info_" + m.name + "_in[]", in_args_info));
                cdecl.modifiers = CCodeModifiers.STATIC;
                cfile.add_constant_declaration(cdecl);

                cdecl = new CCodeDeclaration("const GDBusArgInfo * const");
                cdecl.add_declarator(new CCodeVariableDeclarator("_" + get_ccode_lower_case_prefix(sym) + "dbus_arg_info_" + m.name + "_out[]", out_args_info));
                cdecl.modifiers = CCodeModifiers.STATIC;
                cfile.add_constant_declaration(cdecl);

                info = new CCodeInitializerList();
                info.append(new CCodeConstant("-1"));
                info.append(new CCodeConstant("\"%s\"".printf(get_dbus_name_for_member(m))));
                info.append(new CCodeCastExpression(new CCodeUnaryExpression(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier("_" + get_ccode_lower_case_prefix(sym) + "dbus_arg_info_" + m.name + "_in")), "GDBusArgInfo **"));
                info.append(new CCodeCastExpression(new CCodeUnaryExpression(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier("_" + get_ccode_lower_case_prefix(sym) + "dbus_arg_info_" + m.name + "_out")), "GDBusArgInfo **"));

                cdecl = new CCodeDeclaration("const GDBusMethodInfo");
                cdecl.add_declarator(new CCodeVariableDeclarator("_" + get_ccode_lower_case_prefix(sym) + "dbus_method_info_" + m.name, info));
                cdecl.modifiers = CCodeModifiers.STATIC;
                cfile.add_constant_declaration(cdecl);

                infos.append(new CCodeUnaryExpression(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier("_" + get_ccode_lower_case_prefix(sym) + "dbus_method_info_" + m.name)));
            }

            infos.append(new CCodeConstant("NULL"));

            cdecl = new CCodeDeclaration("const GDBusMethodInfo * const");
            cdecl.add_declarator(new CCodeVariableDeclarator("_" + get_ccode_lower_case_prefix(sym) + "dbus_method_info[]", infos));
            cdecl.modifiers = CCodeModifiers.STATIC;
            cfile.add_constant_declaration(cdecl);

            return(new CCodeIdentifier("_" + get_ccode_lower_case_prefix(sym) + "dbus_method_info"));
        }
 public ClassIL(ObjectTypeSymbol symbol, FixedList <DeclarationIL> members)
     : base(false, symbol)
 {
     Symbol  = symbol;
     Members = members;
 }
Ejemplo n.º 9
0
 public ObjectType(ObjectTypeSymbol type_symbol)
 {
     this.type_symbol = type_symbol;
     data_type        = type_symbol;
 }