class Less::JavaScript::V8Context

def lock(&block)

def lock(&block)
  do_lock(&block)
rescue V8::JSError => e
  if e.in_javascript?
    js_value = e.value.respond_to?(:'[]')
    name = js_value && e.value["name"]
    constructor = js_value && e.value['constructor']
    if name == "SyntaxError" ||
        ( constructor && constructor.name == "LessError" )
      raise Less::ParseError.new(e, js_value ? e.value : nil)
    end
  # NOTE: less/parser.js :
  #
  #   error = new(LessError)({
  #      index: i,
  #      type: 'Parse',
  #      message: "missing closing `}`",
  #      filename: env.filename
  #   }, env);
  #
  # comes back as value: RuntimeError !
  elsif e.value.to_s =~ /missing opening `\(`/
    raise Less::ParseError.new(e.value.to_s)
  end
  raise Less::Error.new(e)
end