public CallStackItem[] getSnapshot(){ if (callStackTop < 0) { return new CallStackItem[] { }; } CallStackItem[] result = new CallStackItem[callStackTop]; int i = 0; for(CallStackItem el : callStack){ if (i == callStackTop) break; result[i] = new CallStackItem(el); i++; } return result; }
public CallStackItem push(TraceInfo trace, IObject self, Memory[] args, String function, String clazz, String staticClazz) { if (callStackTop >= callStack.length){ CallStackItem[] newCallStack = new CallStackItem[callStack.length * 2]; System.arraycopy(callStack, 0, newCallStack, 0, callStack.length); callStack = newCallStack; } CallStackItem result; if (callStackTop < maxCallStackTop) { result = callStack[callStackTop++]; result.setParameters(trace, self, args, function, clazz, staticClazz); } else { callStack[callStackTop++] = result = new CallStackItem(trace, self, args, function, clazz, staticClazz); } maxCallStackTop = callStackTop; return result; }
public CallStackItem pushCallEx(TraceInfo trace, IObject self, Memory[] args, String function, ClassEntity clazz, String staticClazz) { CallStackItem stackItem = new CallStackItem(trace, self, args, function, clazz.getName(), staticClazz); stackItem.classEntity = clazz; return getCallStack().push(stackItem); }
public CallStackItem pushCallEx(TraceInfo trace, IObject self, Memory[] args, String function, ClassEntity clazz, ClassEntity staticClazz) { CallStackItem stackItem = new CallStackItem(trace, self, args, function, clazz.getName(), staticClazz.getName()); stackItem.classEntity = clazz; stackItem.staticClassEntity = staticClazz; return getCallStack().push(stackItem); }
protected void triggerError(ErrorException err) { ErrorType type = err.getType(); if (type.isFatal() || isHandleErrors(type)) { lastMessage = new CustomSystemMessage( err.getType(), new CallStackItem(err.getTraceInfo()), new Messages.Item(err.getMessage()) ); throw err; } }
public void error(TraceInfo trace, ErrorType type, Messages.Item message, Object... args) { if (type.isFatal()) { if (scope.getLangMode() == LangMode.MODERN) { if (type == E_PARSE) { exception(trace, new BaseParseError(this), message.fetch(args)); } else { exception(trace, new BaseError(this, type), message.fetch(args)); } } if (type.isHandled() && errorHandler != null && ErrorType.check(errorHandler.errorHandlerFlags, type)) { triggerMessage(new CustomSystemMessage(type, new CallStackItem(trace), message, args)); } else triggerError(new CustomErrorException(type, message.fetch(args), trace)); } else { triggerMessage(new CustomSystemMessage(type, new CallStackItem(trace), message, args)); } }
public Generator(final Environment env, ClassEntity generator, Memory self, Memory[] uses) { super(env, generator); if (generator == null) { throw new CriticalException("Unable to create generator"); } env.registerObjectInGC(this); this.self = self; this.uses = uses; CallStackItem stackItem = env.peekCall(0); this.callStack = env.getCallStack(); this.callStackItem = stackItem == null ? null : new CallStackItem(stackItem); gen = new php.runtime.util.generator.Generator<Bucket>() { @Override protected void run(YieldAdapterIterator<Bucket> yieldAdapter) { try { currentGenerator.set(Generator.this); env.__replaceCallStack(Generator.this.callStack); Generator.this._run(env); } catch (Throwable e) { lastThrowable = e; Generator.this.setCurrent(Memory.NULL); } } }; iterator = gen.iterator(); }
CallStackItem stackItem = new CallStackItem(bootstrap.getTrace()); environment.pushCall(stackItem); try {
protected Memory _next(Environment env) { if (busy) { env.error(env.trace(), "Cannot resume an already running generator"); } boolean x2 = false; if (callStackItem != null) { env.pushCall(new CallStackItem(callStackItem)); x2 = true; } try { counter += 1; busy = true; return iterator.next().getValue(); } catch (NoSuchElementException e) { valid = false; callStackItem = null; } finally { if (x2) env.popCall(); busy = false; checkThrow(); } return null; }