+
+
+/*@only@*/ constraintTerm constraintTerm_undump ( FILE *f)
+{
+ constraintTermType kind;
+ constraintTerm ret;
+
+ uentry ue;
+
+ char *str;
+ char *os;
+
+ str = mstring_create (MAX_DUMP_LINE_LENGTH);
+ os = str;
+ str = fgets (os, MAX_DUMP_LINE_LENGTH, f);
+
+ kind = (constraintTermType) reader_getInt(&str);
+ str = fgets(os, MAX_DUMP_LINE_LENGTH, f);
+
+ switch (kind)
+ {
+
+ case SREF:
+ {
+ sRef s;
+ char * term;
+ term = reader_getWord(&str);
+
+ if (strcmp (term, "Result") == 0 )
+ {
+ s = sRef_makeResult (ctype_unknown);
+ }
+ else if (strcmp (term, "Param" ) == 0 )
+ {
+ int param;
+ char *str2, *ostr2;
+
+ ctype t;
+
+ reader_checkChar(&str, ' ');
+ str2 = reader_getWord(&str);
+ param = reader_getInt(&str);
+
+ ostr2 = str2;
+ t = ctype_undump(&str2) ;
+ s = sRef_makeParam (param, t, stateInfo_makeLoc (g_currentloc));
+ free (ostr2);
+ }
+ else //This must be an identified that we can search for
+ // in usymTab
+ {
+ cstring termStr = cstring_makeLiteralTemp(term);
+
+ ue = usymtab_lookup (termStr);
+ s = uentry_getSref(ue);
+ }
+
+ ret = constraintTerm_makesRef(s);
+
+ free(term);
+ }
+ break;
+
+ case EXPRNODE:
+ {
+ sRef s;
+ char * term;
+ cstring termStr;
+
+ term = reader_getWord(&str);
+ //This must be an identifier that we can search for
+ // in usymTab
+ termStr = cstring_makeLiteralTemp(term);
+
+ ue = usymtab_lookup (termStr);
+ s = uentry_getSref(ue);
+ ret = constraintTerm_makesRef(s);
+
+ free (term);
+ }
+ break;
+
+
+ case INTLITERAL:
+ {
+ int i;
+
+ i = reader_getInt(&str);
+ ret = constraintTerm_makeIntLiteral (i);
+ }
+ break;
+
+ default:
+ BADEXIT;
+ }
+ free (os);
+
+ return ret;
+}
+
+
+
+