Fix a type bug in BindS and BindG

They should load as a V not a C.
Esse commit está contido em:
Jordan DeLong
2013-05-30 19:53:09 -07:00
commit de sgolemon
commit 9adc532349
6 arquivos alterados com 56 adições e 1 exclusões
@@ -2797,7 +2797,7 @@ template<class CheckSupportedFun, class EmitLdAddrFun>
void HhbcTranslator::emitBind(const StringData* name,
CheckSupportedFun checkSupported,
EmitLdAddrFun emitLdAddr) {
if (!(this->*checkSupported)(name, topC(0)->type(), 1)) return;
if (!(this->*checkSupported)(name, topV(0)->type(), 1)) return;
SSATmp* src = popV();
emitBindMem((this->*emitLdAddr)(name), src);
}
@@ -657,6 +657,7 @@ private:
SSATmp* popA() { return pop(Type::Cls); }
SSATmp* popF() { return pop(Type::Gen); }
SSATmp* topC(uint32_t i = 0) { return top(Type::Cell, i); }
SSATmp* topV(uint32_t i = 0) { return top(Type::BoxedCell, i); }
std::vector<SSATmp*> peekSpillValues() const;
SSATmp* emitSpillStack(Trace* t, SSATmp* sp,
const std::vector<SSATmp*>& spillVals);
+19
Ver Arquivo
@@ -0,0 +1,19 @@
<?php
class C {
public static $blar;
public static $blor;
public static function buh(&$thinger = null) {
self::$blar = &$thinger;
self::$blor = &self::$blar;
}
}
function main() {
C::buh();
var_dump(C::$blar);
var_dump(C::$blor);
}
main();
+2
Ver Arquivo
@@ -0,0 +1,2 @@
NULL
NULL
+33
Ver Arquivo
@@ -0,0 +1,33 @@
.main {
FPushFuncD 0 "main"
FCall 0
PopR
Int 1
RetC
}
.function tracelet_breaker() {
Int 1
RetC
}
.function main() {
String "global_var"
Null
Box
String "tracelet_breaker"
FPushFunc 0
FCall 0
UnboxR
SetL $foo
PopC
BindG
PopV
Int 1
RetC
}