Save errno for logging before potentially overwriting it.
[chromium-blink-merge.git] / ppapi / shared_impl / scoped_pp_var.cc
blob3ae13b0445a940185424bb4fd4fa1c3be2d7688e
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ppapi/shared_impl/scoped_pp_var.h"
7 #include "ppapi/shared_impl/ppapi_globals.h"
8 #include "ppapi/shared_impl/var_tracker.h"
10 namespace ppapi {
12 namespace {
14 void CallAddRef(const PP_Var& v) {
15 PpapiGlobals::Get()->GetVarTracker()->AddRefVar(v);
18 void CallRelease(const PP_Var& v) {
19 PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(v);
22 } // namespace
24 ScopedPPVar::ScopedPPVar() : var_(PP_MakeUndefined()) {
27 ScopedPPVar::ScopedPPVar(const PP_Var& v) : var_(v) {
28 CallAddRef(var_);
31 ScopedPPVar::ScopedPPVar(const PassRef&, const PP_Var& v) : var_(v) {
34 ScopedPPVar::ScopedPPVar(const ScopedPPVar& other)
35 : var_(other.var_) {
36 CallAddRef(var_);
39 ScopedPPVar::~ScopedPPVar() {
40 CallRelease(var_);
43 ScopedPPVar& ScopedPPVar::operator=(const PP_Var& v) {
44 CallAddRef(v);
45 CallRelease(var_);
46 var_ = v;
47 return *this;
50 PP_Var ScopedPPVar::Release() {
51 PP_Var result = var_;
52 var_ = PP_MakeUndefined();
53 return result;
56 } // namespace ppapi