@@ -503,46 +503,45 @@ def get_mode(orig_string):
503503 if not isinstance (string , str ):
504504 return string # it is hopefully already a mode...
505505
506+ if string in predefined_modes :
507+ return predefined_modes [string ]
508+
509+ if string not in ("Mode" , "DebugMode" , "DEBUG_MODE" , "NanGuardMode" ):
510+ raise ValueError (f"No predefined mode exist for string: { string } " )
511+
506512 global instantiated_default_mode
507513 # The default mode is cached. However, config.mode can change
508514 # If instantiated_default_mode has the right class, use it.
515+
509516 if orig_string is None and instantiated_default_mode :
510- if string in predefined_modes :
511- default_mode_class = predefined_modes [string ].__class__ .__name__
512- else :
513- default_mode_class = string
517+ default_mode_class = string
518+ # FIXME: This is flawed, we should use proper object comparison.
514519 if instantiated_default_mode .__class__ .__name__ == default_mode_class :
515520 return instantiated_default_mode
516521
517- if string in ("Mode" , "DebugMode" , "NanGuardMode" ):
518- if string == "DebugMode" :
519- # need to import later to break circular dependency.
520- from .debugmode import DebugMode
522+ if string in ("DebugMode" , "DEBUG_MODE" ):
523+ # need to import later to break circular dependency.
524+ from .debugmode import DebugMode
521525
522- # DebugMode use its own linker.
523- ret = DebugMode (optimizer = config .optimizer )
524- elif string == "NanGuardMode" :
525- # need to import later to break circular dependency.
526- from .nanguardmode import NanGuardMode
526+ # DebugMode use its own linker.
527+ ret = DebugMode (optimizer = config .optimizer )
528+ elif string == "NanGuardMode" :
529+ # need to import later to break circular dependency.
530+ from .nanguardmode import NanGuardMode
527531
528- # NanGuardMode use its own linker.
529- ret = NanGuardMode (True , True , True , optimizer = config .optimizer )
530- else :
531- # TODO: Can't we look up the name and invoke it rather than using eval here?
532- ret = eval (string + "(linker=config.linker, optimizer=config.optimizer)" )
533- elif string in predefined_modes :
534- ret = predefined_modes [string ]
532+ # NanGuardMode use its own linker.
533+ ret = NanGuardMode (True , True , True , optimizer = config .optimizer )
535534 else :
536- raise Exception ( f"No predefined mode exist for string: { string } " )
535+ ret = Mode ( linker = config . linker , optimizer = config . optimizer )
537536
538537 if orig_string is None :
539- # Build and cache the default mode
540538 if config .optimizer_excluding :
541539 ret = ret .excluding (* config .optimizer_excluding .split (":" ))
542540 if config .optimizer_including :
543541 ret = ret .including (* config .optimizer_including .split (":" ))
544542 if config .optimizer_requiring :
545543 ret = ret .requiring (* config .optimizer_requiring .split (":" ))
544+ # Override the cache with the new class mode
546545 instantiated_default_mode = ret
547546
548547 return ret
0 commit comments