use of php.runtime.memory.StringMemory in project jphp by jphp-compiler.
the class BCMathFunctions method bcdiv.
public static Memory bcdiv(Environment env, Memory left, Memory right, int scale) {
BigDecimal bd1 = toBigDecimal(left);
BigDecimal bd2 = toBigDecimal(right);
if (bd2.compareTo(BigDecimal.ZERO) == 0) {
return Memory.NULL;
}
BigDecimal result;
if (scale > 0)
result = bd1.divide(bd2, scale + 2, RoundingMode.DOWN);
else
result = bd1.divide(bd2, 2, RoundingMode.DOWN);
result = result.setScale(scale, RoundingMode.DOWN);
return new StringMemory(result.toPlainString());
}
use of php.runtime.memory.StringMemory in project jphp by jphp-compiler.
the class DateFunctions method microtime.
public static Memory microtime(boolean getAsFloat) {
double now = System.currentTimeMillis() / 1000.0;
int s = (int) now;
return getAsFloat ? new DoubleMemory(now) : new StringMemory((Math.round((now - s) * 1000) / 1000) + " " + s);
}
use of php.runtime.memory.StringMemory in project jphp by jphp-compiler.
the class ReflectionFunction method setFunctionEntity.
public void setFunctionEntity(FunctionEntity functionEntity) {
this.functionEntity = functionEntity;
getProperties().put("name", new StringMemory(functionEntity.getName()));
}
use of php.runtime.memory.StringMemory in project jphp by jphp-compiler.
the class ReflectionMethod method setEntity.
public void setEntity(MethodEntity entity) {
this.methodEntity = entity;
getProperties().put("name", new StringMemory(entity.getName()));
getProperties().put("class", new StringMemory(entity.getClazz().getName()));
}
use of php.runtime.memory.StringMemory in project jphp by jphp-compiler.
the class ObjectInvokeHelper method invokeParentMethod.
public static Memory invokeParentMethod(Memory object, String methodName, String methodLowerName, Environment env, TraceInfo trace, Memory[] args) throws Throwable {
Memory[] passed = null;
boolean doublePop = false;
if (object.isNull()) {
ClassEntity parent = env.__getParentClass(trace);
return InvokeHelper.callStatic(env, trace, parent.getLowerName(), methodLowerName, parent.getName(), methodName, args, null, 0);
}
IObject iObject = ((ObjectMemory) object).value;
ClassEntity childClazz = iObject.getReflection();
ClassEntity clazz = env.getLastClassOnStack().getParent();
MethodEntity method;
if (clazz == null) {
env.error(trace, "Cannot access parent:: when current class scope has no parent");
return Memory.NULL;
}
if (methodName == null) {
method = childClazz.methodMagicInvoke != null ? childClazz.methodMagicInvoke : clazz.methodMagicInvoke;
} else {
method = clazz.findMethod(methodLowerName);
if (method == null && ((method = childClazz.methodMagicCall != null ? childClazz.methodMagicCall : clazz.methodMagicCall) != null)) {
passed = new Memory[] { new StringMemory(methodName), ArrayMemory.of(args) };
doublePop = true;
}
}
String className = clazz.getName();
if (method == null) {
if (methodName == null)
methodName = "__invoke";
env.error(trace, ErrorType.E_ERROR, Messages.ERR_CALL_TO_UNDEFINED_METHOD.fetch(className + "::" + methodName));
return Memory.NULL;
}
InvokeHelper.checkAccess(env, trace, method);
if (passed == null) {
passed = InvokeHelper.makeArguments(env, args, method.getParameters(), className, methodName, trace);
}
Memory result = method.getImmutableResult();
if (result != null)
return result;
try {
if (trace != null) {
env.pushCall(trace, iObject, args, methodName, method.getClazz().getName(), className);
if (doublePop)
env.pushCall(trace, iObject, passed, method.getName(), method.getClazz().getName(), className);
}
result = method.invokeDynamic(iObject, env, passed);
} catch (ArrayIndexOutOfBoundsException e) {
throw new CriticalException("Unable to call parent:: method " + className + "::" + methodName + "(), error = " + e.getMessage());
} finally {
if (trace != null) {
env.popCall();
if (doublePop)
env.popCall();
}
}
return result;
}
Aggregations