summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSteve Reinhardt <steve.reinhardt@amd.com>2010-07-05 21:39:38 -0700
committerSteve Reinhardt <steve.reinhardt@amd.com>2010-07-05 21:39:38 -0700
commit387cbffb7a3c28ea7b9afe8082d25a179d2de683 (patch)
tree22c533943bd75e3ad608e6247e44666411ae739c /src
parent30ce620d1d7b04387072e2dcf87530c33eb7c608 (diff)
downloadgem5-387cbffb7a3c28ea7b9afe8082d25a179d2de683.tar.xz
sim: allow SimObject subclasses to define classmethods
(without requiring a leading underscore) Also a little cleanup on type names in SimObject.py.
Diffstat (limited to 'src')
-rw-r--r--src/python/m5/SimObject.py25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/python/m5/SimObject.py b/src/python/m5/SimObject.py
index 0e0ffaea9..e6f0e36b2 100644
--- a/src/python/m5/SimObject.py
+++ b/src/python/m5/SimObject.py
@@ -29,7 +29,7 @@
import math
import sys
-import types
+from types import FunctionType
try:
import pydot
@@ -102,15 +102,15 @@ instanceDict = {}
# class are instantiated, and provides inherited instance behavior).
class MetaSimObject(type):
# Attributes that can be set only at initialization time
- init_keywords = { 'abstract' : types.BooleanType,
- 'cxx_class' : types.StringType,
- 'cxx_type' : types.StringType,
- 'cxx_predecls' : types.ListType,
- 'swig_objdecls' : types.ListType,
- 'swig_predecls' : types.ListType,
- 'type' : types.StringType }
+ init_keywords = { 'abstract' : bool,
+ 'cxx_class' : str,
+ 'cxx_type' : str,
+ 'cxx_predecls' : list,
+ 'swig_objdecls' : list,
+ 'swig_predecls' : list,
+ 'type' : str }
# Attributes that can be set any time
- keywords = { 'check' : types.FunctionType }
+ keywords = { 'check' : FunctionType }
# __new__ is called before __init__, and is where the statements
# in the body of the class definition get loaded into the class's
@@ -126,8 +126,9 @@ class MetaSimObject(type):
cls_dict = {}
value_dict = {}
for key,val in dict.items():
- if key.startswith('_') or isinstance(val, (types.FunctionType,
- types.TypeType)):
+ if key.startswith('_') or isinstance(val, (FunctionType,
+ classmethod,
+ type)):
cls_dict[key] = val
else:
# must be a param/port setting
@@ -233,7 +234,7 @@ class MetaSimObject(type):
if not isinstance(val, kwtype):
raise TypeError, 'keyword %s has bad type %s (expecting %s)' % \
(keyword, type(val), kwtype)
- if isinstance(val, types.FunctionType):
+ if isinstance(val, FunctionType):
val = classmethod(val)
type.__setattr__(cls, keyword, val)