Concurrent Clean : CleanJ : eq_desc

どうやら、最後の砦は eq_desc だったらしい。
eq_descの第2引数の使い方を間違っていたようだ。
CodeGeneratorの対応する関数を見ると・・・

void code_eq_desc (char descriptor_name[],int arity,int a_offset)
{
	INSTRUCTION_GRAPH graph_1,graph_2,graph_3,graph_4;
	LABEL *descriptor;
	
	descriptor=enter_label (descriptor_name,DATA_LABEL);
	
	graph_1=s_get_a (a_offset);

#ifndef M68000
	graph_2=g_load_id (0,graph_1);
#else
	graph_2=g_load_des_id (DESCRIPTOR_OFFSET,graph_1);
#endif

	graph_3=g_load_des_i (descriptor,arity);
	graph_4=g_cmp_eq (graph_3,graph_2);
	
	s_push_b (graph_4);
}

g_load_des_i (descriptor,arity); で、Descriptorから ID を取り出すために arity を使っているらしい。
CleanJでは、何に対応するのか?

      • -

ひとまず、CleanNodeで、

  public static boolean eq_desc(CleanDescriptor d, int n, Object o)
    throws CleanException
  {
    return d == getDesc(o);// && d.eq_arity(n,getData(o));
  }

のように、コメントアウトして対応した。