risc-v中文社区

 找回密码
 立即注册
查看: 878|回复: 1

[原创] rocketchip高级参数化机制--语法实验(3)

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-8-24 08:53:00 | 显示全部楼层 |阅读模式
abstract class view中有一个抽象方法 protected[config] def find[T](pname:Field[T],site:View):Option[T]
其中,protected[config]的config表示这个方法只能在本object config中使用,并且是protected,也就是说只能是
抽象类View的实现类中实现find方法.
在外部,做一个子类,继承自config中这个View,并实现find方法实验:
class SubView extends View {
override protected def find[T](pname: Field[T], site: View): Option[T] = pname.default
}
然后使用的时候:val subView = new SubView
结果编译的时候出现:Error13, 26) overriding method find in class View of type [T](pname: chipsalliance.rocketchip.config.Field[T], site: chipsalliance.rocketchip.config.View)Option[T];
method find has weaker access privileges; it should be at least protected[config]
  override protected def find[T](pname: Field[T], site: View): Option[T] = pname.default

如果:
import chipsalliance.rocketchip._   //主要是想下面def find中的config使用
import chipsalliance.rocketchip.config.{Field,View}
class SubView extends View {
  override protected[config] def find[T](pname: Field[T], site: View): Option[T] = pname.default
}
...其它代码,用到了Field[T]和View...
编译时出现:
Error14, 34) config is not an enclosing class
  override protected[config] def find[T](pname: Field[T], site: View): Option[T] = pname.default、

从上面二个实验可知,在object config中的View类不可能在外面直接使用。


回复

使用道具 举报

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
 楼主| 发表于 2021-8-24 08:55:40 | 显示全部楼层
import chipsalliance.rocketchip.config.{Field,View,TerminalView}
val view = new TerminalView() //语法错误,因为TerminaView在object config中是private class内部类,外部不可见
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-4-29 07:38 , Processed in 0.021070 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表