params.py (11988:665cd5f8b52b) | params.py (11991:d3f19484145f) |
---|---|
1# Copyright (c) 2012-2014, 2017 ARM Limited 2# All rights reserved. 3# 4# The license below extends only to copyright in the software and shall 5# not be construed as granting a license to any other intellectual 6# property including but not limited to intellectual property relating 7# to a hardware implementation of the functionality of the software 8# licensed hereunder. You may use the software subject to the license --- 92 unchanged lines hidden (view full) --- 101 @classmethod 102 def cxx_predecls(cls, code): 103 pass 104 105 @classmethod 106 def pybind_predecls(cls, code): 107 cls.cxx_predecls(code) 108 | 1# Copyright (c) 2012-2014, 2017 ARM Limited 2# All rights reserved. 3# 4# The license below extends only to copyright in the software and shall 5# not be construed as granting a license to any other intellectual 6# property including but not limited to intellectual property relating 7# to a hardware implementation of the functionality of the software 8# licensed hereunder. You may use the software subject to the license --- 92 unchanged lines hidden (view full) --- 101 @classmethod 102 def cxx_predecls(cls, code): 103 pass 104 105 @classmethod 106 def pybind_predecls(cls, code): 107 cls.cxx_predecls(code) 108 |
109 # Generate the code needed as a prerequisite for including a 110 # reference to a C++ object of this type in a SWIG .i file. 111 # Typically generates one or more %import or %include statements. 112 @classmethod 113 def swig_predecls(cls, code): 114 pass 115 | |
116 # default for printing to .ini file is regular string conversion. 117 # will be overridden in some cases 118 def ini_str(self): 119 return str(self) 120 121 # default for printing to .json file is regular string conversion. 122 # will be overridden in some cases, mostly to use native Python 123 # types where there are similar JSON types --- 100 unchanged lines hidden (view full) --- 224 225 def cxx_predecls(self, code): 226 code('#include <cstddef>') 227 self.ptype.cxx_predecls(code) 228 229 def pybind_predecls(self, code): 230 self.ptype.pybind_predecls(code) 231 | 109 # default for printing to .ini file is regular string conversion. 110 # will be overridden in some cases 111 def ini_str(self): 112 return str(self) 113 114 # default for printing to .json file is regular string conversion. 115 # will be overridden in some cases, mostly to use native Python 116 # types where there are similar JSON types --- 100 unchanged lines hidden (view full) --- 217 218 def cxx_predecls(self, code): 219 code('#include <cstddef>') 220 self.ptype.cxx_predecls(code) 221 222 def pybind_predecls(self, code): 223 self.ptype.pybind_predecls(code) 224 |
232 def swig_predecls(self, code): 233 self.ptype.swig_predecls(code) 234 | |
235 def cxx_decl(self, code): 236 code('${{self.ptype.cxx_type}} ${{self.name}};') 237 238# Vector-valued parameter description. Just like ParamDesc, except 239# that the value is a vector (list) of the specified type instead of a 240# single value. 241 242class VectorParamValue(list): --- 138 unchanged lines hidden (view full) --- 381 tmp_list = [ ParamDesc.convert(self, v) \ 382 for v in value.strip('[').strip(']').split(',') ] 383 else: 384 # singleton: coerce to a single-element list 385 tmp_list = [ ParamDesc.convert(self, value) ] 386 387 return VectorParamValue(tmp_list) 388 | 225 def cxx_decl(self, code): 226 code('${{self.ptype.cxx_type}} ${{self.name}};') 227 228# Vector-valued parameter description. Just like ParamDesc, except 229# that the value is a vector (list) of the specified type instead of a 230# single value. 231 232class VectorParamValue(list): --- 138 unchanged lines hidden (view full) --- 371 tmp_list = [ ParamDesc.convert(self, v) \ 372 for v in value.strip('[').strip(']').split(',') ] 373 else: 374 # singleton: coerce to a single-element list 375 tmp_list = [ ParamDesc.convert(self, value) ] 376 377 return VectorParamValue(tmp_list) 378 |
389 def swig_module_name(self): 390 return "%s_vector" % self.ptype_str 391 392 def swig_predecls(self, code): 393 code('%import "${{self.swig_module_name()}}.i"') 394 395 def swig_decl(self, code): 396 code('%module(package="_m5") ${{self.swig_module_name()}}') 397 code('%{') 398 self.ptype.cxx_predecls(code) 399 code('%}') 400 code() 401 # Make sure the SWIGPY_SLICE_ARG is defined through this inclusion 402 code('%include "std_container.i"') 403 code() 404 self.ptype.swig_predecls(code) 405 code() 406 code('%include "std_vector.i"') 407 code() 408 409 ptype = self.ptype_str 410 cxx_type = self.ptype.cxx_type 411 412 code('%template(vector_$ptype) std::vector< $cxx_type >;') 413 | |
414 def cxx_predecls(self, code): 415 code('#include <vector>') 416 self.ptype.cxx_predecls(code) 417 418 def pybind_predecls(self, code): 419 code('#include <vector>') 420 self.ptype.pybind_predecls(code) 421 --- 42 unchanged lines hidden (view full) --- 464class String(ParamValue,str): 465 cxx_type = 'std::string' 466 cmd_line_settable = True 467 468 @classmethod 469 def cxx_predecls(self, code): 470 code('#include <string>') 471 | 379 def cxx_predecls(self, code): 380 code('#include <vector>') 381 self.ptype.cxx_predecls(code) 382 383 def pybind_predecls(self, code): 384 code('#include <vector>') 385 self.ptype.pybind_predecls(code) 386 --- 42 unchanged lines hidden (view full) --- 429class String(ParamValue,str): 430 cxx_type = 'std::string' 431 cmd_line_settable = True 432 433 @classmethod 434 def cxx_predecls(self, code): 435 code('#include <string>') 436 |
472 @classmethod 473 def swig_predecls(cls, code): 474 code('%include "std_string.i"') 475 | |
476 def __call__(self, value): 477 self = value 478 return value 479 480 @classmethod 481 def cxx_ini_parse(self, code, src, dest, ret): 482 code('%s = %s;' % (dest, src)) 483 code('%s true;' % ret) --- 107 unchanged lines hidden (view full) --- 591 self.__init__(value) 592 return value 593 594 @classmethod 595 def cxx_predecls(cls, code): 596 # most derived types require this, so we just do it here once 597 code('#include "base/types.hh"') 598 | 437 def __call__(self, value): 438 self = value 439 return value 440 441 @classmethod 442 def cxx_ini_parse(self, code, src, dest, ret): 443 code('%s = %s;' % (dest, src)) 444 code('%s true;' % ret) --- 107 unchanged lines hidden (view full) --- 552 self.__init__(value) 553 return value 554 555 @classmethod 556 def cxx_predecls(cls, code): 557 # most derived types require this, so we just do it here once 558 code('#include "base/types.hh"') 559 |
599 @classmethod 600 def swig_predecls(cls, code): 601 # most derived types require this, so we just do it here once 602 code('%import "stdint.i"') 603 code('%import "base/types.hh"') 604 | |
605 def getValue(self): 606 return long(self.value) 607 608class Int(CheckedInt): cxx_type = 'int'; size = 32; unsigned = False 609class Unsigned(CheckedInt): cxx_type = 'unsigned'; size = 32; unsigned = True 610 611class Int8(CheckedInt): cxx_type = 'int8_t'; size = 8; unsigned = False 612class UInt8(CheckedInt): cxx_type = 'uint8_t'; size = 8; unsigned = True --- 190 unchanged lines hidden (view full) --- 803 code('#include "base/addr_range.hh"') 804 805 @classmethod 806 def pybind_predecls(cls, code): 807 Addr.pybind_predecls(code) 808 code('#include "base/addr_range.hh"') 809 810 @classmethod | 560 def getValue(self): 561 return long(self.value) 562 563class Int(CheckedInt): cxx_type = 'int'; size = 32; unsigned = False 564class Unsigned(CheckedInt): cxx_type = 'unsigned'; size = 32; unsigned = True 565 566class Int8(CheckedInt): cxx_type = 'int8_t'; size = 8; unsigned = False 567class UInt8(CheckedInt): cxx_type = 'uint8_t'; size = 8; unsigned = True --- 190 unchanged lines hidden (view full) --- 758 code('#include "base/addr_range.hh"') 759 760 @classmethod 761 def pybind_predecls(cls, code): 762 Addr.pybind_predecls(code) 763 code('#include "base/addr_range.hh"') 764 765 @classmethod |
811 def swig_predecls(cls, code): 812 Addr.swig_predecls(code) 813 814 @classmethod | |
815 def cxx_ini_predecls(cls, code): 816 code('#include <sstream>') 817 818 @classmethod 819 def cxx_ini_parse(cls, code, src, dest, ret): 820 code('uint64_t _start, _end, _intlvHighBit = 0, _xorHighBit = 0;') 821 code('uint64_t _intlvBits = 0, _intlvMatch = 0;') 822 code('char _sep;') --- 14 unchanged lines hidden (view full) --- 837 code('bool _ret = !_stream.fail() &&' 838 '_stream.eof() && _sep == \':\';') 839 code('if (_ret)') 840 code(' ${dest} = AddrRange(_start, _end, _intlvHighBit, \ 841 _xorHighBit, _intlvBits, _intlvMatch);') 842 code('${ret} _ret;') 843 844 def getValue(self): | 766 def cxx_ini_predecls(cls, code): 767 code('#include <sstream>') 768 769 @classmethod 770 def cxx_ini_parse(cls, code, src, dest, ret): 771 code('uint64_t _start, _end, _intlvHighBit = 0, _xorHighBit = 0;') 772 code('uint64_t _intlvBits = 0, _intlvMatch = 0;') 773 code('char _sep;') --- 14 unchanged lines hidden (view full) --- 788 code('bool _ret = !_stream.fail() &&' 789 '_stream.eof() && _sep == \':\';') 790 code('if (_ret)') 791 code(' ${dest} = AddrRange(_start, _end, _intlvHighBit, \ 792 _xorHighBit, _intlvBits, _intlvMatch);') 793 code('${ret} _ret;') 794 795 def getValue(self): |
845 # Go from the Python class to the wrapped C++ class generated 846 # by swig | 796 # Go from the Python class to the wrapped C++ class |
847 from _m5.range import AddrRange 848 849 return AddrRange(long(self.start), long(self.end), 850 int(self.intlvHighBit), int(self.xorHighBit), 851 int(self.intlvBits), int(self.intlvMatch)) 852 853# Boolean parameter type. Python doesn't let you subclass bool, since 854# it doesn't want to let you create multiple instances of True and --- 65 unchanged lines hidden (view full) --- 920 cxx_type = 'Net::EthAddr' 921 ex_str = "00:90:00:00:00:01" 922 cmd_line_settable = True 923 924 @classmethod 925 def cxx_predecls(cls, code): 926 code('#include "base/inet.hh"') 927 | 797 from _m5.range import AddrRange 798 799 return AddrRange(long(self.start), long(self.end), 800 int(self.intlvHighBit), int(self.xorHighBit), 801 int(self.intlvBits), int(self.intlvMatch)) 802 803# Boolean parameter type. Python doesn't let you subclass bool, since 804# it doesn't want to let you create multiple instances of True and --- 65 unchanged lines hidden (view full) --- 870 cxx_type = 'Net::EthAddr' 871 ex_str = "00:90:00:00:00:01" 872 cmd_line_settable = True 873 874 @classmethod 875 def cxx_predecls(cls, code): 876 code('#include "base/inet.hh"') 877 |
928 @classmethod 929 def swig_predecls(cls, code): 930 code('%include "python/swig/inet.i"') 931 | |
932 def __init__(self, value): 933 if value == NextEthernetAddr: 934 self.value = value 935 return 936 937 if not isinstance(value, str): 938 raise TypeError, "expected an ethernet address and didn't get one" 939 --- 37 unchanged lines hidden (view full) --- 977 cxx_type = 'Net::IpAddress' 978 ex_str = "127.0.0.1" 979 cmd_line_settable = True 980 981 @classmethod 982 def cxx_predecls(cls, code): 983 code('#include "base/inet.hh"') 984 | 878 def __init__(self, value): 879 if value == NextEthernetAddr: 880 self.value = value 881 return 882 883 if not isinstance(value, str): 884 raise TypeError, "expected an ethernet address and didn't get one" 885 --- 37 unchanged lines hidden (view full) --- 923 cxx_type = 'Net::IpAddress' 924 ex_str = "127.0.0.1" 925 cmd_line_settable = True 926 927 @classmethod 928 def cxx_predecls(cls, code): 929 code('#include "base/inet.hh"') 930 |
985 @classmethod 986 def swig_predecls(cls, code): 987 code('%include "python/swig/inet.i"') 988 | |
989 def __init__(self, value): 990 if isinstance(value, IpAddress): 991 self.ip = value.ip 992 else: 993 try: 994 self.ip = convert.toIpAddress(value) 995 except TypeError: 996 self.ip = long(value) --- 36 unchanged lines hidden (view full) --- 1033 cxx_type = 'Net::IpNetmask' 1034 ex_str = "127.0.0.0/24" 1035 cmd_line_settable = True 1036 1037 @classmethod 1038 def cxx_predecls(cls, code): 1039 code('#include "base/inet.hh"') 1040 | 931 def __init__(self, value): 932 if isinstance(value, IpAddress): 933 self.ip = value.ip 934 else: 935 try: 936 self.ip = convert.toIpAddress(value) 937 except TypeError: 938 self.ip = long(value) --- 36 unchanged lines hidden (view full) --- 975 cxx_type = 'Net::IpNetmask' 976 ex_str = "127.0.0.0/24" 977 cmd_line_settable = True 978 979 @classmethod 980 def cxx_predecls(cls, code): 981 code('#include "base/inet.hh"') 982 |
1041 @classmethod 1042 def swig_predecls(cls, code): 1043 code('%include "python/swig/inet.i"') 1044 | |
1045 def __init__(self, *args, **kwargs): 1046 def handle_kwarg(self, kwargs, key, elseVal = None): 1047 if key in kwargs: 1048 setattr(self, key, kwargs.pop(key)) 1049 elif elseVal: 1050 setattr(self, key, elseVal) 1051 else: 1052 raise TypeError, "No value set for %s" % key --- 58 unchanged lines hidden (view full) --- 1111 cxx_type = 'Net::IpWithPort' 1112 ex_str = "127.0.0.1:80" 1113 cmd_line_settable = True 1114 1115 @classmethod 1116 def cxx_predecls(cls, code): 1117 code('#include "base/inet.hh"') 1118 | 983 def __init__(self, *args, **kwargs): 984 def handle_kwarg(self, kwargs, key, elseVal = None): 985 if key in kwargs: 986 setattr(self, key, kwargs.pop(key)) 987 elif elseVal: 988 setattr(self, key, elseVal) 989 else: 990 raise TypeError, "No value set for %s" % key --- 58 unchanged lines hidden (view full) --- 1049 cxx_type = 'Net::IpWithPort' 1050 ex_str = "127.0.0.1:80" 1051 cmd_line_settable = True 1052 1053 @classmethod 1054 def cxx_predecls(cls, code): 1055 code('#include "base/inet.hh"') 1056 |
1119 @classmethod 1120 def swig_predecls(cls, code): 1121 code('%include "python/swig/inet.i"') 1122 | |
1123 def __init__(self, *args, **kwargs): 1124 def handle_kwarg(self, kwargs, key, elseVal = None): 1125 if key in kwargs: 1126 setattr(self, key, kwargs.pop(key)) 1127 elif elseVal: 1128 setattr(self, key, elseVal) 1129 else: 1130 raise TypeError, "No value set for %s" % key --- 92 unchanged lines hidden (view full) --- 1223 1224class Time(ParamValue): 1225 cxx_type = 'tm' 1226 1227 @classmethod 1228 def cxx_predecls(cls, code): 1229 code('#include <time.h>') 1230 | 1057 def __init__(self, *args, **kwargs): 1058 def handle_kwarg(self, kwargs, key, elseVal = None): 1059 if key in kwargs: 1060 setattr(self, key, kwargs.pop(key)) 1061 elif elseVal: 1062 setattr(self, key, elseVal) 1063 else: 1064 raise TypeError, "No value set for %s" % key --- 92 unchanged lines hidden (view full) --- 1157 1158class Time(ParamValue): 1159 cxx_type = 'tm' 1160 1161 @classmethod 1162 def cxx_predecls(cls, code): 1163 code('#include <time.h>') 1164 |
1231 @classmethod 1232 def swig_predecls(cls, code): 1233 code('%include "python/swig/time.i"') 1234 | |
1235 def __init__(self, value): 1236 self.value = parse_time(value) 1237 1238 def __call__(self, value): 1239 self.__init__(value) 1240 return value 1241 1242 def getValue(self): --- 157 unchanged lines hidden (view full) --- 1400 code(';') 1401 code.dedent() 1402 1403 code('}') 1404 code.dedent() 1405 code() 1406 code('static EmbeddedPyBind embed_enum("enum_${name}", module_init);') 1407 | 1165 def __init__(self, value): 1166 self.value = parse_time(value) 1167 1168 def __call__(self, value): 1169 self.__init__(value) 1170 return value 1171 1172 def getValue(self): --- 157 unchanged lines hidden (view full) --- 1330 code(';') 1331 code.dedent() 1332 1333 code('}') 1334 code.dedent() 1335 code() 1336 code('static EmbeddedPyBind embed_enum("enum_${name}", module_init);') 1337 |
1408 def swig_decl(cls, code): 1409 name = cls.__name__ 1410 code('''\ 1411%module(package="_m5") enum_$name | |
1412 | 1338 |
1413%{ 1414#include "enums/$name.hh" 1415%} 1416 1417%include "enums/$name.hh" 1418''') 1419 1420 | |
1421# Base class for enum types. 1422class Enum(ParamValue): 1423 __metaclass__ = MetaEnum 1424 vals = [] 1425 cmd_line_settable = True 1426 1427 # The name of the wrapping namespace or struct 1428 wrapper_name = 'Enums' --- 14 unchanged lines hidden (view full) --- 1443 self.__init__(value) 1444 return value 1445 1446 @classmethod 1447 def cxx_predecls(cls, code): 1448 code('#include "enums/$0.hh"', cls.__name__) 1449 1450 @classmethod | 1339# Base class for enum types. 1340class Enum(ParamValue): 1341 __metaclass__ = MetaEnum 1342 vals = [] 1343 cmd_line_settable = True 1344 1345 # The name of the wrapping namespace or struct 1346 wrapper_name = 'Enums' --- 14 unchanged lines hidden (view full) --- 1361 self.__init__(value) 1362 return value 1363 1364 @classmethod 1365 def cxx_predecls(cls, code): 1366 code('#include "enums/$0.hh"', cls.__name__) 1367 1368 @classmethod |
1451 def swig_predecls(cls, code): 1452 code('%import "python/_m5/enum_$0.i"', cls.__name__) 1453 1454 @classmethod | |
1455 def cxx_ini_parse(cls, code, src, dest, ret): 1456 code('if (false) {') 1457 for elem_name in cls.map.iterkeys(): 1458 code('} else if (%s == "%s") {' % (src, elem_name)) 1459 code.indent() 1460 code('%s = Enums::%s;' % (dest, elem_name)) 1461 code('%s true;' % ret) 1462 code.dedent() --- 16 unchanged lines hidden (view full) --- 1479 cxx_type = 'Tick' 1480 ex_str = "1MHz" 1481 cmd_line_settable = True 1482 1483 @classmethod 1484 def cxx_predecls(cls, code): 1485 code('#include "base/types.hh"') 1486 | 1369 def cxx_ini_parse(cls, code, src, dest, ret): 1370 code('if (false) {') 1371 for elem_name in cls.map.iterkeys(): 1372 code('} else if (%s == "%s") {' % (src, elem_name)) 1373 code.indent() 1374 code('%s = Enums::%s;' % (dest, elem_name)) 1375 code('%s true;' % ret) 1376 code.dedent() --- 16 unchanged lines hidden (view full) --- 1393 cxx_type = 'Tick' 1394 ex_str = "1MHz" 1395 cmd_line_settable = True 1396 1397 @classmethod 1398 def cxx_predecls(cls, code): 1399 code('#include "base/types.hh"') 1400 |
1487 @classmethod 1488 def swig_predecls(cls, code): 1489 code('%import "stdint.i"') 1490 code('%import "base/types.hh"') 1491 | |
1492 def __call__(self, value): 1493 self.__init__(value) 1494 return value 1495 1496 def getValue(self): 1497 return long(self.value) 1498 1499 @classmethod --- 667 unchanged lines hidden --- | 1401 def __call__(self, value): 1402 self.__init__(value) 1403 return value 1404 1405 def getValue(self): 1406 return long(self.value) 1407 1408 @classmethod --- 667 unchanged lines hidden --- |