-
Notifications
You must be signed in to change notification settings - Fork 36
Expand file tree
/
Copy path_getstatic.php
More file actions
54 lines (45 loc) · 1.51 KB
/
_getstatic.php
File metadata and controls
54 lines (45 loc) · 1.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
declare(strict_types=1);
namespace PHPJava\Kernel\Mnemonics;
use PHPJava\Core\JavaClass;
use PHPJava\Core\JavaClassInterface;
use PHPJava\Utilities\Formatter;
final class _getstatic extends AbstractOperationCode implements OperationCodeInterface
{
protected $isStackingOperation = true;
public function getOperands(): ?Operands
{
parent::getOperands();
if ($this->operands !== null) {
return $this->operands;
}
$indexbyte = $this->readUnsignedShort();
return $this->operands = new Operands(
['indexbyte', $indexbyte, ['indexbyte1', 'indexbyte2']]
);
}
public function execute(): void
{
parent::execute();
$cpInfo = $this->getConstantPool();
$cp = $cpInfo[$this->getOperands()['indexbyte']];
$class = $cpInfo[$cpInfo[$cp->getClassIndex()]->getClassIndex()]->getString();
$signature = Formatter::parseSignature($cpInfo[$cpInfo[$cp->getNameAndTypeIndex()]->getDescriptorIndex()]->getString());
$fieldName = $cpInfo[$cpInfo[$cp->getNameAndTypeIndex()]->getNameIndex()]->getString();
$classObject = JavaClass::load(
$class,
$this->javaClass->getOptions(),
false
);
/**
* @var JavaClassInterface $className
*/
$this->pushToOperandStack(
$classObject
->getInvoker()
->getStatic()
->getFields()
->get($fieldName)
);
}
}