From 5272db0bc2ab5a1653168906c636b9099a96348b Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Thu, 27 Oct 2016 01:36:46 -0700 Subject: Refactor and fix field reflection (#342) No more need for e.g. new Bundle { def foo(dummy: Int): Data } as now you can write new Bundle { def foo: Data } This also removes code duplication with Module. h/t @sdtwigg --- chiselFrontend/src/main/scala/chisel3/internal/Builder.scala | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'chiselFrontend/src/main/scala/chisel3/internal') diff --git a/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala b/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala index 12cc840e..b4b0e028 100644 --- a/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala +++ b/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala @@ -127,6 +127,18 @@ private[chisel3] trait HasId extends InstanceId { case Some(p) => p.modName case None => throwException(s"$instanceName doesn't have a parent") } + + private[chisel3] def getPublicFields(rootClass: Class[_]): Seq[java.lang.reflect.Method] = { + // Suggest names to nodes using runtime reflection + def getValNames(c: Class[_]): Set[String] = { + if (c == rootClass) Set() + else getValNames(c.getSuperclass) ++ c.getDeclaredFields.map(_.getName) + } + val valNames = getValNames(this.getClass) + def isPublicVal(m: java.lang.reflect.Method) = + m.getParameterTypes.isEmpty && valNames.contains(m.getName) + this.getClass.getMethods.sortWith(_.getName < _.getName).filter(isPublicVal(_)) + } } private[chisel3] class DynamicContext() { -- cgit v1.2.3