~ubuntu-branches/ubuntu/vivid/vala/vivid

« back to all changes in this revision

Viewing changes to vala/valaassignment.c

  • Committer: Bazaar Package Importer
  • Author(s): Sebastian Dröge
  • Date: 2010-07-28 07:58:01 UTC
  • mfrom: (1.5.5 upstream) (7.3.14 experimental)
  • Revision ID: james.westby@ubuntu.com-20100728075801-18u9cg5hv5oety6m
Tags: 0.9.4-1
New upstream development release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
91
91
typedef struct _ValaSymbol ValaSymbol;
92
92
typedef struct _ValaSymbolClass ValaSymbolClass;
93
93
 
 
94
#define VALA_TYPE_VARIABLE (vala_variable_get_type ())
 
95
#define VALA_VARIABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_VARIABLE, ValaVariable))
 
96
#define VALA_VARIABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_VARIABLE, ValaVariableClass))
 
97
#define VALA_IS_VARIABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_VARIABLE))
 
98
#define VALA_IS_VARIABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_VARIABLE))
 
99
#define VALA_VARIABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_VARIABLE, ValaVariableClass))
 
100
 
 
101
typedef struct _ValaVariable ValaVariable;
 
102
typedef struct _ValaVariableClass ValaVariableClass;
 
103
 
94
104
#define VALA_TYPE_LOCAL_VARIABLE (vala_local_variable_get_type ())
95
105
#define VALA_LOCAL_VARIABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_LOCAL_VARIABLE, ValaLocalVariable))
96
106
#define VALA_LOCAL_VARIABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_LOCAL_VARIABLE, ValaLocalVariableClass))
266
276
typedef struct _ValaEnum ValaEnum;
267
277
typedef struct _ValaEnumClass ValaEnumClass;
268
278
 
 
279
#define VALA_TYPE_CONSTANT (vala_constant_get_type ())
 
280
#define VALA_CONSTANT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CONSTANT, ValaConstant))
 
281
#define VALA_CONSTANT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CONSTANT, ValaConstantClass))
 
282
#define VALA_IS_CONSTANT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CONSTANT))
 
283
#define VALA_IS_CONSTANT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CONSTANT))
 
284
#define VALA_CONSTANT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CONSTANT, ValaConstantClass))
 
285
 
 
286
typedef struct _ValaConstant ValaConstant;
 
287
typedef struct _ValaConstantClass ValaConstantClass;
 
288
 
269
289
#define VALA_TYPE_ENUM_VALUE (vala_enum_value_get_type ())
270
290
#define VALA_ENUM_VALUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ENUM_VALUE, ValaEnumValue))
271
291
#define VALA_ENUM_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ENUM_VALUE, ValaEnumValueClass))
306
326
typedef struct _ValaDelegate ValaDelegate;
307
327
typedef struct _ValaDelegateClass ValaDelegateClass;
308
328
 
309
 
#define VALA_TYPE_MEMBER (vala_member_get_type ())
310
 
#define VALA_MEMBER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_MEMBER, ValaMember))
311
 
#define VALA_MEMBER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_MEMBER, ValaMemberClass))
312
 
#define VALA_IS_MEMBER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_MEMBER))
313
 
#define VALA_IS_MEMBER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_MEMBER))
314
 
#define VALA_MEMBER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_MEMBER, ValaMemberClass))
315
 
 
316
 
typedef struct _ValaMember ValaMember;
317
 
typedef struct _ValaMemberClass ValaMemberClass;
318
 
 
319
 
#define VALA_TYPE_CONSTANT (vala_constant_get_type ())
320
 
#define VALA_CONSTANT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CONSTANT, ValaConstant))
321
 
#define VALA_CONSTANT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CONSTANT, ValaConstantClass))
322
 
#define VALA_IS_CONSTANT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CONSTANT))
323
 
#define VALA_IS_CONSTANT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CONSTANT))
324
 
#define VALA_CONSTANT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CONSTANT, ValaConstantClass))
325
 
 
326
 
typedef struct _ValaConstant ValaConstant;
327
 
typedef struct _ValaConstantClass ValaConstantClass;
328
 
 
329
329
#define VALA_TYPE_FIELD (vala_field_get_type ())
330
330
#define VALA_FIELD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_FIELD, ValaField))
331
331
#define VALA_FIELD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_FIELD, ValaFieldClass))
1158
1158
        void (*visit_error_domain) (ValaCodeVisitor* self, ValaErrorDomain* edomain);
1159
1159
        void (*visit_error_code) (ValaCodeVisitor* self, ValaErrorCode* ecode);
1160
1160
        void (*visit_delegate) (ValaCodeVisitor* self, ValaDelegate* d);
1161
 
        void (*visit_member) (ValaCodeVisitor* self, ValaMember* m);
1162
1161
        void (*visit_constant) (ValaCodeVisitor* self, ValaConstant* c);
1163
1162
        void (*visit_field) (ValaCodeVisitor* self, ValaField* f);
1164
1163
        void (*visit_method) (ValaCodeVisitor* self, ValaMethod* m);
1325
1324
GType vala_data_type_get_type (void) G_GNUC_CONST;
1326
1325
GType vala_expression_get_type (void) G_GNUC_CONST;
1327
1326
GType vala_symbol_get_type (void) G_GNUC_CONST;
 
1327
GType vala_variable_get_type (void) G_GNUC_CONST;
1328
1328
GType vala_local_variable_get_type (void) G_GNUC_CONST;
1329
1329
GType vala_attribute_get_type (void) G_GNUC_CONST;
1330
1330
GType vala_assignment_get_type (void) G_GNUC_CONST;
1388
1388
GType vala_struct_get_type (void) G_GNUC_CONST;
1389
1389
GType vala_interface_get_type (void) G_GNUC_CONST;
1390
1390
GType vala_enum_get_type (void) G_GNUC_CONST;
 
1391
GType vala_constant_get_type (void) G_GNUC_CONST;
1391
1392
GType vala_enum_value_get_type (void) G_GNUC_CONST;
1392
1393
GType vala_error_domain_get_type (void) G_GNUC_CONST;
1393
1394
GType vala_error_code_get_type (void) G_GNUC_CONST;
1394
1395
GType vala_delegate_get_type (void) G_GNUC_CONST;
1395
 
GType vala_member_get_type (void) G_GNUC_CONST;
1396
 
GType vala_constant_get_type (void) G_GNUC_CONST;
1397
1396
GType vala_field_get_type (void) G_GNUC_CONST;
1398
1397
GType vala_method_get_type (void) G_GNUC_CONST;
1399
1398
GType vala_creation_method_get_type (void) G_GNUC_CONST;
1539
1538
ValaMethod* vala_semantic_analyzer_find_current_method (ValaSemanticAnalyzer* self);
1540
1539
gboolean vala_semantic_analyzer_is_in_constructor (ValaSemanticAnalyzer* self);
1541
1540
ValaFormalParameter* vala_method_get_this_parameter (ValaMethod* self);
1542
 
ValaDataType* vala_local_variable_get_variable_type (ValaLocalVariable* self);
 
1541
ValaDataType* vala_variable_get_variable_type (ValaVariable* self);
1543
1542
gboolean vala_delegate_matches_method (ValaDelegate* self, ValaMethod* m, ValaDataType* dt);
1544
 
ValaDataType* vala_field_get_field_type (ValaField* self);
1545
1543
gboolean vala_data_type_is_disposable (ValaDataType* self);
1546
1544
GType vala_pointer_type_get_type (void) G_GNUC_CONST;
1547
1545
gboolean vala_data_type_get_value_owned (ValaDataType* self);
1563
1561
 
1564
1562
 
1565
1563
 
 
1564
/**
 
1565
 * Creates a new assignment.
 
1566
 *
 
1567
 * @param left             left hand side
 
1568
 * @param operator         assignment operator
 
1569
 * @param right            right hand side
 
1570
 * @param source_reference reference to source code
 
1571
 * @return                 newly created assignment
 
1572
 */
1566
1573
ValaAssignment* vala_assignment_construct (GType object_type, ValaExpression* left, ValaExpression* right, ValaAssignmentOperator operator, ValaSourceReference* source_reference) {
1567
1574
        ValaAssignment* self;
1568
1575
        g_return_val_if_fail (left != NULL, NULL);
1633
1640
        gboolean _tmp0_ = FALSE;
1634
1641
        gboolean _tmp1_ = FALSE;
1635
1642
        gboolean _tmp28_ = FALSE;
1636
 
        ValaList* _tmp95_;
1637
 
        ValaList* _tmp96_;
 
1643
        ValaList* _tmp90_;
 
1644
        ValaList* _tmp91_;
1638
1645
        self = (ValaAssignment*) base;
1639
1646
        g_return_val_if_fail (analyzer != NULL, FALSE);
1640
1647
        if (vala_code_node_get_checked ((ValaCodeNode*) self)) {
2053
2060
        } else {
2054
2061
                if (VALA_IS_MEMBER_ACCESS (vala_assignment_get_left (self))) {
2055
2062
                        ValaMemberAccess* ma;
2056
 
                        gboolean _tmp73_ = FALSE;
2057
 
                        ValaExpression* _tmp78_;
 
2063
                        gboolean _tmp68_ = FALSE;
 
2064
                        ValaExpression* _tmp73_;
2058
2065
                        ValaMemberAccess* right_ma;
2059
 
                        gboolean _tmp79_ = FALSE;
 
2066
                        gboolean _tmp74_ = FALSE;
2060
2067
                        ma = _vala_code_node_ref0 (VALA_MEMBER_ACCESS (vala_assignment_get_left (self)));
2061
2068
                        if (VALA_IS_PROPERTY (vala_expression_get_symbol_reference ((ValaExpression*) ma))) {
2062
2069
                                ValaProperty* prop;
2143
2150
                                _vala_code_node_unref0 (prop);
2144
2151
                        } else {
2145
2152
                                gboolean _tmp63_ = FALSE;
2146
 
                                if (VALA_IS_LOCAL_VARIABLE (vala_expression_get_symbol_reference ((ValaExpression*) ma))) {
 
2153
                                if (VALA_IS_VARIABLE (vala_expression_get_symbol_reference ((ValaExpression*) ma))) {
2147
2154
                                        _tmp63_ = vala_expression_get_value_type (vala_assignment_get_right (self)) == NULL;
2148
2155
                                } else {
2149
2156
                                        _tmp63_ = FALSE;
2150
2157
                                }
2151
2158
                                if (_tmp63_) {
2152
 
                                        ValaLocalVariable* local;
 
2159
                                        ValaVariable* variable;
2153
2160
                                        gboolean _tmp64_ = FALSE;
2154
 
                                        local = _vala_code_node_ref0 (VALA_LOCAL_VARIABLE (vala_expression_get_symbol_reference ((ValaExpression*) ma)));
 
2161
                                        variable = _vala_code_node_ref0 (VALA_VARIABLE (vala_expression_get_symbol_reference ((ValaExpression*) ma)));
2155
2162
                                        if (VALA_IS_METHOD (vala_expression_get_symbol_reference (vala_assignment_get_right (self)))) {
2156
 
                                                _tmp64_ = VALA_IS_DELEGATE_TYPE (vala_local_variable_get_variable_type (local));
 
2163
                                                _tmp64_ = VALA_IS_DELEGATE_TYPE (vala_variable_get_variable_type (variable));
2157
2164
                                        } else {
2158
2165
                                                _tmp64_ = FALSE;
2159
2166
                                        }
2162
2169
                                                ValaDelegateType* dt;
2163
2170
                                                ValaDelegate* cb;
2164
2171
                                                m = _vala_code_node_ref0 (VALA_METHOD (vala_expression_get_symbol_reference (vala_assignment_get_right (self))));
2165
 
                                                dt = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (vala_local_variable_get_variable_type (local)));
 
2172
                                                dt = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (vala_variable_get_variable_type (variable)));
2166
2173
                                                cb = _vala_code_node_ref0 (vala_delegate_type_get_delegate_symbol (dt));
2167
2174
                                                if (!vala_delegate_matches_method (cb, m, (ValaDataType*) dt)) {
2168
2175
                                                        char* _tmp67_;
2177
2184
                                                        _vala_code_node_unref0 (cb);
2178
2185
                                                        _vala_code_node_unref0 (dt);
2179
2186
                                                        _vala_code_node_unref0 (m);
2180
 
                                                        _vala_code_node_unref0 (local);
 
2187
                                                        _vala_code_node_unref0 (variable);
2181
2188
                                                        _vala_code_node_unref0 (ma);
2182
2189
                                                        return result;
2183
2190
                                                }
2184
 
                                                vala_expression_set_value_type (vala_assignment_get_right (self), vala_local_variable_get_variable_type (local));
 
2191
                                                vala_expression_set_value_type (vala_assignment_get_right (self), vala_variable_get_variable_type (variable));
2185
2192
                                                _vala_code_node_unref0 (cb);
2186
2193
                                                _vala_code_node_unref0 (dt);
2187
2194
                                                _vala_code_node_unref0 (m);
2189
2196
                                                vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
2190
2197
                                                vala_report_error (vala_code_node_get_source_reference ((ValaCodeNode*) self), "Assignment: Invalid callback assignment attempt");
2191
2198
                                                result = FALSE;
2192
 
                                                _vala_code_node_unref0 (local);
 
2199
                                                _vala_code_node_unref0 (variable);
2193
2200
                                                _vala_code_node_unref0 (ma);
2194
2201
                                                return result;
2195
2202
                                        }
2196
 
                                        _vala_code_node_unref0 (local);
2197
 
                                } else {
2198
 
                                        gboolean _tmp68_ = FALSE;
2199
 
                                        if (VALA_IS_FIELD (vala_expression_get_symbol_reference ((ValaExpression*) ma))) {
2200
 
                                                _tmp68_ = vala_expression_get_value_type (vala_assignment_get_right (self)) == NULL;
2201
 
                                        } else {
2202
 
                                                _tmp68_ = FALSE;
2203
 
                                        }
2204
 
                                        if (_tmp68_) {
2205
 
                                                ValaField* f;
2206
 
                                                gboolean _tmp69_ = FALSE;
2207
 
                                                f = _vala_code_node_ref0 (VALA_FIELD (vala_expression_get_symbol_reference ((ValaExpression*) ma)));
2208
 
                                                if (VALA_IS_METHOD (vala_expression_get_symbol_reference (vala_assignment_get_right (self)))) {
2209
 
                                                        _tmp69_ = VALA_IS_DELEGATE_TYPE (vala_field_get_field_type (f));
2210
 
                                                } else {
2211
 
                                                        _tmp69_ = FALSE;
2212
 
                                                }
2213
 
                                                if (_tmp69_) {
2214
 
                                                        ValaMethod* m;
2215
 
                                                        ValaDelegateType* dt;
2216
 
                                                        ValaDelegate* cb;
2217
 
                                                        m = _vala_code_node_ref0 (VALA_METHOD (vala_expression_get_symbol_reference (vala_assignment_get_right (self))));
2218
 
                                                        dt = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (vala_field_get_field_type (f)));
2219
 
                                                        cb = _vala_code_node_ref0 (vala_delegate_type_get_delegate_symbol (dt));
2220
 
                                                        if (!vala_delegate_matches_method (cb, m, (ValaDataType*) dt)) {
2221
 
                                                                char* _tmp72_;
2222
 
                                                                char* _tmp71_;
2223
 
                                                                char* _tmp70_;
2224
 
                                                                vala_code_node_set_error ((ValaCodeNode*) f, TRUE);
2225
 
                                                                vala_report_error (vala_code_node_get_source_reference ((ValaCodeNode*) self), _tmp72_ = g_strdup_printf ("declaration of method `%s' doesn't match declaration of callback `%s'", _tmp70_ = vala_symbol_get_full_name ((ValaSymbol*) m), _tmp71_ = vala_symbol_get_full_name ((ValaSymbol*) cb)));
2226
 
                                                                _g_free0 (_tmp72_);
2227
 
                                                                _g_free0 (_tmp71_);
2228
 
                                                                _g_free0 (_tmp70_);
2229
 
                                                                result = FALSE;
2230
 
                                                                _vala_code_node_unref0 (cb);
2231
 
                                                                _vala_code_node_unref0 (dt);
2232
 
                                                                _vala_code_node_unref0 (m);
2233
 
                                                                _vala_code_node_unref0 (f);
2234
 
                                                                _vala_code_node_unref0 (ma);
2235
 
                                                                return result;
2236
 
                                                        }
2237
 
                                                        vala_expression_set_value_type (vala_assignment_get_right (self), vala_field_get_field_type (f));
2238
 
                                                        _vala_code_node_unref0 (cb);
2239
 
                                                        _vala_code_node_unref0 (dt);
2240
 
                                                        _vala_code_node_unref0 (m);
2241
 
                                                } else {
2242
 
                                                        vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
2243
 
                                                        vala_report_error (vala_code_node_get_source_reference ((ValaCodeNode*) self), "Assignment: Invalid callback assignment attempt");
2244
 
                                                        result = FALSE;
2245
 
                                                        _vala_code_node_unref0 (f);
2246
 
                                                        _vala_code_node_unref0 (ma);
2247
 
                                                        return result;
2248
 
                                                }
2249
 
                                                _vala_code_node_unref0 (f);
2250
 
                                        }
 
2203
                                        _vala_code_node_unref0 (variable);
2251
2204
                                }
2252
2205
                        }
2253
2206
                        if (vala_expression_get_value_type (vala_assignment_get_left (self)) != NULL) {
2254
 
                                _tmp73_ = vala_expression_get_value_type (vala_assignment_get_right (self)) != NULL;
 
2207
                                _tmp68_ = vala_expression_get_value_type (vala_assignment_get_right (self)) != NULL;
2255
2208
                        } else {
2256
 
                                _tmp73_ = FALSE;
 
2209
                                _tmp68_ = FALSE;
2257
2210
                        }
2258
 
                        if (_tmp73_) {
 
2211
                        if (_tmp68_) {
2259
2212
                                if (!vala_data_type_compatible (vala_expression_get_value_type (vala_assignment_get_right (self)), vala_expression_get_value_type (vala_assignment_get_left (self)))) {
2260
 
                                        char* _tmp76_;
2261
 
                                        char* _tmp75_;
2262
 
                                        char* _tmp74_;
 
2213
                                        char* _tmp71_;
 
2214
                                        char* _tmp70_;
 
2215
                                        char* _tmp69_;
2263
2216
                                        vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
2264
 
                                        vala_report_error (vala_code_node_get_source_reference ((ValaCodeNode*) self), _tmp76_ = g_strdup_printf ("Assignment: Cannot convert from `%s' to `%s'", _tmp74_ = vala_code_node_to_string ((ValaCodeNode*) vala_expression_get_value_type (vala_assignment_get_right (self))), _tmp75_ = vala_code_node_to_string ((ValaCodeNode*) vala_expression_get_value_type (vala_assignment_get_left (self)))));
2265
 
                                        _g_free0 (_tmp76_);
2266
 
                                        _g_free0 (_tmp75_);
2267
 
                                        _g_free0 (_tmp74_);
 
2217
                                        vala_report_error (vala_code_node_get_source_reference ((ValaCodeNode*) self), _tmp71_ = g_strdup_printf ("Assignment: Cannot convert from `%s' to `%s'", _tmp69_ = vala_code_node_to_string ((ValaCodeNode*) vala_expression_get_value_type (vala_assignment_get_right (self))), _tmp70_ = vala_code_node_to_string ((ValaCodeNode*) vala_expression_get_value_type (vala_assignment_get_left (self)))));
 
2218
                                        _g_free0 (_tmp71_);
 
2219
                                        _g_free0 (_tmp70_);
 
2220
                                        _g_free0 (_tmp69_);
2268
2221
                                        result = FALSE;
2269
2222
                                        _vala_code_node_unref0 (ma);
2270
2223
                                        return result;
2271
2224
                                }
2272
2225
                                if (!VALA_IS_PROPERTY (vala_expression_get_symbol_reference ((ValaExpression*) ma))) {
2273
2226
                                        if (vala_data_type_is_disposable (vala_expression_get_value_type (vala_assignment_get_right (self)))) {
2274
 
                                                gboolean _tmp77_ = FALSE;
 
2227
                                                gboolean _tmp72_ = FALSE;
2275
2228
                                                if (!VALA_IS_POINTER_TYPE (vala_expression_get_value_type (vala_assignment_get_left (self)))) {
2276
 
                                                        _tmp77_ = !vala_data_type_get_value_owned (vala_expression_get_value_type (vala_assignment_get_left (self)));
 
2229
                                                        _tmp72_ = !vala_data_type_get_value_owned (vala_expression_get_value_type (vala_assignment_get_left (self)));
2277
2230
                                                } else {
2278
 
                                                        _tmp77_ = FALSE;
 
2231
                                                        _tmp72_ = FALSE;
2279
2232
                                                }
2280
 
                                                if (_tmp77_) {
 
2233
                                                if (_tmp72_) {
2281
2234
                                                        vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
2282
2235
                                                        vala_report_error (vala_code_node_get_source_reference ((ValaCodeNode*) self), "Invalid assignment from owned expression to unowned variable");
2283
2236
                                                }
2287
2240
                                        }
2288
2241
                                }
2289
2242
                        }
2290
 
                        right_ma = _vala_code_node_ref0 ((_tmp78_ = vala_assignment_get_right (self), VALA_IS_MEMBER_ACCESS (_tmp78_) ? ((ValaMemberAccess*) _tmp78_) : NULL));
 
2243
                        right_ma = _vala_code_node_ref0 ((_tmp73_ = vala_assignment_get_right (self), VALA_IS_MEMBER_ACCESS (_tmp73_) ? ((ValaMemberAccess*) _tmp73_) : NULL));
2291
2244
                        if (right_ma != NULL) {
2292
 
                                _tmp79_ = vala_expression_get_symbol_reference ((ValaExpression*) ma) == vala_expression_get_symbol_reference ((ValaExpression*) right_ma);
 
2245
                                _tmp74_ = vala_expression_get_symbol_reference ((ValaExpression*) ma) == vala_expression_get_symbol_reference ((ValaExpression*) right_ma);
2293
2246
                        } else {
2294
 
                                _tmp79_ = FALSE;
 
2247
                                _tmp74_ = FALSE;
2295
2248
                        }
2296
 
                        if (_tmp79_) {
2297
 
                                gboolean _tmp80_ = FALSE;
 
2249
                        if (_tmp74_) {
 
2250
                                gboolean _tmp75_ = FALSE;
2298
2251
                                if (VALA_IS_LOCAL_VARIABLE (vala_expression_get_symbol_reference ((ValaExpression*) ma))) {
2299
 
                                        _tmp80_ = TRUE;
 
2252
                                        _tmp75_ = TRUE;
2300
2253
                                } else {
2301
 
                                        _tmp80_ = VALA_IS_FORMAL_PARAMETER (vala_expression_get_symbol_reference ((ValaExpression*) ma));
 
2254
                                        _tmp75_ = VALA_IS_FORMAL_PARAMETER (vala_expression_get_symbol_reference ((ValaExpression*) ma));
2302
2255
                                }
2303
 
                                if (_tmp80_) {
 
2256
                                if (_tmp75_) {
2304
2257
                                        vala_report_warning (vala_code_node_get_source_reference ((ValaCodeNode*) self), "Assignment to same variable");
2305
2258
                                } else {
2306
2259
                                        if (VALA_IS_FIELD (vala_expression_get_symbol_reference ((ValaExpression*) ma))) {
2309
2262
                                                if (vala_field_get_binding (f) == MEMBER_BINDING_STATIC) {
2310
2263
                                                        vala_report_warning (vala_code_node_get_source_reference ((ValaCodeNode*) self), "Assignment to same variable");
2311
2264
                                                } else {
2312
 
                                                        ValaExpression* _tmp81_;
 
2265
                                                        ValaExpression* _tmp76_;
2313
2266
                                                        ValaMemberAccess* ma_inner;
2314
 
                                                        ValaExpression* _tmp82_;
 
2267
                                                        ValaExpression* _tmp77_;
2315
2268
                                                        ValaMemberAccess* right_ma_inner;
2316
 
                                                        gboolean _tmp83_ = FALSE;
2317
 
                                                        gboolean _tmp84_ = FALSE;
2318
 
                                                        gboolean _tmp85_ = FALSE;
2319
 
                                                        gboolean _tmp86_ = FALSE;
2320
 
                                                        gboolean _tmp87_ = FALSE;
2321
 
                                                        ma_inner = _vala_code_node_ref0 ((_tmp81_ = vala_member_access_get_inner (ma), VALA_IS_MEMBER_ACCESS (_tmp81_) ? ((ValaMemberAccess*) _tmp81_) : NULL));
2322
 
                                                        right_ma_inner = _vala_code_node_ref0 ((_tmp82_ = vala_member_access_get_inner (right_ma), VALA_IS_MEMBER_ACCESS (_tmp82_) ? ((ValaMemberAccess*) _tmp82_) : NULL));
 
2269
                                                        gboolean _tmp78_ = FALSE;
 
2270
                                                        gboolean _tmp79_ = FALSE;
 
2271
                                                        gboolean _tmp80_ = FALSE;
 
2272
                                                        gboolean _tmp81_ = FALSE;
 
2273
                                                        gboolean _tmp82_ = FALSE;
 
2274
                                                        ma_inner = _vala_code_node_ref0 ((_tmp76_ = vala_member_access_get_inner (ma), VALA_IS_MEMBER_ACCESS (_tmp76_) ? ((ValaMemberAccess*) _tmp76_) : NULL));
 
2275
                                                        right_ma_inner = _vala_code_node_ref0 ((_tmp77_ = vala_member_access_get_inner (right_ma), VALA_IS_MEMBER_ACCESS (_tmp77_) ? ((ValaMemberAccess*) _tmp77_) : NULL));
2323
2276
                                                        if (ma_inner != NULL) {
2324
 
                                                                _tmp87_ = _vala_strcmp0 (vala_member_access_get_member_name (ma_inner), "this") == 0;
2325
 
                                                        } else {
2326
 
                                                                _tmp87_ = FALSE;
2327
 
                                                        }
2328
 
                                                        if (_tmp87_) {
2329
 
                                                                _tmp86_ = vala_member_access_get_inner (ma_inner) == NULL;
2330
 
                                                        } else {
2331
 
                                                                _tmp86_ = FALSE;
2332
 
                                                        }
2333
 
                                                        if (_tmp86_) {
2334
 
                                                                _tmp85_ = right_ma_inner != NULL;
2335
 
                                                        } else {
2336
 
                                                                _tmp85_ = FALSE;
2337
 
                                                        }
2338
 
                                                        if (_tmp85_) {
2339
 
                                                                _tmp84_ = _vala_strcmp0 (vala_member_access_get_member_name (right_ma_inner), "this") == 0;
2340
 
                                                        } else {
2341
 
                                                                _tmp84_ = FALSE;
2342
 
                                                        }
2343
 
                                                        if (_tmp84_) {
2344
 
                                                                _tmp83_ = vala_member_access_get_inner (right_ma_inner) == NULL;
2345
 
                                                        } else {
2346
 
                                                                _tmp83_ = FALSE;
2347
 
                                                        }
2348
 
                                                        if (_tmp83_) {
 
2277
                                                                _tmp82_ = _vala_strcmp0 (vala_member_access_get_member_name (ma_inner), "this") == 0;
 
2278
                                                        } else {
 
2279
                                                                _tmp82_ = FALSE;
 
2280
                                                        }
 
2281
                                                        if (_tmp82_) {
 
2282
                                                                _tmp81_ = vala_member_access_get_inner (ma_inner) == NULL;
 
2283
                                                        } else {
 
2284
                                                                _tmp81_ = FALSE;
 
2285
                                                        }
 
2286
                                                        if (_tmp81_) {
 
2287
                                                                _tmp80_ = right_ma_inner != NULL;
 
2288
                                                        } else {
 
2289
                                                                _tmp80_ = FALSE;
 
2290
                                                        }
 
2291
                                                        if (_tmp80_) {
 
2292
                                                                _tmp79_ = _vala_strcmp0 (vala_member_access_get_member_name (right_ma_inner), "this") == 0;
 
2293
                                                        } else {
 
2294
                                                                _tmp79_ = FALSE;
 
2295
                                                        }
 
2296
                                                        if (_tmp79_) {
 
2297
                                                                _tmp78_ = vala_member_access_get_inner (right_ma_inner) == NULL;
 
2298
                                                        } else {
 
2299
                                                                _tmp78_ = FALSE;
 
2300
                                                        }
 
2301
                                                        if (_tmp78_) {
2349
2302
                                                                vala_report_warning (vala_code_node_get_source_reference ((ValaCodeNode*) self), "Assignment to same variable");
2350
2303
                                                        }
2351
2304
                                                        _vala_code_node_unref0 (right_ma_inner);
2362
2315
                                ValaElementAccess* ea;
2363
2316
                                ea = _vala_code_node_ref0 (VALA_ELEMENT_ACCESS (vala_assignment_get_left (self)));
2364
2317
                                if (!vala_data_type_compatible (vala_expression_get_value_type (vala_assignment_get_right (self)), vala_expression_get_value_type (vala_assignment_get_left (self)))) {
2365
 
                                        char* _tmp90_;
2366
 
                                        char* _tmp89_;
2367
 
                                        char* _tmp88_;
 
2318
                                        char* _tmp85_;
 
2319
                                        char* _tmp84_;
 
2320
                                        char* _tmp83_;
2368
2321
                                        vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
2369
 
                                        vala_report_error (vala_code_node_get_source_reference ((ValaCodeNode*) self), _tmp90_ = g_strdup_printf ("Assignment: Cannot convert from `%s' to `%s'", _tmp88_ = vala_code_node_to_string ((ValaCodeNode*) vala_expression_get_value_type (vala_assignment_get_right (self))), _tmp89_ = vala_code_node_to_string ((ValaCodeNode*) vala_expression_get_value_type (vala_assignment_get_left (self)))));
2370
 
                                        _g_free0 (_tmp90_);
2371
 
                                        _g_free0 (_tmp89_);
2372
 
                                        _g_free0 (_tmp88_);
 
2322
                                        vala_report_error (vala_code_node_get_source_reference ((ValaCodeNode*) self), _tmp85_ = g_strdup_printf ("Assignment: Cannot convert from `%s' to `%s'", _tmp83_ = vala_code_node_to_string ((ValaCodeNode*) vala_expression_get_value_type (vala_assignment_get_right (self))), _tmp84_ = vala_code_node_to_string ((ValaCodeNode*) vala_expression_get_value_type (vala_assignment_get_left (self)))));
 
2323
                                        _g_free0 (_tmp85_);
 
2324
                                        _g_free0 (_tmp84_);
 
2325
                                        _g_free0 (_tmp83_);
2373
2326
                                        result = FALSE;
2374
2327
                                        _vala_code_node_unref0 (ea);
2375
2328
                                        return result;
2376
2329
                                }
2377
2330
                                if (vala_data_type_is_disposable (vala_expression_get_value_type (vala_assignment_get_right (self)))) {
2378
2331
                                        ValaDataType* element_type;
2379
 
                                        gboolean _tmp93_ = FALSE;
 
2332
                                        gboolean _tmp88_ = FALSE;
2380
2333
                                        element_type = NULL;
2381
2334
                                        if (VALA_IS_ARRAY_TYPE (vala_expression_get_value_type (vala_element_access_get_container (ea)))) {
2382
2335
                                                ValaArrayType* array_type;
2383
 
                                                ValaDataType* _tmp91_;
 
2336
                                                ValaDataType* _tmp86_;
2384
2337
                                                array_type = _vala_code_node_ref0 (VALA_ARRAY_TYPE (vala_expression_get_value_type (vala_element_access_get_container (ea))));
2385
 
                                                element_type = (_tmp91_ = _vala_code_node_ref0 (vala_array_type_get_element_type (array_type)), _vala_code_node_unref0 (element_type), _tmp91_);
 
2338
                                                element_type = (_tmp86_ = _vala_code_node_ref0 (vala_array_type_get_element_type (array_type)), _vala_code_node_unref0 (element_type), _tmp86_);
2386
2339
                                                _vala_code_node_unref0 (array_type);
2387
2340
                                        } else {
2388
2341
                                                ValaList* args;
2389
 
                                                ValaDataType* _tmp92_;
 
2342
                                                ValaDataType* _tmp87_;
2390
2343
                                                args = vala_data_type_get_type_arguments (vala_expression_get_value_type (vala_element_access_get_container (ea)));
2391
2344
                                                g_assert (vala_collection_get_size ((ValaCollection*) args) == 1);
2392
 
                                                element_type = (_tmp92_ = (ValaDataType*) vala_list_get (args, 0), _vala_code_node_unref0 (element_type), _tmp92_);
 
2345
                                                element_type = (_tmp87_ = (ValaDataType*) vala_list_get (args, 0), _vala_code_node_unref0 (element_type), _tmp87_);
2393
2346
                                                _vala_collection_object_unref0 (args);
2394
2347
                                        }
2395
2348
                                        if (!VALA_IS_POINTER_TYPE (element_type)) {
2396
 
                                                _tmp93_ = !vala_data_type_get_value_owned (element_type);
 
2349
                                                _tmp88_ = !vala_data_type_get_value_owned (element_type);
2397
2350
                                        } else {
2398
 
                                                _tmp93_ = FALSE;
 
2351
                                                _tmp88_ = FALSE;
2399
2352
                                        }
2400
 
                                        if (_tmp93_) {
 
2353
                                        if (_tmp88_) {
2401
2354
                                                vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
2402
2355
                                                vala_report_error (vala_code_node_get_source_reference ((ValaCodeNode*) self), "Invalid assignment from owned expression to unowned variable");
2403
2356
                                                result = FALSE;
2418
2371
                }
2419
2372
        }
2420
2373
        if (vala_expression_get_value_type (vala_assignment_get_left (self)) != NULL) {
2421
 
                ValaDataType* _tmp94_;
2422
 
                vala_expression_set_value_type ((ValaExpression*) self, _tmp94_ = vala_data_type_copy (vala_expression_get_value_type (vala_assignment_get_left (self))));
2423
 
                _vala_code_node_unref0 (_tmp94_);
 
2374
                ValaDataType* _tmp89_;
 
2375
                vala_expression_set_value_type ((ValaExpression*) self, _tmp89_ = vala_data_type_copy (vala_expression_get_value_type (vala_assignment_get_left (self))));
 
2376
                _vala_code_node_unref0 (_tmp89_);
2424
2377
                vala_data_type_set_value_owned (vala_expression_get_value_type ((ValaExpression*) self), FALSE);
2425
2378
        } else {
2426
2379
                vala_expression_set_value_type ((ValaExpression*) self, NULL);
2427
2380
        }
2428
 
        vala_code_node_add_error_types ((ValaCodeNode*) self, _tmp95_ = vala_code_node_get_error_types ((ValaCodeNode*) vala_assignment_get_left (self)));
2429
 
        _vala_collection_object_unref0 (_tmp95_);
2430
 
        vala_code_node_add_error_types ((ValaCodeNode*) self, _tmp96_ = vala_code_node_get_error_types ((ValaCodeNode*) vala_assignment_get_right (self)));
2431
 
        _vala_collection_object_unref0 (_tmp96_);
 
2381
        vala_code_node_add_error_types ((ValaCodeNode*) self, _tmp90_ = vala_code_node_get_error_types ((ValaCodeNode*) vala_assignment_get_left (self)));
 
2382
        _vala_collection_object_unref0 (_tmp90_);
 
2383
        vala_code_node_add_error_types ((ValaCodeNode*) self, _tmp91_ = vala_code_node_get_error_types ((ValaCodeNode*) vala_assignment_get_right (self)));
 
2384
        _vala_collection_object_unref0 (_tmp91_);
2432
2385
        result = !vala_code_node_get_error ((ValaCodeNode*) self);
2433
2386
        return result;
2434
2387
}
2553
2506
}
2554
2507
 
2555
2508
 
 
2509
/**
 
2510
 * Represents an assignment expression in the source code.
 
2511
 *
 
2512
 * Supports =, |=, &=, ^=, +=, -=, *=, /=, %=, <<=, >>=.
 
2513
 */
2556
2514
GType vala_assignment_get_type (void) {
2557
2515
        static volatile gsize vala_assignment_type_id__volatile = 0;
2558
2516
        if (g_once_init_enter (&vala_assignment_type_id__volatile)) {