Ejemplo n.º 1
0
static uint8_t *compile1(struct dict *d, uint16_t dn, uint8_t *pc) {
        uint16_t **p=d->def;
	
	print_atom(dn);
	putchar('[');
        for(;*p;p++) {
		uint16_t *def=*p;
                print_atom(def[2]);
		putchar(' ');
		
#ifdef DEBUG
                putchar('\n');
                putchar(' ');
                putchar(' ');
                putchar(' ');
#endif

		if(def[1]==makeatom(0,0x060f121408LL)) { // forth
			pc=compile_def(pc,def,d,dn);
		} else if(def[1]==makeatom(0,0x04090314LL)) { // dict
			uint16_t *def=*p;
			if(d!=(struct dict *)(def+4)) {
				pc=compile1((struct dict *)(def+4),def[2],pc);
			}
		}
        }
	putchar(']');
	putchar(' ');
	return pc;
}
Ejemplo n.º 2
0
void compile() {
	printf("compile: ");
	memset(comp,0,sizeof(comp));
	memset(caddrs,0,sizeof(caddrs));
	memset(backs,0,sizeof(backs));
	compile1(dict,makeatom(0,0x030f1205),comp);
	checkbackrefs();
	checkcaddrs();
	printf("done.\n");
}
Ejemplo n.º 3
0
PRIVATE_STATIC void
out_acc_subscript(CExpr *subscript, CExpr *parent)
{
  if(EXPR_CODE(subscript) != EC_UNDEF){
    compile1(subscript, parent);
  }else{
    CExpr *lower = exprListHeadData(subscript);
    if(! EXPR_ISNULL(lower)){
        compile1(lower, parent);
    }

    if(EXPR_L_SIZE(subscript) > 1){
      CExpr *length = exprListNextNData(subscript, 1);
      if(! EXPR_ISNULL(length)){
          compile1(length, parent);
      }
    }
  }
}
Ejemplo n.º 4
0
PRIVATE_STATIC void
compile_acc_arrayRef(CExprOfBinaryNode *arrayRef, CExpr *parent)
{
    CExpr *arrayExpr = arrayRef->e_nodes[0];
    CExpr *subscripts = arrayRef->e_nodes[1];

    compile1(arrayExpr, parent);

    CCOL_DListNode *ite;
    EXPR_FOREACH(ite, subscripts){
      CExpr *node = EXPR_L_DATA(ite);
      out_acc_subscript(node, parent);
    }