def locate_var(var, prefix=nil)

      var, prefix = split_prefix(var, prefix)

      if prefix == '//' # engine variable
        nil
      elsif prefix == '/' && par = parent # process variable
        par.locate_var(var, prefix)
      elsif h.variables # it's here
        [ self, var ]
      elsif par = parent # look in the parent expression
        par.locate_var(var, prefix)
      else # uprooted var lookup...
        [ nil, nil ]
      end
    end
def locate_var(var, prefix=nil)

      var, prefix = split_prefix(var, prefix)

      if prefix == '//' # engine variable
        nil
      elsif prefix == '/' && par = parent # process variable
        par.locate_var(var, prefix)
      elsif h.variables # it's here
        [ self, var ]
      elsif par = parent # look in the parent expression
        par.locate_var(var, prefix)
      else # uprooted var lookup...
        [ nil, nil ]
      end
    end
Returns the flow expression that owns a variable (or the one
 that should own it) and the var without its potential / prefixes.

 In other words:

   [ owner, varname_without_slashes ]

 When a location for the variable could not be found, it returns:

   [ nil, nil ]