diff options
author | Rustan Leino <unknown> | 2015-07-16 15:37:50 -0700 |
---|---|---|
committer | Rustan Leino <unknown> | 2015-07-16 15:37:50 -0700 |
commit | 8f18456b7e89412855abc9993447512bdb835da9 (patch) | |
tree | 0af8a1b93a23abc48a23ef240f04a48828a95ebe /Source/Dafny/Dafny.atg | |
parent | f235dfbc792bb885f3c76e4267658c1a9ef838d8 (diff) |
Fixed bugs in the parsing of explicit type arguments.
Fixed resolution bug where some type arguments were not checked to have been determined.
Fixed resolution bugs where checking for equality-supporting types was missing.
Diffstat (limited to 'Source/Dafny/Dafny.atg')
-rw-r--r-- | Source/Dafny/Dafny.atg | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/Source/Dafny/Dafny.atg b/Source/Dafny/Dafny.atg index 7b51fb5e..1710be05 100644 --- a/Source/Dafny/Dafny.atg +++ b/Source/Dafny/Dafny.atg @@ -299,6 +299,9 @@ bool IsGenericInstantiation() { return false;
}
}
+/* Returns true if the next thing is of the form:
+ * "<" Type { "," Type } ">"
+ */
bool IsTypeList(ref IToken pt) {
if (pt.kind != _openAngleBracket) {
return false;
@@ -306,6 +309,10 @@ bool IsTypeList(ref IToken pt) { pt = scanner.Peek();
return IsTypeSequence(ref pt, _closeAngleBracket);
}
+/* Returns true if the next thing is of the form:
+ * Type { "," Type }
+ * followed by an endBracketKind.
+ */
bool IsTypeSequence(ref IToken pt, int endBracketKind) {
while (true) {
if (!IsType(ref pt)) {
@@ -343,7 +350,7 @@ bool IsType(ref IToken pt) { case _map:
case _imap:
pt = scanner.Peek();
- return IsTypeList(ref pt);
+ return pt.kind != _openAngleBracket || IsTypeList(ref pt);
case _ident:
while (true) {
// invariant: next token is an ident
@@ -362,6 +369,11 @@ bool IsType(ref IToken pt) { }
case _openparen:
pt = scanner.Peek();
+ if (pt.kind == _closeparen) {
+ // end of type list
+ pt = scanner.Peek();
+ return true;
+ }
return IsTypeSequence(ref pt, _closeparen);
default:
return false;
|