NodePtr parseTerm() { auto ret = std::make_shared<ConcatenateNode>(); ret->addSibling(parseFactor()); auto p = reader.peek(); while (p != '\0' && p != '|' && p != ')') { ret->addSibling(parseFactor()); p = reader.peek(); } return ret; }
static void initP5TimingSegs( void ) { PC_SEGMENT *seg; PC_SEGMENT *sib; if( TargetSwitches & (P5_PROFILING|NEW_P5_PROFILING) ) { seg = segmentAllocRom( TS_SEG_TIB, SEG_PROF_BEG ); sib = segmentAllocRW( TS_SEG_TI, SEG_PROF_REF ); addSibling( seg, sib ); sib = segmentAllocRom( TS_SEG_TIE, SEG_PROF_END ); addSibling( seg, sib ); _markUsed( seg, TRUE ); } }
void MenuConf::addHotkey(ItemData* data, Hotkey* hotkey) { if(data->hotkeys == NULL) { data->hotkeys = hotkey; } else { addSibling(data->hotkeys, hotkey); } }
bool CTree::addSibling(char ch) { CTree *sibling = new CTree(ch); // creates new CTree object if (addSibling(sibling)) { return true; } else { delete sibling; // deletes sibling if not added return false; } }
void SegmentInit( // SEGMENT: INITIALIZATION char *code_seg_name ) // - name of data segment { PC_SEGMENT *seg; PC_SEGMENT *sib; if( CompFlags.dll_subsequent ) { flags.in_back_end = FALSE; seg_list = NULL; dgroup_size = 0; memset( &code_def_seg, 0, sizeof( code_def_seg ) ); memset( &data_def_seg, 0, sizeof( data_def_seg ) ); seg_max = SEG_NULL; #if _INTEL_CPU seg_code_comdat = SEG_NULL; #endif } seg_import = -1; // code seg initDefaultCodeSeg( code_seg_name ); // string literal data seg segmentAlloc( TS_SEG_CONST, NULL, SEG_CONST, SGAT_DATA_CON1, SA_IN_DGROUP ); // other R/O data seg segmentAllocRom( TS_SEG_CONST2, SEG_CONST2 ); // r/w data seg initDefaultDataSeg(); // thread-local storage seg = segmentAlloc( TS_SEG_TLSB, TS_SEG_TLS_CLASS, SEG_TLS_BEG, SGAT_TLS_LIMIT, SA_IN_DGROUP ); sib = segmentAlloc( TS_SEG_TLS, TS_SEG_TLS_CLASS, SEG_TLS, SGAT_TLS_DATA, SA_IN_DGROUP ); addSibling( seg, sib ); sib = segmentAlloc( TS_SEG_TLSE, TS_SEG_TLS_CLASS, SEG_TLS_END, SGAT_TLS_LIMIT, SA_IN_DGROUP ); addSibling( seg, sib ); // bss segmentAlloc( TS_SEG_BSS, NULL, SEG_BSS, SGAT_BSS, SA_IN_DGROUP ); // profiling data initP5TimingSegs(); // init data seg = segmentAllocRom( TS_SEG_XIB, SEG_INIT_BEG ); sib = segmentAllocRW( TS_SEG_XI, SEG_INIT_REF ); addSibling( seg, sib ); sib = segmentAllocRom( TS_SEG_XIE, SEG_INIT_END ); addSibling( seg, sib ); // fini data seg = segmentAllocRom( TS_SEG_YIB, SEG_FINI_BEG ); sib = segmentAllocRW( TS_SEG_YI, SEG_FINI_REF ); addSibling( seg, sib ); sib = segmentAllocRom( TS_SEG_YIE, SEG_FINI_END ); addSibling( seg, sib ); // stack segmentAlloc( TS_SEG_STACK, NULL, SEG_STACK, SGAT_STACK, SA_IN_DGROUP ); }
bool CTree::addChild(CTree *root) { if ((kids == NULL) && (prev == NULL)) { // at the root CTree * child = root; child->prev = this; kids = child; return true; } else if (data == root->data) { // data is equal return false; } else { if (addSibling(root)) { // error checking done in addSibling(root) return true; }; if (kids == NULL) { return false; // reaches end of tree } return kids->addChild(root); // calls addChild(root) on the next child } return false; // defaut returns false }