Changeset d958834b
- Timestamp:
- Jul 25, 2022, 12:29:40 PM (2 years ago)
- Branches:
- ADT, ast-experimental, master, pthread-emulation, qualifiedEnum
- Children:
- b729c01
- Parents:
- d4b37ab
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/CodeGenerator.cc
rd4b37ab rd958834b 289 289 if ( obj->get_init() ) { 290 290 obj->get_init()->accept( *visitor ); 291 last_val = ((ConstantExpr *)(((SingleInit *)(obj->init))->value))->constant.get_ival();291 // last_val = ((ConstantExpr *)(((SingleInit *)(obj->init))->value))->constant.get_ival(); 292 292 } else { 293 293 output << ++last_val; -
src/ResolvExpr/CandidateFinder.cpp
rd4b37ab rd958834b 897 897 } 898 898 899 if (argType.as<ast::PointerType>()) funcFinder.otypeKeys.insert(Mangle::Encoding::pointer); 900 else if (const ast::EnumInstType * enumInst = argType.as<ast::EnumInstType>()) {901 const ast::EnumDecl * enumDecl = enumInst->base;902 if ( const ast::Type* enumType = enumDecl->base ) {903 // instance of enum (T) is a instance of type (T)904 funcFinder.otypeKeys.insert(Mangle::mangle(enumType, Mangle::NoGenericParams | Mangle::Type));905 } else {906 // instance of an untyped enum is techically int907 funcFinder.otypeKeys.insert(Mangle::mangle(enumDecl, Mangle::NoGenericParams | Mangle::Type));908 }909 }899 if (argType.as<ast::PointerType>()) funcFinder.otypeKeys.insert(Mangle::Encoding::pointer); 900 // else if (const ast::EnumInstType * enumInst = argType.as<ast::EnumInstType>()) { 901 // const ast::EnumDecl * enumDecl = enumInst->base; // Here 902 // if ( const ast::Type* enumType = enumDecl->base ) { 903 // // instance of enum (T) is a instance of type (T) 904 // funcFinder.otypeKeys.insert(Mangle::mangle(enumType, Mangle::NoGenericParams | Mangle::Type)); 905 // } else { 906 // // instance of an untyped enum is techically int 907 // funcFinder.otypeKeys.insert(Mangle::mangle(enumDecl, Mangle::NoGenericParams | Mangle::Type)); 908 // } 909 // } 910 910 else funcFinder.otypeKeys.insert(Mangle::mangle(argType, Mangle::NoGenericParams | Mangle::Type)); 911 911 } -
src/ResolvExpr/ConversionCost.cc
rd4b37ab rd958834b 695 695 if ( const ast::Type * baseType = baseEnum->base ) { 696 696 cost = costCalc( baseType, dst, srcIsLvalue, symtab, env ); 697 // cost = Cost::safe; 697 698 } else { 698 699 (void)enumInstType; -
src/Validate/Autogen.cpp
rd4b37ab rd958834b 235 235 // Must visit children (enum constants) to add them to the symbol table. 236 236 if ( !enumDecl->body ) return; 237 238 // if ( auto enumBaseType = enumDecl->base ) { 239 // if ( auto enumBaseTypeAsStructInst = dynamic_cast<const ast::StructInstType *>(enumBaseType.get()) ) { 240 // const ast::StructDecl * structDecl = enumBaseTypeAsStructInst->base.get(); 241 // this->previsit( structDecl ); 242 // } 243 // } 237 244 238 245 ast::EnumInstType enumInst( enumDecl->name ); -
tests/enum_tests/structEnum.cfa
rd4b37ab rd958834b 2 2 3 3 struct Point { 4 int x;5 char y;4 int x; 5 char y; 6 6 }; 7 7 8 8 enum(Point) PointEnum { 9 first={10 100,11 'c'12 },13 second={14 200,15 'a'16 }9 first={ 10 100, 11 'c' 12 }, 13 second={ 14 200, 15 'a' 16 } 17 17 }; 18 19 PointEnum foo(PointEnum in) { 20 return in; 21 } 18 22 19 23 // The only valid usage 20 24 struct Point apple = first; 21 25 // Failed due to Qualified name is currently unimplemented. 22 //struct Point banana = PointEnum.first;26 struct Point banana = PointEnum.first; 23 27 24 28 int main() { 25 printf("%d %c\n", apple.x, apple.y); 26 // Failed; enumInstType is now not a real type and not instantiated. 27 // Not sure if we want that 28 // printf("%d %c\n", second.x, second.y); 29 return 0; 29 PointEnum vals = second; 30 PointEnum val2; 31 // P1 32 val2 = vals; 33 34 printf("%d %c\n", apple.x, apple.y); 35 // Failed; enumInstType is now not a real type and not instantiated. 36 // Not sure if we want that 37 // printf("%d %c\n", second.x, second.y); 38 return 0; 30 39 }
Note: See TracChangeset
for help on using the changeset viewer.