mirror of
https://github.com/zeek/zeek.git
synced 2025-10-16 21:48:21 +00:00
for cat() replacements, confine frame knowledge to aux
This commit is contained in:
parent
b62b31846e
commit
8088f91145
5 changed files with 104 additions and 90 deletions
|
@ -9,6 +9,7 @@ extend-ignore-re = [
|
||||||
"Remove in v6.1.*SupressWeird",
|
"Remove in v6.1.*SupressWeird",
|
||||||
"max_repititions:.*Remove in v6.1",
|
"max_repititions:.*Remove in v6.1",
|
||||||
"mis-aliasing of",
|
"mis-aliasing of",
|
||||||
|
"mis-indexing",
|
||||||
# On purpose
|
# On purpose
|
||||||
"\"THE NETBIOS NAM\"",
|
"\"THE NETBIOS NAM\"",
|
||||||
# NFS stuff.
|
# NFS stuff.
|
||||||
|
|
|
@ -48,8 +48,7 @@ FixedCatArg::FixedCatArg(TypePtr _t) : t(std::move(_t)) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FixedCatArg::RenderInto(ZVal* zframe, int slot, char*& res) {
|
void FixedCatArg::RenderInto(const ZVal& z, char*& res) {
|
||||||
auto& z = zframe[slot];
|
|
||||||
int n;
|
int n;
|
||||||
const char* text;
|
const char* text;
|
||||||
std::string str;
|
std::string str;
|
||||||
|
@ -140,8 +139,8 @@ void FixedCatArg::RenderInto(ZVal* zframe, int slot, char*& res) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t PatternCatArg::ComputeMaxSize(ZVal* zframe, int slot) {
|
size_t PatternCatArg::ComputeMaxSize(const ZVal& zv) {
|
||||||
text = zframe[slot].AsPattern()->AsPattern()->PatternText();
|
text = zv.AsPattern()->AsPattern()->PatternText();
|
||||||
n = strlen(text);
|
n = strlen(text);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,9 +13,9 @@ public:
|
||||||
|
|
||||||
virtual ~CatArg() {}
|
virtual ~CatArg() {}
|
||||||
|
|
||||||
size_t MaxSize(ZVal* zframe, int slot) { return max_size ? *max_size : ComputeMaxSize(zframe, slot); }
|
size_t MaxSize(const ZVal& zv) { return max_size ? *max_size : ComputeMaxSize(zv); }
|
||||||
|
|
||||||
virtual void RenderInto(ZVal* zframe, int slot, char*& res) {
|
virtual void RenderInto(const ZVal& zv, char*& res) {
|
||||||
auto n = *max_size;
|
auto n = *max_size;
|
||||||
memcpy(res, s->data(), n);
|
memcpy(res, s->data(), n);
|
||||||
res += n;
|
res += n;
|
||||||
|
@ -25,7 +25,7 @@ protected:
|
||||||
CatArg() {}
|
CatArg() {}
|
||||||
CatArg(size_t _max_size) : max_size(_max_size) {}
|
CatArg(size_t _max_size) : max_size(_max_size) {}
|
||||||
|
|
||||||
virtual size_t ComputeMaxSize(ZVal* zframe, int slot) { return 0; }
|
virtual size_t ComputeMaxSize(const ZVal& zv) { return 0; }
|
||||||
|
|
||||||
// Present if max size is known a priori.
|
// Present if max size is known a priori.
|
||||||
std::optional<size_t> max_size;
|
std::optional<size_t> max_size;
|
||||||
|
@ -38,7 +38,7 @@ class FixedCatArg : public CatArg {
|
||||||
public:
|
public:
|
||||||
FixedCatArg(TypePtr t);
|
FixedCatArg(TypePtr t);
|
||||||
|
|
||||||
void RenderInto(ZVal* zframe, int slot, char*& res) override;
|
void RenderInto(const ZVal& zv, char*& res) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
TypePtr t;
|
TypePtr t;
|
||||||
|
@ -49,22 +49,22 @@ class StringCatArg : public CatArg {
|
||||||
public:
|
public:
|
||||||
StringCatArg() : CatArg() {}
|
StringCatArg() : CatArg() {}
|
||||||
|
|
||||||
void RenderInto(ZVal* zframe, int slot, char*& res) override {
|
void RenderInto(const ZVal& zv, char*& res) override {
|
||||||
auto s = zframe[slot].AsString();
|
auto s = zv.AsString();
|
||||||
auto n = s->Len();
|
auto n = s->Len();
|
||||||
memcpy(res, s->Bytes(), n);
|
memcpy(res, s->Bytes(), n);
|
||||||
res += n;
|
res += n;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
size_t ComputeMaxSize(ZVal* zframe, int slot) override { return zframe[slot].AsString()->Len(); }
|
size_t ComputeMaxSize(const ZVal& zv) override { return zv.AsString()->Len(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
class PatternCatArg : public CatArg {
|
class PatternCatArg : public CatArg {
|
||||||
public:
|
public:
|
||||||
PatternCatArg() : CatArg() {}
|
PatternCatArg() : CatArg() {}
|
||||||
|
|
||||||
void RenderInto(ZVal* zframe, int slot, char*& res) override {
|
void RenderInto(const ZVal& zv, char*& res) override {
|
||||||
*(res++) = '/';
|
*(res++) = '/';
|
||||||
strcpy(res, text);
|
strcpy(res, text);
|
||||||
res += n;
|
res += n;
|
||||||
|
@ -72,7 +72,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
size_t ComputeMaxSize(ZVal* zframe, int slot) override;
|
size_t ComputeMaxSize(const ZVal& zv) override;
|
||||||
|
|
||||||
const char* text = nullptr;
|
const char* text = nullptr;
|
||||||
size_t n = 0;
|
size_t n = 0;
|
||||||
|
@ -82,7 +82,7 @@ class DescCatArg : public CatArg {
|
||||||
public:
|
public:
|
||||||
DescCatArg(TypePtr _t) : CatArg(), t(std::move(_t)) { d.SetStyle(RAW_STYLE); }
|
DescCatArg(TypePtr _t) : CatArg(), t(std::move(_t)) { d.SetStyle(RAW_STYLE); }
|
||||||
|
|
||||||
void RenderInto(ZVal* zframe, int slot, char*& res) override {
|
void RenderInto(const ZVal& zv, char*& res) override {
|
||||||
auto n = d.Len();
|
auto n = d.Len();
|
||||||
memcpy(res, d.Bytes(), n);
|
memcpy(res, d.Bytes(), n);
|
||||||
res += n;
|
res += n;
|
||||||
|
@ -90,8 +90,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
size_t ComputeMaxSize(ZVal* zframe, int slot) override {
|
size_t ComputeMaxSize(const ZVal& zv) override {
|
||||||
zframe[slot].ToVal(t)->Describe(&d);
|
zv.ToVal(t)->Describe(&d);
|
||||||
return d.Len();
|
return d.Len();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2455,16 +2455,15 @@ eval auto formatted_val = ZVal(ZAM_val_cat($1.ToVal(z.t)));
|
||||||
|
|
||||||
internal-op CatN
|
internal-op CatN
|
||||||
type V
|
type V
|
||||||
eval auto aux = z.aux;
|
eval CatNPre()
|
||||||
auto& ca = aux->cat_args;
|
|
||||||
int n = aux->n;
|
int n = aux->n;
|
||||||
size_t max_size = 0;
|
size_t max_size = 0;
|
||||||
for ( int i = 0; i < n; ++i )
|
for ( int i = 0; i < n; ++i )
|
||||||
max_size += ca[i]->MaxSize(frame, aux->elems[i].Slot());
|
max_size += ca[i]->MaxSize(aux->elems[i].ToDirectZVal(frame));
|
||||||
auto res = new char[max_size + /* slop */ n + 1];
|
auto res = new char[max_size + /* slop */ n + 1];
|
||||||
auto res_p = res;
|
auto res_p = res;
|
||||||
for ( int i = 0; i < n; ++i )
|
for ( int i = 0; i < n; ++i )
|
||||||
ca[i]->RenderInto(frame, aux->elems[i].Slot(), res_p);
|
ca[i]->RenderInto(aux->elems[i].ToDirectZVal(frame), res_p);
|
||||||
*res_p = '\0';
|
*res_p = '\0';
|
||||||
auto s = new String(true, reinterpret_cast<byte_vec>(res), res_p - res);
|
auto s = new String(true, reinterpret_cast<byte_vec>(res), res_p - res);
|
||||||
Cat1Op($$, ZVal(new StringVal(s)))
|
Cat1Op($$, ZVal(new StringVal(s)))
|
||||||
|
@ -2485,113 +2484,113 @@ macro CatNPost(lhs)
|
||||||
internal-op Cat2
|
internal-op Cat2
|
||||||
type V
|
type V
|
||||||
eval CatNPre()
|
eval CatNPre()
|
||||||
size_t max_size = ca[0]->MaxSize(frame, aux->elems[0].Slot());
|
size_t max_size = ca[0]->MaxSize(aux->elems[0].ToDirectZVal(frame));
|
||||||
max_size += ca[1]->MaxSize(frame, aux->elems[1].Slot());
|
max_size += ca[1]->MaxSize(aux->elems[1].ToDirectZVal(frame));
|
||||||
CatNMid()
|
CatNMid()
|
||||||
ca[0]->RenderInto(frame, aux->elems[0].Slot(), res_p);
|
ca[0]->RenderInto(aux->elems[0].ToDirectZVal(frame), res_p);
|
||||||
ca[1]->RenderInto(frame, aux->elems[1].Slot(), res_p);
|
ca[1]->RenderInto(aux->elems[1].ToDirectZVal(frame), res_p);
|
||||||
CatNPost($$)
|
CatNPost($$)
|
||||||
|
|
||||||
internal-op Cat3
|
internal-op Cat3
|
||||||
type V
|
type V
|
||||||
eval CatNPre()
|
eval CatNPre()
|
||||||
size_t max_size = ca[0]->MaxSize(frame, aux->elems[0].Slot());
|
size_t max_size = ca[0]->MaxSize(aux->elems[0].ToDirectZVal(frame));
|
||||||
max_size += ca[1]->MaxSize(frame, aux->elems[1].Slot());
|
max_size += ca[1]->MaxSize(aux->elems[1].ToDirectZVal(frame));
|
||||||
max_size += ca[2]->MaxSize(frame, aux->elems[2].Slot());
|
max_size += ca[2]->MaxSize(aux->elems[2].ToDirectZVal(frame));
|
||||||
CatNMid()
|
CatNMid()
|
||||||
ca[0]->RenderInto(frame, aux->elems[0].Slot(), res_p);
|
ca[0]->RenderInto(aux->elems[0].ToDirectZVal(frame), res_p);
|
||||||
ca[1]->RenderInto(frame, aux->elems[1].Slot(), res_p);
|
ca[1]->RenderInto(aux->elems[1].ToDirectZVal(frame), res_p);
|
||||||
ca[2]->RenderInto(frame, aux->elems[2].Slot(), res_p);
|
ca[2]->RenderInto(aux->elems[2].ToDirectZVal(frame), res_p);
|
||||||
CatNPost($$)
|
CatNPost($$)
|
||||||
|
|
||||||
internal-op Cat4
|
internal-op Cat4
|
||||||
type V
|
type V
|
||||||
eval CatNPre()
|
eval CatNPre()
|
||||||
size_t max_size = ca[0]->MaxSize(frame, aux->elems[0].Slot());
|
size_t max_size = ca[0]->MaxSize(aux->elems[0].ToDirectZVal(frame));
|
||||||
max_size += ca[1]->MaxSize(frame, aux->elems[1].Slot());
|
max_size += ca[1]->MaxSize(aux->elems[1].ToDirectZVal(frame));
|
||||||
max_size += ca[2]->MaxSize(frame, aux->elems[2].Slot());
|
max_size += ca[2]->MaxSize(aux->elems[2].ToDirectZVal(frame));
|
||||||
max_size += ca[3]->MaxSize(frame, aux->elems[3].Slot());
|
max_size += ca[3]->MaxSize(aux->elems[3].ToDirectZVal(frame));
|
||||||
CatNMid()
|
CatNMid()
|
||||||
ca[0]->RenderInto(frame, aux->elems[0].Slot(), res_p);
|
ca[0]->RenderInto(aux->elems[0].ToDirectZVal(frame), res_p);
|
||||||
ca[1]->RenderInto(frame, aux->elems[1].Slot(), res_p);
|
ca[1]->RenderInto(aux->elems[1].ToDirectZVal(frame), res_p);
|
||||||
ca[2]->RenderInto(frame, aux->elems[2].Slot(), res_p);
|
ca[2]->RenderInto(aux->elems[2].ToDirectZVal(frame), res_p);
|
||||||
ca[3]->RenderInto(frame, aux->elems[3].Slot(), res_p);
|
ca[3]->RenderInto(aux->elems[3].ToDirectZVal(frame), res_p);
|
||||||
CatNPost($$)
|
CatNPost($$)
|
||||||
|
|
||||||
internal-op Cat5
|
internal-op Cat5
|
||||||
type V
|
type V
|
||||||
eval CatNPre()
|
eval CatNPre()
|
||||||
size_t max_size = ca[0]->MaxSize(frame, aux->elems[0].Slot());
|
size_t max_size = ca[0]->MaxSize(aux->elems[0].ToDirectZVal(frame));
|
||||||
max_size += ca[1]->MaxSize(frame, aux->elems[1].Slot());
|
max_size += ca[1]->MaxSize(aux->elems[1].ToDirectZVal(frame));
|
||||||
max_size += ca[2]->MaxSize(frame, aux->elems[2].Slot());
|
max_size += ca[2]->MaxSize(aux->elems[2].ToDirectZVal(frame));
|
||||||
max_size += ca[3]->MaxSize(frame, aux->elems[3].Slot());
|
max_size += ca[3]->MaxSize(aux->elems[3].ToDirectZVal(frame));
|
||||||
max_size += ca[4]->MaxSize(frame, aux->elems[4].Slot());
|
max_size += ca[4]->MaxSize(aux->elems[4].ToDirectZVal(frame));
|
||||||
CatNMid()
|
CatNMid()
|
||||||
ca[0]->RenderInto(frame, aux->elems[0].Slot(), res_p);
|
ca[0]->RenderInto(aux->elems[0].ToDirectZVal(frame), res_p);
|
||||||
ca[1]->RenderInto(frame, aux->elems[1].Slot(), res_p);
|
ca[1]->RenderInto(aux->elems[1].ToDirectZVal(frame), res_p);
|
||||||
ca[2]->RenderInto(frame, aux->elems[2].Slot(), res_p);
|
ca[2]->RenderInto(aux->elems[2].ToDirectZVal(frame), res_p);
|
||||||
ca[3]->RenderInto(frame, aux->elems[3].Slot(), res_p);
|
ca[3]->RenderInto(aux->elems[3].ToDirectZVal(frame), res_p);
|
||||||
ca[4]->RenderInto(frame, aux->elems[4].Slot(), res_p);
|
ca[4]->RenderInto(aux->elems[4].ToDirectZVal(frame), res_p);
|
||||||
CatNPost($$)
|
CatNPost($$)
|
||||||
|
|
||||||
internal-op Cat6
|
internal-op Cat6
|
||||||
type V
|
type V
|
||||||
eval CatNPre()
|
eval CatNPre()
|
||||||
size_t max_size = ca[0]->MaxSize(frame, aux->elems[0].Slot());
|
size_t max_size = ca[0]->MaxSize(aux->elems[0].ToDirectZVal(frame));
|
||||||
max_size += ca[1]->MaxSize(frame, aux->elems[1].Slot());
|
max_size += ca[1]->MaxSize(aux->elems[1].ToDirectZVal(frame));
|
||||||
max_size += ca[2]->MaxSize(frame, aux->elems[2].Slot());
|
max_size += ca[2]->MaxSize(aux->elems[2].ToDirectZVal(frame));
|
||||||
max_size += ca[3]->MaxSize(frame, aux->elems[3].Slot());
|
max_size += ca[3]->MaxSize(aux->elems[3].ToDirectZVal(frame));
|
||||||
max_size += ca[4]->MaxSize(frame, aux->elems[4].Slot());
|
max_size += ca[4]->MaxSize(aux->elems[4].ToDirectZVal(frame));
|
||||||
max_size += ca[5]->MaxSize(frame, aux->elems[5].Slot());
|
max_size += ca[5]->MaxSize(aux->elems[5].ToDirectZVal(frame));
|
||||||
CatNMid()
|
CatNMid()
|
||||||
ca[0]->RenderInto(frame, aux->elems[0].Slot(), res_p);
|
ca[0]->RenderInto(aux->elems[0].ToDirectZVal(frame), res_p);
|
||||||
ca[1]->RenderInto(frame, aux->elems[1].Slot(), res_p);
|
ca[1]->RenderInto(aux->elems[1].ToDirectZVal(frame), res_p);
|
||||||
ca[2]->RenderInto(frame, aux->elems[2].Slot(), res_p);
|
ca[2]->RenderInto(aux->elems[2].ToDirectZVal(frame), res_p);
|
||||||
ca[3]->RenderInto(frame, aux->elems[3].Slot(), res_p);
|
ca[3]->RenderInto(aux->elems[3].ToDirectZVal(frame), res_p);
|
||||||
ca[4]->RenderInto(frame, aux->elems[4].Slot(), res_p);
|
ca[4]->RenderInto(aux->elems[4].ToDirectZVal(frame), res_p);
|
||||||
ca[5]->RenderInto(frame, aux->elems[5].Slot(), res_p);
|
ca[5]->RenderInto(aux->elems[5].ToDirectZVal(frame), res_p);
|
||||||
CatNPost($$)
|
CatNPost($$)
|
||||||
|
|
||||||
internal-op Cat7
|
internal-op Cat7
|
||||||
type V
|
type V
|
||||||
eval CatNPre()
|
eval CatNPre()
|
||||||
size_t max_size = ca[0]->MaxSize(frame, aux->elems[0].Slot());
|
size_t max_size = ca[0]->MaxSize(aux->elems[0].ToDirectZVal(frame));
|
||||||
max_size += ca[1]->MaxSize(frame, aux->elems[1].Slot());
|
max_size += ca[1]->MaxSize(aux->elems[1].ToDirectZVal(frame));
|
||||||
max_size += ca[2]->MaxSize(frame, aux->elems[2].Slot());
|
max_size += ca[2]->MaxSize(aux->elems[2].ToDirectZVal(frame));
|
||||||
max_size += ca[3]->MaxSize(frame, aux->elems[3].Slot());
|
max_size += ca[3]->MaxSize(aux->elems[3].ToDirectZVal(frame));
|
||||||
max_size += ca[4]->MaxSize(frame, aux->elems[4].Slot());
|
max_size += ca[4]->MaxSize(aux->elems[4].ToDirectZVal(frame));
|
||||||
max_size += ca[5]->MaxSize(frame, aux->elems[5].Slot());
|
max_size += ca[5]->MaxSize(aux->elems[5].ToDirectZVal(frame));
|
||||||
max_size += ca[6]->MaxSize(frame, aux->elems[6].Slot());
|
max_size += ca[6]->MaxSize(aux->elems[6].ToDirectZVal(frame));
|
||||||
CatNMid()
|
CatNMid()
|
||||||
ca[0]->RenderInto(frame, aux->elems[0].Slot(), res_p);
|
ca[0]->RenderInto(aux->elems[0].ToDirectZVal(frame), res_p);
|
||||||
ca[1]->RenderInto(frame, aux->elems[1].Slot(), res_p);
|
ca[1]->RenderInto(aux->elems[1].ToDirectZVal(frame), res_p);
|
||||||
ca[2]->RenderInto(frame, aux->elems[2].Slot(), res_p);
|
ca[2]->RenderInto(aux->elems[2].ToDirectZVal(frame), res_p);
|
||||||
ca[3]->RenderInto(frame, aux->elems[3].Slot(), res_p);
|
ca[3]->RenderInto(aux->elems[3].ToDirectZVal(frame), res_p);
|
||||||
ca[4]->RenderInto(frame, aux->elems[4].Slot(), res_p);
|
ca[4]->RenderInto(aux->elems[4].ToDirectZVal(frame), res_p);
|
||||||
ca[5]->RenderInto(frame, aux->elems[5].Slot(), res_p);
|
ca[5]->RenderInto(aux->elems[5].ToDirectZVal(frame), res_p);
|
||||||
ca[6]->RenderInto(frame, aux->elems[6].Slot(), res_p);
|
ca[6]->RenderInto(aux->elems[6].ToDirectZVal(frame), res_p);
|
||||||
CatNPost($$)
|
CatNPost($$)
|
||||||
|
|
||||||
internal-op Cat8
|
internal-op Cat8
|
||||||
type V
|
type V
|
||||||
eval CatNPre()
|
eval CatNPre()
|
||||||
size_t max_size = ca[0]->MaxSize(frame, aux->elems[0].Slot());
|
size_t max_size = ca[0]->MaxSize(aux->elems[0].ToDirectZVal(frame));
|
||||||
max_size += ca[1]->MaxSize(frame, aux->elems[1].Slot());
|
max_size += ca[1]->MaxSize(aux->elems[1].ToDirectZVal(frame));
|
||||||
max_size += ca[2]->MaxSize(frame, aux->elems[2].Slot());
|
max_size += ca[2]->MaxSize(aux->elems[2].ToDirectZVal(frame));
|
||||||
max_size += ca[3]->MaxSize(frame, aux->elems[3].Slot());
|
max_size += ca[3]->MaxSize(aux->elems[3].ToDirectZVal(frame));
|
||||||
max_size += ca[4]->MaxSize(frame, aux->elems[4].Slot());
|
max_size += ca[4]->MaxSize(aux->elems[4].ToDirectZVal(frame));
|
||||||
max_size += ca[5]->MaxSize(frame, aux->elems[5].Slot());
|
max_size += ca[5]->MaxSize(aux->elems[5].ToDirectZVal(frame));
|
||||||
max_size += ca[6]->MaxSize(frame, aux->elems[6].Slot());
|
max_size += ca[6]->MaxSize(aux->elems[6].ToDirectZVal(frame));
|
||||||
max_size += ca[7]->MaxSize(frame, aux->elems[7].Slot());
|
max_size += ca[7]->MaxSize(aux->elems[7].ToDirectZVal(frame));
|
||||||
CatNMid()
|
CatNMid()
|
||||||
ca[0]->RenderInto(frame, aux->elems[0].Slot(), res_p);
|
ca[0]->RenderInto(aux->elems[0].ToDirectZVal(frame), res_p);
|
||||||
ca[1]->RenderInto(frame, aux->elems[1].Slot(), res_p);
|
ca[1]->RenderInto(aux->elems[1].ToDirectZVal(frame), res_p);
|
||||||
ca[2]->RenderInto(frame, aux->elems[2].Slot(), res_p);
|
ca[2]->RenderInto(aux->elems[2].ToDirectZVal(frame), res_p);
|
||||||
ca[3]->RenderInto(frame, aux->elems[3].Slot(), res_p);
|
ca[3]->RenderInto(aux->elems[3].ToDirectZVal(frame), res_p);
|
||||||
ca[4]->RenderInto(frame, aux->elems[4].Slot(), res_p);
|
ca[4]->RenderInto(aux->elems[4].ToDirectZVal(frame), res_p);
|
||||||
ca[5]->RenderInto(frame, aux->elems[5].Slot(), res_p);
|
ca[5]->RenderInto(aux->elems[5].ToDirectZVal(frame), res_p);
|
||||||
ca[6]->RenderInto(frame, aux->elems[6].Slot(), res_p);
|
ca[6]->RenderInto(aux->elems[6].ToDirectZVal(frame), res_p);
|
||||||
ca[7]->RenderInto(frame, aux->elems[7].Slot(), res_p);
|
ca[7]->RenderInto(aux->elems[7].ToDirectZVal(frame), res_p);
|
||||||
CatNPost($$)
|
CatNPost($$)
|
||||||
|
|
||||||
internal-op Analyzer-Name
|
internal-op Analyzer-Name
|
||||||
|
|
|
@ -337,6 +337,21 @@ public:
|
||||||
return zv;
|
return zv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The same, but for read-only access for which memory-management is
|
||||||
|
// not required.
|
||||||
|
const ZVal& ToDirectZVal(const ZVal* frame) const {
|
||||||
|
if ( c )
|
||||||
|
return zc;
|
||||||
|
if ( i >= 0 )
|
||||||
|
return frame[i];
|
||||||
|
|
||||||
|
// Currently the way we use AuxElem's we shouldn't get here, but
|
||||||
|
// just in case we do, return something sound rather than mis-indexing
|
||||||
|
// the frame.
|
||||||
|
static ZVal null_zval;
|
||||||
|
return null_zval;
|
||||||
|
}
|
||||||
|
|
||||||
int Slot() const { return i; }
|
int Slot() const { return i; }
|
||||||
int IntVal() const { return i; }
|
int IntVal() const { return i; }
|
||||||
const ValPtr& Constant() const { return c; }
|
const ValPtr& Constant() const { return c; }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue