- Timestamp:
- May 19, 2017, 2:51:10 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 11ab8ea8
- Parents:
- 0661678 (diff), 535adab (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r0661678 rd298e03 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Ma r 30 15:42:32201713 // Update Count : 23 1812 // Last Modified On : Thu May 18 18:06:17 2017 13 // Update Count : 2338 14 14 // 15 15 … … 85 85 } // for 86 86 } // distExt 87 88 bool forall = false; // aggregate have one or more forall qualifiers ? 87 89 %} 88 90 … … 1556 1558 sue_type_specifier: // struct, union, enum + type specifier 1557 1559 elaborated_type 1558 | type_qualifier_list elaborated_type 1559 { $$ = $2->addQualifiers( $1 ); } 1560 | type_qualifier_list 1561 { if ( $1->type != nullptr && $1->type->forall ) forall = true; } // remember generic type 1562 elaborated_type 1563 { $$ = $3->addQualifiers( $1 ); } 1560 1564 | sue_type_specifier type_qualifier 1561 1565 { $$ = $1->addQualifiers( $2 ); } … … 1613 1617 { $$ = DeclarationNode::newAggregate( $1, new string( DeclarationNode::anonymous.newName() ), nullptr, $4, true )->addQualifiers( $2 ); } 1614 1618 | aggregate_key attribute_list_opt no_attr_identifier_or_type_name 1615 { typedefTable.makeTypedef( *$3 ); } 1619 { 1620 typedefTable.makeTypedef( *$3 ); // create typedef 1621 if ( forall ) typedefTable.changeKind( *$3, TypedefTable::TG ); // possibly update 1622 forall = false; // reset 1623 } 1616 1624 '{' field_declaration_list '}' 1617 1625 { $$ = DeclarationNode::newAggregate( $1, $3, nullptr, $6, true )->addQualifiers( $2 ); } -
src/tests/tuplePolymorphism.c
r0661678 rd298e03 9 9 // Author : Rob Schluntz 10 10 // Created On : Tue Nov 16 10:38:00 2016 11 // Last Modified By : Rob Schluntz12 // Last Modified On : T ue Nov 16 10:39:18 201613 // Update Count : 211 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu May 18 18:05:12 2017 13 // Update Count : 4 14 14 // 15 15 16 16 // packed is needed so that structs are not passed with the same alignment as function arguments 17 17 __attribute__((packed)) struct A { 18 19 20 18 double x; 19 char y; 20 double z; 21 21 }; 22 22 23 23 __attribute__((packed)) struct B { 24 25 26 24 long long x; 25 char y; 26 long long z; 27 27 }; 28 28 … … 39 39 40 40 int main() { 41 42 41 int x1 = 123, x3 = 456; 42 double x2 = 999.123; 43 43 44 45 44 int i1 = 111, i3 = 222; 45 double i2 = 333; 46 46 47 48 47 int d1 = 555, d3 = 444; 48 double d2 = 666; 49 49 50 50 51 52 53 54 51 [i1, i2, i3] = ([x1, (int)x2, x3]) + ([9, 2, 3]); 52 [d1, d2, d3] = ([x1, x2, x3]) + ([9, 2, 3]); 53 printf("%d %g %d\n", i1, i2, i3); 54 printf("%d %g %d\n", d1, d2, d3); 55 55 56 57 58 59 60 56 [double, double, double] zzz; 57 zzz = [x1, x2, x3]; 58 printf("%g %g %g\n", zzz); 59 [x1, x2, x3] = zzz+zzz; 60 printf("%d %g %d\n", x1, x2, x3); 61 61 62 63 62 // ensure non-matching assertions are specialized correctly 63 g((A){ 1.21, 'x', 10.21}, (B){ 1111LL, 'v', 54385938LL }); 64 64 } 65 65 … … 73 73 // tab-width: 4 // 74 74 // End: // 75
Note: See TracChangeset
for help on using the changeset viewer.