diff --git a/lib/Adt/AdtDialect.cpp b/lib/Adt/AdtDialect.cpp index 099c6c38ac36a533f13ed6a59b54e348be6abd82..19f952dff4a9b20f8fe9ca835836edd839ed1455 100644 --- a/lib/Adt/AdtDialect.cpp +++ b/lib/Adt/AdtDialect.cpp @@ -76,7 +76,7 @@ public: SMLoc typeLoc = parser.getCurrentLocation(); SmallVector<TypeSource> fieldTys; TypeSource someType; - if (parser.parseCommaSeparatedList(DialectAsmParser::Delimiter::OptionalLessGreater, + if (parser.parseCommaSeparatedList(DialectAsmParser::Delimiter::LessGreater, [&]() -> ParseResult { /*if (parser.parseType(someType)) return failure();*/ @@ -85,7 +85,7 @@ public: return success(); })) { - parser.emitError(typeLoc, "error "); + parser.emitError(typeLoc, "failed to parse a list of field types"); return ErrorSrcType(); } @@ -101,10 +101,10 @@ public: BasicSrcType(mlir::Type baseTy) : _baseTy(baseTy) {} static TypeSource parseType(::mlir::DialectAsmParser &parser) { - SMLoc typeLoc = parser.getCurrentLocation(); mlir::Type baseTy; if (parser.parseLess() || parser.parseType(baseTy) || parser.parseGreater()) { - parser.emitError(typeLoc, "error while parsing base type"); + SMLoc loc = parser.getCurrentLocation(); + parser.emitError(loc, "error while parsing base type"); return ErrorSrcType(); } return BasicSrcType(baseTy); @@ -121,14 +121,11 @@ public: SumSrcType(SmallVector<Variant> variants) : _variants(variants) {} static TypeSource parseType(::mlir::DialectAsmParser &parser) { - SMLoc typeLoc = parser.getCurrentLocation(); SmallVector<Variant> variants; Variant someVariant; - if (parser.parseCommaSeparatedList(DialectAsmParser::Delimiter::OptionalLessGreater, + if (parser.parseCommaSeparatedList(DialectAsmParser::Delimiter::LessGreater, [&]() -> ParseResult { - if (failed(parser.parseKeyword(&someVariant.tag))) - return failure(); - if (parser.parseColon()) + if (parser.parseKeyword(&someVariant.tag) || parser.parseColon()) return failure(); /*if (parser.parseType(someVariant.ty)) return failure();*/ @@ -137,7 +134,7 @@ public: return success(); })) { - parser.emitError(typeLoc, "error "); + parser.emitError(parser.getCurrentLocation(), "failed to parse a list of variants"); return ErrorSrcType(); } @@ -146,24 +143,26 @@ public: }; TypeSource TypeSource::parseType(::mlir::DialectAsmParser &parser) { - SMLoc typeLoc = parser.getCurrentLocation(); StringRef keyword; if (/*parser.parseLess() ||*/ parser.parseKeyword(&keyword)) { - parser.emitError(typeLoc, "error while parsing type keyword"); + parser.emitError(parser.getCurrentLocation(), "error while parsing type keyword"); return ErrorSrcType(); } TypeSource ty; if (keyword == "product") { + llvm::errs() << "This is a product type.\n"; ty = ProductSrcType::parseType(parser); } else if (keyword == "sum") { + llvm::errs() << "This is a sum type.\n"; ty = SumSrcType::parseType(parser); } else if (keyword == "basic") { + llvm::errs() << "This is a basic type.\n"; ty = BasicSrcType::parseType(parser); } else { - parser.emitError(typeLoc, "hey, that's not OK"); + parser.emitError(parser.getCurrentLocation(), "hey, that's not OK"); return ErrorSrcType(); } /*if (parser.parseGreater()) @@ -173,10 +172,9 @@ TypeSource TypeSource::parseType(::mlir::DialectAsmParser &parser) { TypeMem TypeMem::parseType(::mlir::DialectAsmParser &parser){ - SMLoc typeLoc = parser.getCurrentLocation(); StringRef keyword; if (parser.parseKeyword(&keyword)) { - parser.emitError(typeLoc, "error "); + parser.emitError(parser.getCurrentLocation(), "failed to parse a keyword"); return TypeMem(); } if (keyword == "i") @@ -186,7 +184,7 @@ TypeMem TypeMem::parseType(::mlir::DialectAsmParser &parser){ if (keyword == "Ptr") return PtrMemType::parseType(parser); else { - parser.emitError(typeLoc, "error "); + parser.emitError(parser.getCurrentLocation(), "unknown keyword"); return TypeMem(); } } @@ -194,9 +192,8 @@ TypeMem TypeMem::parseType(::mlir::DialectAsmParser &parser){ TypeMem IntMemType::parseType(::mlir::DialectAsmParser &parser){ IntMemType memType; int64_t size; - SMLoc typeLoc = parser.getCurrentLocation(); if (parser.parseInteger(size)){ - parser.emitError(typeLoc, "error "); + parser.emitError(parser.getCurrentLocation(), "failed to parse an integer size"); return memType; } memType.setWidth(size); @@ -206,9 +203,8 @@ TypeMem IntMemType::parseType(::mlir::DialectAsmParser &parser){ TypeMem WordMemType::parseType(::mlir::DialectAsmParser &parser) { WordMemType memType; int64_t size; - SMLoc typeLoc = parser.getCurrentLocation(); if (parser.parseInteger(size)){ - parser.emitError(typeLoc, "error "); + parser.emitError(parser.getCurrentLocation(), "failed to parse a word size"); return memType; } memType.setWidth(size); @@ -222,10 +218,9 @@ TypeMem PtrMemType::parseType(::mlir::DialectAsmParser &parser) { mlir::Type AdtDialect::parseType(::mlir::DialectAsmParser &parser) const { StringRef keyword; - SMLoc typeLoc = parser.getCurrentLocation(); llvm::errs() << "I am parsing a type!\n"; if (parser.parseKeyword(&keyword) || parser.parseLess()) { - parser.emitError(typeLoc, "error "); + parser.emitError(parser.getCurrentLocation(), "failed to parse <type"); return Type(); } else if (keyword == "type") { @@ -233,7 +228,7 @@ mlir::Type AdtDialect::parseType(::mlir::DialectAsmParser &parser) const { TypeSource adtTypeSrc = TypeSource::parseType(parser); llvm::errs() << "I parsed a source type and didn't die.\n"; if(parser.parseKeyword(&keyword) || keyword != "representedAs") { - parser.emitError(typeLoc, "error "); + parser.emitError(parser.getCurrentLocation(), "failed to parse representedAs"); return Type(); } else { @@ -243,7 +238,7 @@ mlir::Type AdtDialect::parseType(::mlir::DialectAsmParser &parser) const { AdtType ty = AdtType::get(parser.getContext(), adtTypeSrc, adtTypeMem); llvm::errs() << "I built an AdtType.\n"; if (parser.parseGreater()) { - parser.emitError(typeLoc, "error"); + parser.emitError(parser.getCurrentLocation(), "failed to parse >"); return Type(); } llvm::errs() << "Bye!\n"; @@ -251,7 +246,7 @@ mlir::Type AdtDialect::parseType(::mlir::DialectAsmParser &parser) const { } } else { - parser.emitError(typeLoc, "error "); + parser.emitError(parser.getCurrentLocation(), "failed to parse an src-mem type pair"); return Type(); } } diff --git a/test/Adt/Dummy.mlir b/test/Adt/Dummy.mlir index 18da9c03c0f47fa36e67f3783617bd98343503ec..15377cb67c1169138b0db83aae9a55ebba501965 100644 --- a/test/Adt/Dummy.mlir +++ b/test/Adt/Dummy.mlir @@ -1,2 +1,3 @@ !ty = !adt.type<basic<i64> representedAs i 64> +!prodty = !adt.type<product<basic<i32>, basic<i32>> representedAs Word 1> %1 = "adt.dummy"() : () -> !ty diff --git a/test/Adt/Zarith.mlir b/test/Adt/Zarith.mlir index 423bcccf8c7a5df71bea89db98387b3118d30ae6..0b153cc9b8d86d18a05382d0fe57dd139c416364 100644 --- a/test/Adt/Zarith.mlir +++ b/test/Adt/Zarith.mlir @@ -1,2 +1,2 @@ !integer = !adt.type<basic<i64> representedAs i 64> -!sumtype = !adt.type<sum<Big:!integer,Small:!integer> representedAs Word 128> +!sumtype = !adt.type<sum<Big:basic<i64>,Small:basic<i64>> representedAs Word 128>