Skip to content

Commit

Permalink
CStrRef sucks
Browse files Browse the repository at this point in the history
This is the first step of a larger campaign of eliminating goofy types from our codebase. Typedef-ing a reference is unrecommended because references are not first class types and therefore things like construction and copying may do unexpected things. In fact search this diff for 'reinterpret_cast' to see some very odd stuff.

Destroy!

Reviewed By: @jdelong

Differential Revision: D983915
  • Loading branch information
Andrei Alexandrescu authored and sgolemon committed Oct 2, 2013
1 parent 13e67d0 commit cfee94b
Show file tree
Hide file tree
Showing 282 changed files with 4,275 additions and 3,645 deletions.
2 changes: 1 addition & 1 deletion hphp/compiler/analysis/function_scope.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -791,7 +791,7 @@ void FunctionScope::setParamDefault(int index, const char* value, int64_t len,
m_paramDefaultTexts[index] = text;
}

CStrRef FunctionScope::getParamDefault(int index) {
const String& FunctionScope::getParamDefault(int index) {
return m_paramDefaults[index];
}

Expand Down
2 changes: 1 addition & 1 deletion hphp/compiler/analysis/function_scope.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ class FunctionScope : public BlockScope,
void setParamName(int index, const std::string &name);
void setParamDefault(int index, const char* value, int64_t len,
const std::string &text);
CStrRef getParamDefault(int index);
const String& getParamDefault(int index);
void setRefParam(int index);
bool hasRefParam(int max) const;

Expand Down
2 changes: 1 addition & 1 deletion hphp/compiler/expression/scalar_expression.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ ScalarExpression::ScalarExpression
default:
assert(false);
}
CStrRef s = value.toString();
const String& s = value.toString();
m_value = string(s->data(), s->size());
if (m_type == T_DNUMBER && m_value.find_first_of(".eE", 0) == string::npos) {
m_value += ".";
Expand Down
2 changes: 1 addition & 1 deletion hphp/compiler/parser/parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ namespace Compiler {
///////////////////////////////////////////////////////////////////////////////
// statics

StatementListPtr Parser::ParseString(CStrRef input, AnalysisResultPtr ar,
StatementListPtr Parser::ParseString(const String& input, AnalysisResultPtr ar,
const char *fileName /* = NULL */,
bool lambdaMode /* = false */) {
assert(!input.empty());
Expand Down
2 changes: 1 addition & 1 deletion hphp/compiler/parser/parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ class Token : public ScannerToken {
DECLARE_BOOST_TYPES(Parser);
class Parser : public ParserBase {
public:
static StatementListPtr ParseString(CStrRef input, AnalysisResultPtr ar,
static StatementListPtr ParseString(const String& input, AnalysisResultPtr ar,
const char *fileName = nullptr,
bool lambdaMode = false);

Expand Down
11 changes: 6 additions & 5 deletions hphp/hhvm/process-init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,10 @@ class VMClassInfoHook : public ClassInfoHook {
virtual Array getTraits() const {
return Unit::getTraitsInfo();
}
virtual const ClassInfo::MethodInfo *findFunction(CStrRef name) const {
virtual const ClassInfo::MethodInfo *findFunction(const String& name) const {
return g_vmContext->findFunctionInfo(name);
}
virtual const ClassInfo *findClassLike(CStrRef name) const {
virtual const ClassInfo *findClassLike(const String& name) const {
const ClassInfo* ci;
if ((ci = g_vmContext->findClassInfo(name)) != nullptr
|| (ci = g_vmContext->findInterfaceInfo(name)) != nullptr
Expand All @@ -77,13 +77,14 @@ class VMClassInfoHook : public ClassInfoHook {
}
return nullptr;
}
virtual const ClassInfo *findInterface(CStrRef name) const {
virtual const ClassInfo *findInterface(const String& name) const {
return g_vmContext->findInterfaceInfo(name);
}
virtual const ClassInfo* findTrait(CStrRef name) const {
virtual const ClassInfo* findTrait(const String& name) const {
return g_vmContext->findTraitInfo(name);
}
virtual const ClassInfo::ConstantInfo *findConstant(CStrRef name) const {
virtual const ClassInfo::ConstantInfo *
findConstant(const String& name) const {
return g_vmContext->findConstantInfo(name);
}
};
Expand Down
14 changes: 7 additions & 7 deletions hphp/runtime/base/array-data-defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ inline StringData* getStringKey(const Cell* cell) {
}
}

inline bool ArrayData::exists(CStrRef k) const {
inline bool ArrayData::exists(const String& k) const {
assert(IsValidKey(k));
return exists(k.get());
}
Expand All @@ -51,7 +51,7 @@ inline bool ArrayData::exists(CVarRef k) const {
: exists(getStringKey(cell));
}

inline CVarRef ArrayData::get(CStrRef k, bool error) const {
inline CVarRef ArrayData::get(const String& k, bool error) const {
assert(IsValidKey(k));
return get(k.get(), error);
}
Expand All @@ -66,7 +66,7 @@ inline CVarRef ArrayData::get(const StringData* k, bool error) const {
return tv ? tvAsCVarRef(tv) : getNotFound(k, error);
}

inline ArrayData* ArrayData::lval(CStrRef k, Variant *&ret, bool copy) {
inline ArrayData* ArrayData::lval(const String& k, Variant *&ret, bool copy) {
assert(IsValidKey(k));
return lval(k.get(), ret, copy);
}
Expand All @@ -78,7 +78,7 @@ inline ArrayData* ArrayData::lval(CVarRef k, Variant *&ret, bool copy) {
: lval(getStringKey(cell), ret, copy);
}

inline ArrayData* ArrayData::set(CStrRef k, CVarRef v, bool copy) {
inline ArrayData* ArrayData::set(const String& k, CVarRef v, bool copy) {
assert(IsValidKey(k));
return set(k.get(), v, copy);
}
Expand All @@ -90,7 +90,7 @@ inline ArrayData* ArrayData::set(CVarRef k, CVarRef v, bool copy) {
: set(getStringKey(cell), v, copy);
}

inline ArrayData* ArrayData::setRef(CStrRef k, CVarRef v, bool copy) {
inline ArrayData* ArrayData::setRef(const String& k, CVarRef v, bool copy) {
assert(IsValidKey(k));
return setRef(k.get(), v, copy);
}
Expand All @@ -102,7 +102,7 @@ inline ArrayData* ArrayData::setRef(CVarRef k, CVarRef v, bool copy) {
: setRef(getStringKey(cell), v, copy);
}

inline ArrayData* ArrayData::add(CStrRef k, CVarRef v, bool copy) {
inline ArrayData* ArrayData::add(const String& k, CVarRef v, bool copy) {
assert(IsValidKey(k));
return add(k.get(), v, copy);
}
Expand All @@ -114,7 +114,7 @@ inline ArrayData* ArrayData::add(CVarRef k, CVarRef v, bool copy) {
: add(getStringKey(cell), v, copy);
}

inline ArrayData* ArrayData::remove(CStrRef k, bool copy) {
inline ArrayData* ArrayData::remove(const String& k, bool copy) {
assert(IsValidKey(k));
return remove(k.get(), copy);
}
Expand Down
4 changes: 2 additions & 2 deletions hphp/runtime/base/array-data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ extern const ArrayFunctions g_array_funcs = {
// plain array access converts them to integers. non-int-string
// assersions should go upstream of the ArrayData api.

bool ArrayData::IsValidKey(CStrRef k) {
bool ArrayData::IsValidKey(const String& k) {
return IsValidKey(k.get());
}

Expand Down Expand Up @@ -726,7 +726,7 @@ CVarRef ArrayData::getNotFound(const StringData* k, bool error) const {
null_variant;
}

CVarRef ArrayData::getNotFound(CStrRef k) {
CVarRef ArrayData::getNotFound(const String& k) {
raise_notice("Undefined index: %s", k.data());
return null_variant;
}
Expand Down
18 changes: 9 additions & 9 deletions hphp/runtime/base/array-data.h
Original file line number Diff line number Diff line change
Expand Up @@ -305,23 +305,23 @@ class ArrayData {
* the virtual method. Helpers that take a CVarRef key dispatch to either
* the StringData* or int64_t key-type helpers.
*/
bool exists(CStrRef k) const;
bool exists(const String& k) const;
bool exists(CVarRef k) const;
CVarRef get(int64_t k, bool error = false) const;
CVarRef get(const StringData* k, bool error = false) const;
CVarRef get(CStrRef k, bool error = false) const;
CVarRef get(const String& k, bool error = false) const;
CVarRef get(CVarRef k, bool error = false) const;
ArrayData *lval(CStrRef k, Variant *&ret, bool copy);
ArrayData *lval(const String& k, Variant *&ret, bool copy);
ArrayData *lval(CVarRef k, Variant *&ret, bool copy);
ArrayData *set(CStrRef k, CVarRef v, bool copy);
ArrayData *set(const String& k, CVarRef v, bool copy);
ArrayData *set(CVarRef k, CVarRef v, bool copy);
ArrayData *set(const StringData*, CVarRef, bool) = delete;
ArrayData *setRef(CStrRef k, CVarRef v, bool copy);
ArrayData *setRef(const String& k, CVarRef v, bool copy);
ArrayData *setRef(CVarRef k, CVarRef v, bool copy);
ArrayData *setRef(const StringData*, CVarRef, bool) = delete;
ArrayData *add(CStrRef k, CVarRef v, bool copy);
ArrayData *add(const String& k, CVarRef v, bool copy);
ArrayData *add(CVarRef k, CVarRef v, bool copy);
ArrayData *remove(CStrRef k, bool copy);
ArrayData *remove(const String& k, bool copy);
ArrayData *remove(CVarRef k, bool copy);

ssize_t iter_begin() const;
Expand Down Expand Up @@ -516,10 +516,10 @@ class ArrayData {
static CVarRef getNotFound(const StringData* k);
CVarRef getNotFound(int64_t k, bool error) const;
CVarRef getNotFound(const StringData* k, bool error) const;
static CVarRef getNotFound(CStrRef k);
static CVarRef getNotFound(const String& k);
static CVarRef getNotFound(CVarRef k);

static bool IsValidKey(CStrRef k);
static bool IsValidKey(const String& k);
static bool IsValidKey(CVarRef k);
static bool IsValidKey(const StringData* k) { return k; }

Expand Down
10 changes: 5 additions & 5 deletions hphp/runtime/base/array-init.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ struct ArrayInit {
// if you have a literal, or String otherwise.
ArrayInit& set(const char*, CVarRef v, bool keyConverted = false) = delete;

ArrayInit& set(CStrRef name, CVarRef v, bool keyConverted = false) {
ArrayInit& set(const String& name, CVarRef v, bool keyConverted = false) {
if (keyConverted) {
performOp([&]{ return m_data->set(name, v, false); });
} else if (!name.isNull()) {
Expand Down Expand Up @@ -112,7 +112,7 @@ struct ArrayInit {
return *this;
}

ArrayInit& set(CStrRef name, RefResult v, bool keyConverted = false) {
ArrayInit& set(const String& name, RefResult v, bool keyConverted = false) {
if (keyConverted) {
performOp([&]{ return m_data->setRef(name, variant(v), false); });
} else if (!name.isNull()) {
Expand Down Expand Up @@ -153,7 +153,7 @@ struct ArrayInit {
return *this;
}

ArrayInit& add(CStrRef name, CVarRef v, bool keyConverted = false) {
ArrayInit& add(const String& name, CVarRef v, bool keyConverted = false) {
if (keyConverted) {
performOp([&]{ return m_data->add(name, v, false); });
} else if (!name.isNull()) {
Expand Down Expand Up @@ -192,7 +192,7 @@ struct ArrayInit {
return *this;
}

ArrayInit& setRef(CStrRef name, CVarRef v, bool keyConverted = false) {
ArrayInit& setRef(const String& name, CVarRef v, bool keyConverted = false) {
if (keyConverted) {
performOp([&]{ return m_data->setRef(name, v, false); });
} else {
Expand Down Expand Up @@ -391,7 +391,7 @@ namespace make_array_detail {
inline String init_key(const char* s) { return String(s); }
inline int64_t init_key(int k) { return k; }
inline int64_t init_key(int64_t k) { return k; }
inline CStrRef init_key(CStrRef k) { return k; }
inline const String& init_key(const String& k) { return k; }

inline void map_impl(ArrayInit&) {}

Expand Down
6 changes: 3 additions & 3 deletions hphp/runtime/base/array-iterator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -746,7 +746,7 @@ bool Iter::init(TypedValue* c1) {
(void) new (&arr()) ArrayIter(obj.detach(), ArrayIter::noInc);
} else {
Class* ctx = arGetContextClass(g_vmContext->getFP());
CStrRef ctxStr = ctx ? ctx->nameRef() : null_string;
const String& ctxStr = ctx ? ctx->nameRef() : null_string;
Array iterArray(obj->o_toIterArray(ctxStr));
ArrayData* ad = iterArray.get();
(void) new (&arr()) ArrayIter(ad);
Expand Down Expand Up @@ -1108,7 +1108,7 @@ static int64_t new_iter_object_any(Iter* dest, ObjectData* obj, Class* ctx,
} else {
TRACE(2, "%s: I %p, obj %p, ctx %p, iterate as array\n",
__func__, dest, obj, ctx);
CStrRef ctxStr = ctx ? ctx->nameRef() : null_string;
const String& ctxStr = ctx ? ctx->nameRef() : null_string;
Array iterArray(itObj->o_toIterArray(ctxStr));
ArrayData* ad = iterArray.get();
(void) new (&dest->arr()) ArrayIter(ad);
Expand Down Expand Up @@ -1395,7 +1395,7 @@ int64_t new_miter_object(Iter* dest, RefData* ref, Class* ctx,

TRACE(2, "%s: I %p, obj %p, ctx %p, iterate as array\n",
__func__, dest, obj, ctx);
CStrRef ctxStr = ctx ? ctx->nameRef() : null_string;
const String& ctxStr = ctx ? ctx->nameRef() : null_string;
Array iterArray(itObj->o_toIterArray(ctxStr, true));
ArrayData* ad = iterArray.detach();
(void) new (&dest->marr()) MArrayIter(ad);
Expand Down

0 comments on commit cfee94b

Please sign in to comment.