/**
 * 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);
	}
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 4
0
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);} 
  } 
Exemplo n.º 5
0
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);
}