Skip to content

Commit e47231b

Browse files
committed
Improve performance of new operator.
1 parent 5133385 commit e47231b

File tree

27 files changed

+230
-123
lines changed

27 files changed

+230
-123
lines changed

exts/jphp-json-ext/src/main/java/org/develnext/jphp/json/gson/MemoryDeserializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ else if (jsonPrimitive.isNumber()) {
6666
} else if (json.isJsonObject()) {
6767
JsonObject jsonObject = json.getAsJsonObject();
6868
StdClass stdClass = assoc ? null : new StdClass(env.get());
69-
ArrayMemory array = assoc ? new ArrayMemory() : stdClass.getProperties();
69+
ArrayMemory array = assoc ? new ArrayMemory() : stdClass.getPropertiesForChange();
7070

7171
for(Map.Entry<String, JsonElement> el : jsonObject.entrySet()){
7272
String key = el.getKey();

exts/jphp-zend-ext/src/main/java/org/develnext/jphp/zend/ext/standard/date/DateInterval.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ private void min2Digit(StringBuilder buff, long years) {
334334
@Override
335335
public ArrayMemory getProperties() {
336336
ArrayMemory props = super.getProperties();
337+
props.checkCopied();
337338

338339
props.putAsKeyString("y", y);
339340
props.putAsKeyString("m", m);

exts/jphp-zend-ext/src/main/java/org/develnext/jphp/zend/ext/standard/date/DatePeriod.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ public static Memory __set_state(Environment env, TraceInfo traceInfo, Memory ar
6363
datePeriod.end = array.refOfIndex(traceInfo, "end");
6464
datePeriod.current = array.refOfIndex(traceInfo, "current");
6565

66-
6766
return new ObjectMemory(datePeriod);
6867
}
6968

exts/jphp-zend-ext/src/main/java/org/develnext/jphp/zend/ext/standard/date/DateTimeZone.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,13 @@ public class DateTimeZone extends BaseObject {
5151
@Property
5252
public static final int PER_COUNTRY = 4096;
5353
private static final Memory ZERO_OFFSET = StringMemory.valueOf("+00:00");
54-
@Property("timezone")
55-
Memory timezone = Memory.UNDEFINED;
54+
5655
@Property("timezone_type")
5756
Memory type = Memory.UNDEFINED;
57+
58+
@Property("timezone")
59+
Memory timezone = Memory.UNDEFINED;
60+
5861
private ZoneId nativeZone;
5962

6063
public DateTimeZone(Environment env) {
@@ -131,7 +134,8 @@ public Memory __construct(Environment env, TraceInfo traceInfo, StringMemory arg
131134
env.exception(traceInfo, Messages.ERR_TIMEZONE_NULL_BYTE, "DateTimeZone::__construct()");
132135
}
133136
init(zone);
134-
return new ObjectMemory(this);
137+
getProperties();
138+
return ObjectMemory.valueOf(this);
135139
}
136140

137141
private void init(String zone) {
@@ -177,13 +181,15 @@ public Memory getTransitions(Environment env, TraceInfo traceInfo) {
177181
@Override
178182
public ArrayMemory getProperties() {
179183
ArrayMemory props = super.getProperties();
180-
props.refOfIndex("timezone_type").assign(type);
184+
181185
if (type.toInteger() == 1) {
182186
props.refOfIndex("timezone").assign(nativeZone.toString());
183187
} else {
184188
props.refOfIndex("timezone").assign(timezone);
185189
}
186190

191+
props.refOfIndex("timezone_type").assign(type);
192+
187193
return props;
188194
}
189195
}

exts/jphp-zend-ext/src/main/tests/org/develnext/jphp/zend/ext/json/JsonFunctionsTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ public void testObjectJsonEncode() {
6969
assertEquals("{\"0\":100,\"1\":500,\"x\":100500}", JsonFunctions.json_encode(array));
7070

7171
StdClass stdClass = new StdClass(env);
72-
stdClass.getProperties().put("x", new LongMemory(100));
73-
stdClass.getProperties().put("y", new LongMemory(500));
74-
stdClass.getProperties().put("\0*\0z", new LongMemory(100500));
72+
stdClass.getProperties().refOfIndex("x").assign(new LongMemory(100));
73+
stdClass.getProperties().refOfIndex("y").assign(new LongMemory(500));
74+
stdClass.getProperties().refOfIndex("\0*\0z").assign(new LongMemory(100500));
7575

7676
assertEquals("{\"x\":100,\"y\":500}", JsonFunctions.json_encode(new ObjectMemory(stdClass)));
7777
}

exts/jphp-zend-ext/src/main/tests/resources/ext/date/DatePeriod_set_state.phpt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ var_dump($datePeriodObjectNew);
2020
?>
2121
--EXPECTF--
2222
object(DatePeriod)#%d (6) {
23+
["recurrences"]=>
24+
int(25)
25+
["include_start_date"]=>
26+
bool(true)
2327
["start"]=>
2428
object(DateTime)#%d (3) {
2529
["date"]=>
@@ -54,8 +58,4 @@ object(DatePeriod)#%d (6) {
5458
["days"]=>
5559
int(0)
5660
}
57-
["recurrences"]=>
58-
int(25)
59-
["include_start_date"]=>
60-
bool(true)
61-
}
61+
}

exts/jphp-zend-ext/src/main/tests/resources/ext/date/DateTimeZone_set_state.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ object(DateTimeZone)#%d (2) {
2020
int(3)
2121
["timezone"]=>
2222
string(3) "UTC"
23-
}
23+
}

exts/jphp-zend-ext/src/main/tests/resources/ext/date/bug52738.phpt

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,30 @@ echo $I->unit."\n";
1313
$I->unit = 42;
1414
echo $I->unit."\n";
1515
$I->d++;
16-
print_r($I);
17-
--EXPECT--
16+
var_dump($I);
17+
--EXPECTF--
1818
1
1919
2
2020
42
21-
di Object
22-
(
23-
[y] => 0
24-
[m] => 0
25-
[d] => 11
26-
[h] => 0
27-
[i] => 0
28-
[s] => 0
29-
[f] => 0
30-
[invert] => 0
31-
[days] =>
32-
[unit] => 42
33-
)
21+
object(di)#%d (10) {
22+
["unit"]=>
23+
int(42)
24+
["y"]=>
25+
int(0)
26+
["m"]=>
27+
int(0)
28+
["d"]=>
29+
int(11)
30+
["h"]=>
31+
int(0)
32+
["i"]=>
33+
int(0)
34+
["s"]=>
35+
int(0)
36+
["f"]=>
37+
float(0)
38+
["invert"]=>
39+
int(0)
40+
["days"]=>
41+
bool(false)
42+
}

jphp-core/src/org/develnext/jphp/core/compiler/jvm/statement/ExpressionStmtCompiler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1142,7 +1142,7 @@ Memory writePushParentDynamicMethod(CallExprToken function, boolean returnValue,
11421142
return null;
11431143

11441144
StaticAccessExprToken dynamic = (StaticAccessExprToken) function.getName();
1145-
writeLineNumber(function);
1145+
//writeLineNumber(function);
11461146

11471147
writePushThis();
11481148
if (dynamic.getField() != null) {

jphp-core/src/org/develnext/jphp/core/compiler/jvm/statement/expr/value/StaticAccessValueCompiler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public void write(StaticAccessExprToken token, boolean returnValue) {
4141

4242
if (clazz instanceof ParentExprToken){
4343
expr.writePushParent(clazz);
44+
expr.writePushDupLowerCase();
4445
} else if (clazz instanceof NameToken){
4546
expr.writePushConstString(((NameToken) clazz).getName());
4647
expr.writePushConstString(((NameToken) clazz).getName().toLowerCase());

0 commit comments

Comments
 (0)