Skip to content

Commit 019e89a

Browse files
committed
#343 Closure var dumps, #350 Allow a trailing comma in function calls.
1 parent fd10dd7 commit 019e89a

File tree

10 files changed

+20
-14
lines changed

10 files changed

+20
-14
lines changed

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
@@ -1238,7 +1238,7 @@ else if (!additional.isEmpty())
12381238
}
12391239

12401240
writePushEnv();
1241-
writePushParameters(function.getParameters(), additional.toArray(new Memory[0]));
1241+
writePushParameters(function.getParameters(), additional.toArray(Memory.CONST_EMPTY_ARRAY));
12421242
writeSysStaticCall(
12431243
compileClass.getNativeClass(),
12441244
methodEntity.getName(),

jphp-core/src/org/develnext/jphp/core/syntax/generators/manually/SimpleExprGenerator.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,11 @@ protected CallExprToken processCall(Token previous, Token current, ListIterator<
464464
}
465465
}
466466

467-
if (isClosedBrace(nextToken(iterator), SIMPLE)) {
467+
Token tk = nextToken(iterator);
468+
if (isClosedBrace(tk, SIMPLE)) {
469+
break;
470+
} else if (param == null && tk instanceof CommaToken) {
471+
nextToken(iterator);
468472
break;
469473
}
470474

jphp-core/tests/resources/closures/simple.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
return $i + $external;
1010
};
1111

12-
if ($func1(2) !== 3)
12+
if ($func1(2,) !== 3)
1313
return 'fail_1';
1414

1515
if ($func2(2) !== 4)

jphp-core/tests/resources/unset/complex.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
$y = array('x' => new stdClass());
55
$y['x']->prop = 'fail';
66

7-
unset($x, $y['x']->prop);
7+
unset($x, $y['x']->prop,);
88

99
$foobar = 'foobar';
1010
unset(${'foobar'});

jphp-core/tests/resources/unset/object_value.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
$obj->y = 'fail';
66
$obj->z = 'fail';
77

8-
unset($obj->y, $obj->z);
8+
unset($obj->y, $obj->z,);
99

1010
return $obj->x . $obj->y . $obj->z;

jphp-runtime/src/php/runtime/ext/core/reflection/ReflectionMethod.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ public Memory setAccessible(Environment env, Memory... args){
200200
public Memory invoke(Environment env, Memory... args) throws Throwable {
201201
Memory self = args[0];
202202

203-
Memory[] arguments = args.length == 1 ? new Memory[0] : Arrays.copyOfRange(args, 1, args.length - 1);
203+
Memory[] arguments = args.length == 1 ? Memory.CONST_EMPTY_ARRAY : Arrays.copyOfRange(args, 1, args.length - 1);
204204
Invoker invoker;
205205

206206
if (self.isNull()) {

jphp-runtime/src/php/runtime/lang/Closure.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public Closure(Environment env, ClassEntity closure, Memory self, String scope,
5555
abstract public Memory __invoke(Environment env, Memory... args) throws Throwable;
5656

5757
public Memory[] getUses() {
58-
return uses == null ? new Memory[0] : uses;
58+
return uses == null ? Memory.CONST_EMPTY_ARRAY : uses;
5959
}
6060

6161
@Signature({@Arg("prop"), @Arg("value")})
@@ -139,6 +139,10 @@ public Memory bindTo(Environment env, Memory... args) throws CloneNotSupportedEx
139139
public Memory __debugInfo(Environment env, Memory... args) {
140140
ArrayMemory r = new ArrayMemory();
141141

142+
if (uses != null && uses.length > 0) {
143+
r.put("uses", ArrayMemory.of(uses));
144+
}
145+
142146
if (self.isNotNull()) {
143147
r.put("this", self.toImmutable());
144148
}
@@ -177,7 +181,7 @@ public ClosureInvoker(Environment env, ClassEntity clazz) {
177181
}
178182

179183
public ClosureInvoker(Environment env, Invoker invoker) {
180-
super(env, env.fetchClass(ClosureInvoker.class), Memory.NULL, "", new Memory[0]);
184+
super(env, env.fetchClass(ClosureInvoker.class), Memory.NULL, "", Memory.CONST_EMPTY_ARRAY);
181185
this.invoker = invoker;
182186
}
183187

jphp-runtime/src/php/runtime/reflection/FunctionEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ public Closure getClosure(Environment env) {
122122
closureEntity1.addMethod(m, null);
123123
closureEntity1.doneDeclare();
124124

125-
Closure tmp = new Closure(env, closureEntity1, new ObjectMemory(env.getLateObject()), null, new Memory[0]){
125+
Closure tmp = new Closure(env, closureEntity1, new ObjectMemory(env.getLateObject()), null, Memory.CONST_EMPTY_ARRAY){
126126
@Override
127127
public Memory __invoke(Environment e, Memory... args) {
128128
try {

jphp-runtime/src/php/runtime/reflection/MethodEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public Closure getClosure(Environment env, final IObject object) {
143143
closureEntity1.addMethod(m, null);
144144
closureEntity1.doneDeclare();
145145

146-
Closure tmp = new Closure(env, closureEntity1, new ObjectMemory(env.getLateObject()), clazz.getName(), new Memory[0]){
146+
Closure tmp = new Closure(env, closureEntity1, new ObjectMemory(env.getLateObject()), clazz.getName(), Memory.CONST_EMPTY_ARRAY){
147147
@Override
148148
public Memory __invoke(Environment e, Memory... args) {
149149
try {

jphp-runtime/src/php/runtime/reflection/helper/GeneratorEntity.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,11 @@ public boolean equals(Object o) {
6767
public IObject newObjectWithoutConstruct(Environment env) {
6868
IObject object;
6969
try {
70-
object = (IObject) nativeConstructor.newInstance(env, this, env.getLateObject(), new Memory[0]);
70+
object = (IObject) nativeConstructor.newInstance(env, this, env.getLateObject(), Memory.CONST_EMPTY_ARRAY);
7171
} catch (InvocationTargetException e){
7272
env.__throwException(e);
7373
return null;
74-
} catch (InstantiationException e) {
75-
throw new CriticalException(e);
76-
} catch (IllegalAccessException e) {
74+
} catch (InstantiationException | IllegalAccessException e) {
7775
throw new CriticalException(e);
7876
}
7977
return object;

0 commit comments

Comments
 (0)