summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMorgan Deters <mdeters@cs.nyu.edu>2013-07-05 17:25:27 -0400
committerMorgan Deters <mdeters@cs.nyu.edu>2013-07-05 17:25:27 -0400
commit7e1aae3dc746f4b7df2f65fb373ffc26e1a0498a (patch)
treee8cdad3f2bc8ceb427f0acc5897af93afa80e97c
parent20e1247461c3b6be51c08d2d6104bd1aea9bc8c3 (diff)
Fix for a datatype parsing bug that Tim found.
-rw-r--r--src/parser/smt2/Smt2.g24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/parser/smt2/Smt2.g b/src/parser/smt2/Smt2.g
index 2dc022f0f..16b5bc4ea 100644
--- a/src/parser/smt2/Smt2.g
+++ b/src/parser/smt2/Smt2.g
@@ -1313,21 +1313,20 @@ sortSymbol[CVC4::Type& t, CVC4::parser::DeclarationCheck check]
}
| LPAREN_TOK symbol[name,CHECK_NONE,SYM_SORT] sortList[args] RPAREN_TOK
{
- if( check == CHECK_DECLARED || PARSER_STATE->isDeclared(name, SYM_SORT)) {
- if( name == "Array" ) {
- if( args.size() != 2 ) {
- PARSER_STATE->parseError("Illegal array type.");
- }
- t = EXPR_MANAGER->mkArrayType( args[0], args[1] );
- } else {
- t = PARSER_STATE->getSort(name, args);
+ if(name == "Array") {
+ if(args.size() != 2) {
+ PARSER_STATE->parseError("Illegal array type.");
}
- }else{
- //make unresolved type
+ t = EXPR_MANAGER->mkArrayType( args[0], args[1] );
+ } else if(check == CHECK_DECLARED ||
+ PARSER_STATE->isDeclared(name, SYM_SORT)) {
+ t = PARSER_STATE->getSort(name, args);
+ } else {
+ // make unresolved type
if(args.empty()) {
t = PARSER_STATE->mkUnresolvedType(name);
Debug("parser-param") << "param: make unres type " << name << std::endl;
- }else{
+ } else {
t = PARSER_STATE->mkUnresolvedTypeConstructor(name,args);
t = SortConstructorType(t).instantiate( args );
Debug("parser-param") << "param: make unres param type " << name << " " << args.size() << " "
@@ -1450,7 +1449,8 @@ selector[CVC4::DatatypeConstructor& ctor]
}
: symbol[id,CHECK_UNDECLARED,SYM_SORT] sortSymbol[t,CHECK_NONE]
{ ctor.addArg(id, t);
- Debug("parser-idt") << "selector: " << id.c_str() << std::endl;
+ Debug("parser-idt") << "selector: " << id.c_str()
+ << " of type " << t << std::endl;
}
;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback