##just a proof of concept with a lot of options and option groups #import autopath #from tiramisu.config import * #from tiramisu.option import * #all_modules = ['amon', 'sphynx', 'zephir'] #example__optiondescription = OptionDescription("objspace", "Object Space Options", [ # ChoiceOption("name", "Object Space name", # ["std", "flow", "thunk", "dump", "taint"], # "std"), # OptionDescription("opcodes", "opcodes to enable in the interpreter", [ # BoolOption("CALL_LIKELY_BUILTIN", "emit a special bytecode for likely calls to builtin functions", # default=False, # requires=[("translation.stackless", False)]), # BoolOption("CALL_METHOD", "emit a special bytecode for expr.name()", # default=False), # ]), # BoolOption("nofaking", "disallow faking in the object space", # default=False, # requires=[ # ("objspace.usemodules.posix", True), # ("objspace.usemodules.time", True), # ("objspace.usemodules.errno", True)], # ), # OptionDescription("usemodules", "Which Modules should be used", [ # BoolOption(modname, "use module %s" % (modname, ), # default=True, # requires= [('amon', False)], # ) # for modname in all_modules]), # BoolOption("allworkingmodules", "use as many working modules as possible", # default=True, # ), # BoolOption("translationmodules", # "use only those modules that are needed to run translate.py on pypy", # default=False, # ), # BoolOption("geninterp", "specify whether geninterp should be used", # default=True), # BoolOption("logbytecodes", # "keep track of bytecode usage", # default=False), # BoolOption("usepycfiles", "Write and read pyc files when importing", # default=True), # BoolOption("lonepycfiles", "Import pyc files with no matching py file", # default=False, # requires=[("objspace.usepycfiles", True)]), # StrOption("soabi", # "Tag to differentiate extension modules built for different Python interpreters", # default=None), # BoolOption("honor__builtins__", # "Honor the __builtins__ key of a module dictionary", # default=False), # BoolOption("disable_call_speedhacks", # "make sure that all calls go through space.call_args", # default=False), # BoolOption("timing", # "timing of various parts of the interpreter (simple profiling)", # default=False), # OptionDescription("std", "Standard Object Space Options", [ # BoolOption("withtproxy", "support transparent proxies", # default=True), # BoolOption("withsmallint", "use tagged integers", # default=False, # requires=[("objspace.std.withprebuiltint", False), # ("translation.taggedpointers", True)]), # BoolOption("withprebuiltint", "prebuild commonly used int objects", # default=False), # IntOption("prebuiltintfrom", "lowest integer which is prebuilt", # default=-5), # IntOption("prebuiltintto", "highest integer which is prebuilt", # default=100), # BoolOption("withstrjoin", "use strings optimized for addition", # default=False), # BoolOption("withstrslice", "use strings optimized for slicing", # default=False), # BoolOption("withstrbuf", "use strings optimized for addition (ver 2)", # default=False), # BoolOption("withprebuiltchar", # "use prebuilt single-character string objects", # default=False), # BoolOption("sharesmallstr", # "always reuse the prebuilt string objects " # "(the empty string and potentially single-char strings)", # default=False), # BoolOption("withrope", "use ropes as the string implementation", # default=False, # requires=[("objspace.std.withstrslice", False), # ("objspace.std.withstrjoin", False), # ("objspace.std.withstrbuf", False)], # ), # BoolOption("withropeunicode", "use ropes for the unicode implementation", # default=False, # requires=[("objspace.std.withrope", True)]), # BoolOption("withcelldict", # "use dictionaries that are optimized for being used as module dicts", # default=False, # requires=[("objspace.opcodes.CALL_LIKELY_BUILTIN", False), # ("objspace.honor__builtins__", False)]), # BoolOption("withdictmeasurement", # "create huge files with masses of information " # "about dictionaries", # default=False), # BoolOption("withmapdict", # "make instances really small but slow without the JIT", # default=False, # requires=[("objspace.std.getattributeshortcut", True), # ("objspace.std.withtypeversion", True), # ]), # BoolOption("withrangelist", # "enable special range list implementation that does not " # "actually create the full list until the resulting " # "list is mutated", # default=False), # BoolOption("withtypeversion", # "version type objects when changing them", # default=False, # # weakrefs needed, because of get_subclasses() # requires=[("translation.rweakref", True)]), # BoolOption("withmethodcache", # "try to cache method lookups", # default=False, # requires=[("objspace.std.withtypeversion", True), # ("translation.rweakref", True)]), # BoolOption("withmethodcachecounter", # "try to cache methods and provide a counter in __pypy__. " # "for testing purposes only.", # default=False, # requires=[("objspace.std.withmethodcache", True)]), # IntOption("methodcachesizeexp", # " 2 ** methodcachesizeexp is the size of the of the method cache ", # default=11), # BoolOption("optimized_int_add", # "special case the addition of two integers in BINARY_ADD", # default=False), # BoolOption("optimized_comparison_op", # "special case the comparison of integers", # default=False), # BoolOption("optimized_list_getitem", # "special case the 'list[integer]' expressions", # default=False), # BoolOption("builtinshortcut", # "a shortcut for operations between built-in types", # default=False), # BoolOption("getattributeshortcut", # "track types that override __getattribute__", # default=False), # BoolOption("newshortcut", # "cache and shortcut calling __new__ from builtin types", # default=False), # BoolOption("logspaceoptypes", # "a instrumentation option: before exit, print the types seen by " # "certain simpler bytecodes", # default=False), # ChoiceOption("multimethods", "the multimethod implementation to use", # ["doubledispatch", "mrd"], # default="mrd"), # BoolOption("immutable_builtintypes", # "Forbid the changing of builtin types", default=True), # ]), #]) ## ____________________________________________________________ #def get_combined_translation_config(other_optdescr=None, # existing_config=None, # overrides=None, # translating=False): # if overrides is None: # overrides = {} # d = BoolOption("translating", # "indicates whether we are translating currently", # default=False) # if other_optdescr is None: # children = [] # newname = "" # else: # children = [other_optdescr] # newname = other_optdescr._name # descr = OptionDescription("eole", "all options", children) # config = Config(descr, **overrides) # if translating: # config.translating = True # if existing_config is not None: # for child in existing_config._cfgimpl_descr._children: # if child._name == newname: # continue # value = getattr(existing_config, child._name) # config._cfgimpl_values[child._name] = value # return config #def get_example_config(overrides=None, translating=False): # return get_combined_translation_config( # example__optiondescription, overrides=overrides, # translating=translating) ## ____________________________________________________________ #def test_example_option(): # config = get_example_config() # result = ['objspace.name', 'objspace.opcodes.CALL_LIKELY_BUILTIN', # 'objspace.opcodes.CALL_METHOD', 'objspace.nofaking', # 'objspace.usemodules.amon', 'objspace.usemodules.sphynx', # 'objspace.usemodules.zephir', 'objspace.allworkingmodules', # 'objspace.translationmodules', 'objspace.geninterp', # 'objspace.logbytecodes', 'objspace.usepycfiles', 'objspace.lonepycfiles', # 'objspace.soabi', 'objspace.honor__builtins__', # 'objspace.disable_call_speedhacks', 'objspace.timing', # 'objspace.std.withtproxy', 'objspace.std.withsmallint', # 'objspace.std.withprebuiltint', 'objspace.std.prebuiltintfrom', # 'objspace.std.prebuiltintto', 'objspace.std.withstrjoin', # 'objspace.std.withstrslice', 'objspace.std.withstrbuf', # 'objspace.std.withprebuiltchar', 'objspace.std.sharesmallstr', # 'objspace.std.withrope', 'objspace.std.withropeunicode', # 'objspace.std.withcelldict', 'objspace.std.withdictmeasurement', # 'objspace.std.withmapdict', 'objspace.std.withrangelist', # 'objspace.std.withtypeversion', 'objspace.std.withmethodcache', # 'objspace.std.withmethodcachecounter', 'objspace.std.methodcachesizeexp', # 'objspace.std.optimized_int_add', 'objspace.std.optimized_comparison_op', # 'objspace.std.optimized_list_getitem', 'objspace.std.builtinshortcut', # 'objspace.std.getattributeshortcut', 'objspace.std.newshortcut', # 'objspace.std.logspaceoptypes', 'objspace.std.multimethods', # 'objspace.std.immutable_builtintypes'] # assert config.getpaths(allpaths=True) == result