void ESolver::BindType(const string& TypeName, const ESFixedTypeBase* Type) { if (LookupType(TypeName) != nullptr) { throw TypeException((string)"Error: Attempted to rebind previously bound type name \"" + TypeName + "\""); } TypeMgr->BindType(TypeName, Type); }
BOOL Binder::IsType(TypeHandle th, BinderTypeID id) { if (RawGetType(id) == th) return TRUE; if (!m_pTypeHandles[id-1].IsNull()) return FALSE; else return LookupType(id, FALSE) == th; }
TypeHandle Binder::FetchType(BinderTypeID id) { THROWSCOMPLUSEXCEPTION(); _ASSERTE(id != TYPE__NIL); _ASSERTE(id <= m_cTypeHandles); TypeHandle th = m_pTypeHandles[id-1]; if (th.IsNull()) th = LookupType(id); return th; }
bool SymbolTable::AddType(const char *name, const Type *type, SourcePos pos) { const Type *t = LookupType(name); if (t != NULL && CastType<UndefinedStructType>(t) == NULL) { // If we have a previous declaration of anything other than an // UndefinedStructType with this struct name, issue an error. If // we have an UndefinedStructType, then we'll fall through to the // code below that adds the definition to the type map. Error(pos, "Ignoring redefinition of type \"%s\".", name); return false; } types[name] = type; return true; }
/** Tokenize data. */ TokenNode *Tokenize(const char *line, const char *fileName) { AttributeNode *ap; TokenNode *current; char *temp; unsigned int x; unsigned int offset; unsigned int lineNumber; char inElement; char found; head = NULL; current = NULL; inElement = 0; lineNumber = 1; x = 0; /* Skip any initial white space. */ while(IsSpace(line[x], &lineNumber)) { x += 1; } /* Skip any XML stuff. */ if(!strncmp(line + x, "<?", 2)) { while(line[x]) { if(line[x] == '\n') { lineNumber += 1; } if(!strncmp(line + x, "?>", 2)) { x += 2; break; } x += 1; } } /* Process the XML data. */ while(line[x]) { /* Skip comments and white space. */ do { /* Skip white space. */ while(IsSpace(line[x], &lineNumber)) { x += 1; } /* Skip comments */ found = 0; if(!strncmp(line + x, "<!--", 4)) { while(line[x]) { if(line[x] == '\n') { lineNumber += 1; } if(!strncmp(line + x, "-->", 3)) { x += 3; found = 1; break; } x += 1; } } } while(found); switch(line[x]) { case '<': x += 1; if(line[x] == '/') { /* Close tag. */ x += 1; temp = ReadElementName(line + x); if(current) { if(JLIKELY(temp)) { if(JUNLIKELY(current->type != LookupType(temp, NULL))) { Warning(_("%s[%u]: close tag \"%s\" does not " "match open tag \"%s\""), fileName, lineNumber, temp, GetTokenName(current)); } } else { Warning(_("%s[%u]: unexpected and invalid close tag"), fileName, lineNumber); } current = current->parent; } else { if(temp) { Warning(_("%s[%u]: close tag \"%s\" without open tag"), fileName, lineNumber, temp); } else { Warning(_("%s[%u]: invalid close tag"), fileName, lineNumber); } } if(temp) { x += strlen(temp); Release(temp); } } else { /* Open tag. */ current = CreateNode(current, fileName, lineNumber); temp = ReadElementName(line + x); if(JLIKELY(temp)) { x += strlen(temp); LookupType(temp, current); Release(temp); } else { Warning(_("%s[%u]: invalid open tag"), fileName, lineNumber); } } inElement = 1; break; case '/': /* End of open/close tag. */ if(inElement) { x += 1; if(JLIKELY(line[x] == '>' && current)) { x += 1; current = current->parent; inElement = 0; } else { Warning(_("%s[%u]: invalid tag"), fileName, lineNumber); } } else { goto ReadDefault; } break; case '>': /* End of open tag. */ x += 1; inElement = 0; break; default: ReadDefault: if(inElement) { /* In the open tag; read attributes. */ ap = CreateAttribute(current); ap->name = ReadElementName(line + x); if(ap->name) { x += strlen(ap->name); if(line[x] == '=') { x += 1; } if(line[x] == '\"') { x += 1; } ap->value = ReadAttributeValue(line + x, fileName, &offset, &lineNumber); x += offset; if(line[x] == '\"') { x += 1; } } } else { /* In tag body; read text. */ temp = ReadElementValue(line + x, fileName, &offset, &lineNumber); x += offset; if(temp) { if(current) { if(current->value) { current->value = Reallocate(current->value, strlen(current->value) + strlen(temp) + 1); strcat(current->value, temp); Release(temp); } else { current->value = temp; } } else { if(JUNLIKELY(temp[0])) { Warning(_("%s[%u]: unexpected text: \"%s\""), fileName, lineNumber, temp); } Release(temp); } } } break; } } return head; }
bool OBResidueData::AssignBonds(OBMol &mol,OBBitVec &bv) { if (!_init) Init(); OBAtom *a1,*a2; OBResidue *r1,*r2; vector<OBAtom*>::iterator i,j; vector3 v; int bo; string skipres = ""; // Residue Number to skip string rname = ""; //assign residue bonds for (a1 = mol.BeginAtom(i);a1;a1 = mol.NextAtom(i)) { r1 = a1->GetResidue(); if (r1 == NULL) // atoms may not have residues continue; if (skipres.length() && r1->GetNumString() == skipres) continue; if (r1->GetName() != rname) { skipres = SetResName(r1->GetName()) ? "" : r1->GetNumString(); rname = r1->GetName(); } //assign bonds for each atom for (j=i,a2 = mol.NextAtom(j);a2;a2 = mol.NextAtom(j)) { r2 = a2->GetResidue(); if (r2 == NULL) // atoms may not have residues continue; if (r1->GetNumString() != r2->GetNumString()) break; if (r1->GetName() != r2->GetName()) break; if (r1->GetChain() != r2->GetChain()) break; // Fixes PR#2889763 - Fabian if ((bo = LookupBO(r1->GetAtomID(a1),r2->GetAtomID(a2)))) { // Suggested by Liu Zhiguo 2007-08-13 // for predefined residues, don't perceive connection // by distance // v = a1->GetVector() - a2->GetVector(); // if (v.length_2() < 3.5) //check by distance mol.AddBond(a1->GetIdx(),a2->GetIdx(),bo); } } } int hyb; string type; //types and hybridization rname = ""; // name of current residue skipres = ""; // don't skip any residues right now for (a1 = mol.BeginAtom(i);a1;a1 = mol.NextAtom(i)) { if (a1->GetAtomicNum() == OBElements::Oxygen && !a1->GetValence()) { a1->SetType("O3"); continue; } if (a1->GetAtomicNum() == OBElements::Hydrogen) { a1->SetType("H"); continue; } //***valence rule for O- if (a1->GetAtomicNum() == OBElements::Oxygen && a1->GetValence() == 1) { OBBond *bond; bond = (OBBond*)*(a1->BeginBonds()); if (bond->GetBO() == 2) { a1->SetType("O2"); a1->SetHyb(2); } else if (bond->GetBO() == 1) { // Leave the protonation/deprotonation to phmodel.txt a1->SetType("O3"); a1->SetHyb(3); // PR#3203039 -- Fix from Magnus Lundborg // a1->SetFormalCharge(0); } continue; } r1 = a1->GetResidue(); if (r1 == NULL) continue; // atoms may not have residues if (skipres.length() && r1->GetNumString() == skipres) continue; if (r1->GetName() != rname) { // if SetResName fails, skip this residue skipres = SetResName(r1->GetName()) ? "" : r1->GetNumString(); rname = r1->GetName(); } if (LookupType(r1->GetAtomID(a1),type,hyb)) { a1->SetType(type); a1->SetHyb(hyb); } else // try to figure it out by bond order ??? {} } return(true); }
/** Tokenize a data. */ TokenNode *Tokenize(const char *line, const char *fileName) { TokenNode *np; AttributeNode *ap; char *temp; int inElement; int x; int found; int lineNumber; head = NULL; current = NULL; inElement = 0; lineNumber = 1; x = 0; /* Skip any initial white space */ while(IsSpace(line[x], &lineNumber)) ++x; /* Skip any XML stuff */ if(!strncmp(line + x, "<?", 2)) { while(line[x]) { if(line[x] == '\n') { ++lineNumber; } if(!strncmp(line + x, "?>", 2)) { x += 2; break; } ++x; } } while(line[x]) { do { while(IsSpace(line[x], &lineNumber)) ++x; /* Skip comments */ found = 0; if(!strncmp(line + x, "<!--", 4)) { while(line[x]) { if(line[x] == '\n') { ++lineNumber; } if(!strncmp(line + x, "-->", 3)) { x += 3; found = 1; break; } ++x; } } } while(found); switch(line[x]) { case '<': ++x; if(line[x] == '/') { ++x; temp = ReadElementName(line + x); if(current) { if(temp) { if(current->type != LookupType(temp, NULL)) { Warning("%s[%d]: close tag \"%s\" does not " "match open tag \"%s\"", fileName, lineNumber, temp, GetTokenName(current)); } } else { Warning("%s[%d]: unexpected and invalid close tag", fileName, lineNumber); } current = current->parent; } else { if(temp) { Warning("%s[%d]: close tag \"%s\" without open " "tag", fileName, lineNumber, temp); } else { Warning("%s[%d]: invalid close tag", fileName, lineNumber); } } if(temp) { x += strlen(temp); Release(temp); } } else { np = current; current = NULL; np = CreateNode(np, fileName, lineNumber); temp = ReadElementName(line + x); if(temp) { x += strlen(temp); LookupType(temp, np); Release(temp); } else { Warning("%s[%d]: invalid open tag", fileName, lineNumber); } } inElement = 1; break; case '/': if(inElement) { ++x; if(line[x] == '>' && current) { ++x; current = current->parent; inElement = 0; } else { Warning("%s[%d]: invalid tag", fileName, lineNumber); } } else { goto ReadDefault; } break; case '>': ++x; inElement = 0; break; default: ReadDefault: if(inElement) { ap = CreateAttribute(current); ap->name = ReadElementName(line + x); if(ap->name) { x += strlen(ap->name); if(line[x] == '=') { ++x; } if(line[x] == '\"') { ++x; } ap->value = ReadAttributeValue(line + x, fileName, &lineNumber); if(ap->value) { x += strlen(ap->value); } if(line[x] == '\"') { ++x; } } } else { temp = ReadElementValue(line + x, fileName, &lineNumber); if(temp) { x += strlen(temp); if(current) { if(current->value) { current->value = Reallocate(current->value, strlen(current->value) + strlen(temp) + 1); strcat(current->value, temp); Release(temp); } else { current->value = temp; } } else { if(temp[0]) { Warning("%s[%d]: unexpected text: \"%s\"", fileName, lineNumber, temp); } Release(temp); } } } break; } } return head; }
static void ScanConflicts(char *path, unsigned inx, int argc, char **argv) { DIR *dp; struct dirent *de; struct stat sb; int j; unsigned k; #if SYS_MSDOS || SYS_OS2 || SYS_WIN32 || SYS_OS2_EMX char save_wd[MAXPATHLEN]; #endif /* * When scanning a directory, we first chdir to it, mostly to make * the scan+stat work faster, but also because some systems don't * scan properly otherwise. * * MSDOS and OS/2 are a little more complicated, because each drive * has its own current directory. */ #if SYS_MSDOS || SYS_OS2 || SYS_WIN32 || SYS_OS2_EMX (void) strcpy(save_wd, dot); if (!strcmp(".", path)) { path = dot; } else if (!same_drive(dot, path)) { if (!set_drive(path)) return; getwd(save_wd); } #endif if (v_opt > 2) printf("ScanConflicts \"%s\"\n", path); if (set_directory(path) && (dp = opendir(path)) != NULL) { while ((de = readdir(dp)) != NULL) { register type_t ok = 0; int found = FALSE; char buffer[MAXPATHLEN]; char *the_name; char *the_NAME; if (do_blips) blip('.'); (void) sprintf(buffer, "%.*s", (int) NAMLEN(de), de->d_name); the_name = MakeString(DOS_upper(buffer)); the_NAME = ToCompare(the_name); /* If arguments are given, restrict search to them */ if (argc > optind) { for (j = optind; j < argc; j++) { if (SameName(argv[j], the_name)) { found = TRUE; break; } } if (!found) continue; } /* Verify that the name is a file, and executable */ if (stat(the_name, &sb) < 0) continue; if ((sb.st_mode & S_IFMT) != S_IFREG) continue; #if SYS_UNIX || SYS_OS2 || SYS_OS2_EMX if (access(the_name, acc_mask) < 0) continue; ok = 1; #endif if (FileTypes != 0) { if ((ok = LookupType(the_name)) == 0) continue; } /* Find the name in our array of all names */ found = FALSE; for (k = 0; k < total; k++) { if (SameName(inpath[k].ip_NAME, the_NAME)) { FoundNode(&inpath[k], inx); found = TRUE; break; } } /* If not there, add it */ if (found) { if (the_NAME != the_name) { FreeString(the_NAME); } } else { if (!(total & CHUNK)) { size_t need = (((total * 3) / 2) | CHUNK) + 1; if (inpath != 0) inpath = TypeRealloc(INPATH, inpath, need); else inpath = TypeAlloc(INPATH, need); } j = (int) total++; inpath[j].ip_name = the_name; inpath[j].ip_NAME = the_NAME; inpath[j].node = TypeAlloc(NODE, path_len); FoundNode(&inpath[j], inx); } if (v_opt > 2) { (void) printf("%c %s%c%s\n", found ? '+' : '*', path, PATHNAME_SEP, buffer); } } (void) closedir(dp); } #if SYS_MSDOS || SYS_OS2 || SYS_WIN32 || SYS_OS2_EMX if (strcmp(dot, save_wd)) { chdir(save_wd); } #endif (void) set_directory(dot); }