diff options
| author | YONGH\yongh <yonghe@outlook.com> | 2017-11-02 19:21:15 -0400 |
|---|---|---|
| committer | YONGH\yongh <yonghe@outlook.com> | 2017-11-02 19:21:15 -0400 |
| commit | d5e2319c33115d0241dd9d2047c0a5f029553dde (patch) | |
| tree | b89aef27f2330e7c568b0f799f0902015fdd4f18 /source/slang/parser.cpp | |
| parent | e2b97607977977fd2dbe298c2bb4512f4715dd4c (diff) | |
work inprogress
Diffstat (limited to 'source/slang/parser.cpp')
| -rw-r--r-- | source/slang/parser.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/source/slang/parser.cpp b/source/slang/parser.cpp index 224450a66..bf85356db 100644 --- a/source/slang/parser.cpp +++ b/source/slang/parser.cpp @@ -2113,7 +2113,30 @@ namespace Slang auto nameToken = parser->ReadToken(TokenType::Identifier); assocTypeDecl->nameAndLoc = NameLoc(nameToken); assocTypeDecl->loc = nameToken.loc; - parseOptionalInheritanceClause(parser, assocTypeDecl.Ptr()); + if (AdvanceIf(parser, TokenType::Colon)) + { + while (!parser->tokenReader.IsAtEnd()) + { + auto paramConstraint = new GenericTypeConstraintDecl(); + parser->FillPosition(paramConstraint); + + auto paramType = DeclRefType::Create( + parser->getSession(), + DeclRef<Decl>(assocTypeDecl, nullptr)); + + auto paramTypeExpr = new SharedTypeExpr(); + paramTypeExpr->loc = assocTypeDecl->loc; + paramTypeExpr->base.type = paramType; + paramTypeExpr->type = QualType(getTypeType(paramType)); + + paramConstraint->sub = TypeExp(paramTypeExpr); + paramConstraint->sup = parser->ParseTypeExp(); + + AddMember(assocTypeDecl, paramConstraint); + if (!AdvanceIf(parser, TokenType::Comma)) + break; + } + } parser->ReadToken(TokenType::Semicolon); return assocTypeDecl; } |
