code: def value_to_jam(value, methods=False):
      """Makes a token to refer to a Python value inside Jam language code.
  
      The token is merely a string that can be passed around in Jam code and
      eventually passed back. For example, we might want to pass PropertySet
      instance to a tag function and it might eventually call back
      to virtual_target.add_suffix_and_prefix, passing the same instance.
  
      For values that are classes, we'll also make class methods callable
      from Jam.
  
      Note that this is necessary to make a bit more of existing Jamfiles work.
      This trick should not be used to much, or else the performance benefits of
      Python port will be eaten.
      """
  
      global __value_id
  
      r = __python_to_jam.get(value, None)
      if r:
          return r
  
      exported_name = "###_" + str(__value_id)
      __value_id = __value_id + 1
      __python_to_jam[value] = exported_name
      __jam_to_python[exported_name] = value
  
      if methods and type(value) == types.InstanceType:
          for field_name in dir(value):
              field = getattr(value, field_name)
              if callable(field) and not field_name.startswith("__"):
                  bjam.import_rule(
                      "", exported_name + "." + field_name, field
                  )
  
      return exported_name
  
imports: import bjam
  import re
  import types
  from itertools import groupby
label_desc: Use image node_id 12 for calling a global function with example usage: value_to_jam(value, methods) and returns: exported_name, r