Example #1
0
	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;
	}
Example #2
0
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 );
    }
}
Example #3
0
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;
    }
    

}
Example #5
0
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
}