【发布时间】:2020-05-30 17:41:20
【问题描述】:
我有以下设置,我正在尝试通过代码的编译类型检查,最好进行最少的修改,因为代码是由工具生成的,而不是手动生成的。
我认为问题是我需要为 M_TEST_COLL 中的 T_MAX_LATTICE[T] 或 T_IntegerMaxLattice 提出一个更好的定义。
代码有点大,所以我不能在这里发布整个代码,但我把 repo URL 放在了底部。我正在努力可视化类型层次结构。
我知道这个问题太笼统了,但我正在寻找的是能够在不使用取消选中强制转换和对运行时代码(或 basic.handcode.scala)的最小修改的情况下编译代码
错误(1 和 2):
Type mismatch. Required:
C_NUMERIC [ T_IntegerMaxLattice ]
Found: M_MAX_LATTICE [ T_Integer ]
Type mismatch. Required:
C_NUMERIC [ T_IntegerMaxLattice ]
Found: M_MAX_LATTICE [ T_Integer ]
生成的代码:
问题 #1:
class M_TEST_COLL[T_T](name : String,val t_T : C_TYPE[T_T] with C_TINY[T_T])
extends Module(name)
with C_TEST_COLL[T_T,T_T]
{
type T_Result = T_T;
val v_equal = t_T.v_equal;
val v_string = t_T.v_string;
val v_assert = t_T.v_assert;
val v_node_equivalent = t_T.v_node_equivalent;
type T_Root = t_T.T_Root;
val t_Root = t_T.t_Root;
type T_Wood = t_T.T_Wood;
val t_Wood = t_T.t_Wood;
val p_root = t_T.p_root;
val v_root = t_T.v_root;
val p_branch = t_T.p_branch;
val v_branch = t_T.v_branch;
val p_leaf = t_T.p_leaf;
val v_leaf = t_T.v_leaf;
val t_Result : this.type = this;
val t_IntegerMaxLattice = new M_MAX_LATTICE[T_Integer]("IntegerMaxLattice",t_Integer,0);
type T_IntegerMaxLattice = /*TI*/T_MAX_LATTICE[T_Integer];
private class E_foo(anchor : Null) extends Evaluation[Null,T_IntegerMaxLattice](anchor,"foo") {
override def getDefault = new M__basic_4[ T_IntegerMaxLattice](t_IntegerMaxLattice).v__op_s(1,2);
override def compute : ValueType = c_foo();
}
问题 #2:
def c_foo() : T_IntegerMaxLattice = {
Debug.begin("foo");
try {
return new M__basic_4[ T_IntegerMaxLattice](t_IntegerMaxLattice).v__op_s(1,2);
} finally { Debug.end(); }
}
【问题讨论】: