/** * Appends the passed `append_new_symbol` to the global symbol table. **/ void append_to_symbol_table(symtabEntry * append_new_symbol) { if (!theSymboltable) { theSymboltable = append_new_symbol; } else { append_symbol(append_new_symbol, theSymboltable); } }
void self_statement_If(If *v2548,OID v1741,OID v332) { GC_BIND; if (c_func_any(GC_OID(v2548->test)) == CTRUE) { princ_string(copy_string("if ")); (*Optimize.bool_exp)(GC_OID(v2548->test), Kernel.ctrue, v332); princ_string(copy_string("")); breakline_void(); princ_string(copy_string(" ")); if (INHERIT(OWNER(v2548->arg),Language._If)) new_block_void(); statement_any(GC_OID(v2548->arg),v1741,v332); if (INHERIT(OWNER(v2548->arg),Language._If)) close_block_void(); if ((Kernel._string == OWNER(v1741)) || (boolean_I_any(v2548->other) == CTRUE)) { OID v5013 = GC_OID(v2548->other); if (inherit_ask_class(OWNER(v5013),Language._If) != CTRUE) (Optimize.OPT->level = (Optimize.OPT->level+1)); princ_string(copy_string("else ")); statement_any(v5013,v1741,v332); princ_string(copy_string("")); if (inherit_ask_class(OWNER(v5013),Language._If) != CTRUE) (Optimize.OPT->level = (Optimize.OPT->level-1)); } } else { OID v1743 = GC_OID((*Generate.c_string)(Generate.PRODUCER->value, _oid_(append_symbol(gensym_void(),_string_(copy_string("I")))))); new_block_void(); interface_I_class(Kernel._boolean); princ_string(copy_string(" ")); princ_string(string_v(v1743)); princ_string(copy_string(";")); breakline_void(); statement_any(GC_OID(v2548->test),v1743,v332); princ_string(copy_string("")); breakline_void(); (Optimize.OPT->level = (Optimize.OPT->level+1)); princ_string(copy_string("if (")); princ_string(string_v(v1743)); princ_string(copy_string(" == ")); (*Generate.produce)(Generate.PRODUCER->value, Kernel.ctrue); princ_string(copy_string(") ")); statement_any(GC_OID(v2548->arg),v1741,v332); princ_string(copy_string("")); (Optimize.OPT->level = (Optimize.OPT->level-1)); if ((Kernel._string == OWNER(v1741)) || (boolean_I_any(v2548->other) == CTRUE)) { princ_string(copy_string("else ")); statement_any(GC_OID(v2548->other),v1741,v332); princ_string(copy_string("")); } close_block_void(); } GC_UNBIND;}
symtabEntry * new_variable(char * name, symtabEntryType type, symtabEntry * scope) { symtabEntry * symbol = new_symbol(); symbol->name = strdup(name); symbol->offset = scope->offset; symbol->type = type; symbol->vater = scope; if (type == INTEGER) { scope->offset += 4; } else if (type == REAL) { scope->offset += 8; } append_symbol(symbol, scope); return symbol; }
list * unfold_args_list(list *v1732) { GC_BIND; { list *Result ; { list * v3777; { { list * v7376 = list::empty(Kernel.emptySet); { int v1729 = 1; int v6663 = v1732->length; { OID gc_local; while ((v1729 <= v6663)) { if (c_func_any((*(v1732))[v1729]) != CTRUE) v7376->addFast(v1729); ++v1729; } } } v3777 = GC_OBJECT(list,v7376); } GC_OBJECT(list,v3777);} { bag *v_list; OID v_val; OID v1729,CLcount; v_list = v3777; Result = v_list->clone(); for (CLcount= 1; CLcount <= v_list->length; CLcount++) { v1729 = (*(v_list))[CLcount]; { Let * v2072 = ((Let *) GC_OBJECT(Let,new_object_class(Language._Let))); (v2072->var = Variable_I_symbol(append_symbol(gensym_void(),_string_(copy_string("UU"))),0,GC_OBJECT(ClaireType,c_type_sort_any((*(v1732))[v1729])))); (v2072->value = (*(v1732))[v1729]); add_I_property(Kernel.instances,Language._Let,11,_oid_(v2072)); v_val = _oid_(v2072); } (*((list *) Result))[CLcount] = v_val;} } } GC_UNBIND; return (Result);} }
DLL_EXPORT char *resolve_symbol_string(const char *text) { char *resstr; int curix,maxix; char cursym[MAX_SYMBOL_SIZE+1]; int cursymsize=0; int q1,q2; int i; /* Quick check - look for QUAL1 ('$') or QUAL2 ('(').. if not found, return the string as-is */ if(!strchr(text,SYMBOL_QUAL_1) || !strchr(text,SYMBOL_QUAL_2)) { /* Malloc anyway - the caller will free() */ resstr=malloc(strlen(text)+1); strcpy(resstr,text); return(resstr); } q1=0; q2=0; curix=0; maxix=0; resstr=NULL; for(i=0;text[i]!=0;i++) { if(q1) { if(text[i]==SYMBOL_QUAL_2) { q2=1; q1=0; continue; } q1=0; buffer_addchar_and_alloc(&resstr,SYMBOL_QUAL_1,&curix,&maxix); buffer_addchar_and_alloc(&resstr,text[i],&curix,&maxix); continue; } if(q2) { if(text[i]==SYMBOL_QUAL_3) { append_symbol(&resstr,cursym,&curix,&maxix); cursymsize=0; q2=0; continue; } if(cursymsize<MAX_SYMBOL_SIZE) { cursym[cursymsize++]=text[i]; cursym[cursymsize]=0; } continue; } if(text[i]==SYMBOL_QUAL_1) { q1=1; continue; } buffer_addchar_and_alloc(&resstr,text[i],&curix,&maxix); } if(!resstr) { /* Malloc anyway - the caller will free() */ resstr=malloc(strlen(text)+1); strcpy(resstr,text); } return(resstr); }