From e427da5c368ee2d591c34b3e66dd088601add7e4 Mon Sep 17 00:00:00 2001 From: Nikolaos Dimopoulos Date: Mon, 18 Feb 2019 11:26:18 -0500 Subject: [PATCH] T13687 debug hide vars (#13833) * [4.0.x] - Added unicode flag for email filter * [#13687] - Added testbed for quick testing using the server * [#13687] - Set the Utility as static * [#13687] - Adjusted tests * [#13687] - Corrected the change to the Utility class * [#13687] - Updating the changelog * [#13687] - Added Helper/Arr * [#13687] - Added tests for Arr * [#13687] - Corrections to the helper * [#13687] - Removing mysql 5.7 temporarily * [#13687] - Trying xenial build * [#13687] - Updating ext folder * Revert "[#13687] - Updating ext folder" This reverts commit f18a967b4fa5e3a880f19673c9a430ee12631525. * Revert "[#13687] - Trying xenial build" This reverts commit 07da593938b3e0e929f194984c16dd44bdc03cb4. * [#13687] - Refactored locations for url/utils * [#13687] - Updated references to url/utils * [#13687] - Trying the build with mysql5.7 again * [#13687] - Trying a different installation for mysql 5.7 * [#13687] - Trying to get the installation going of mysql 5.7 * [#13687] - Trying something different * [#13687] - Trying xenial * [#13687] - Re-enabling mysql; removing memcached * [#13687] - Adding again memcached in the setup * [#13687] - Removing xenial --- .travis.yml | 4 +- CHANGELOG-4.0.md | 1 + .../config/phalcon_c_priority_files.php | 2 +- .../_resource/config/phalcon_c_skip_files.php | 2 +- config.json | 2 +- ext/config.m4 | 11 +- ext/config.w32 | 9 +- ext/phalcon.c | 18 +- ext/phalcon.h | 9 +- ext/phalcon/cli/dispatcher.zep.c | 22 +- ext/phalcon/config.zep.c | 32 +- ext/phalcon/config.zep.h | 2 +- ext/phalcon/debug.zep.c | 414 +++++++--- ext/phalcon/debug.zep.h | 11 + ext/phalcon/debug/dump.zep.c | 18 +- ext/phalcon/di.zep.c | 67 +- ext/phalcon/di/factorydefault.zep.c | 2 +- ext/phalcon/di/injectable.zep.c | 2 +- ext/phalcon/di/service.zep.c | 2 +- ext/phalcon/di/service/builder.zep.c | 8 +- ext/phalcon/dispatcher.zep.c | 122 ++- ext/phalcon/dispatcher.zep.h | 14 + ext/phalcon/escaper.zep.c | 18 +- ext/phalcon/events/manager.zep.c | 18 +- ext/phalcon/filter/filterlocator.zep.c | 10 +- ext/phalcon/filter/filterlocatorfactory.zep.c | 2 +- ext/phalcon/filter/sanitize/absint.zep.c | 4 +- ext/phalcon/filter/sanitize/email.zep.c | 2 +- ext/phalcon/filter/sanitize/floatval.zep.c | 2 +- ext/phalcon/filter/sanitize/intval.zep.c | 2 +- ext/phalcon/filter/sanitize/lower.zep.c | 4 +- ext/phalcon/filter/sanitize/special.zep.c | 2 +- ext/phalcon/filter/sanitize/specialfull.zep.c | 2 +- ext/phalcon/filter/sanitize/stringval.zep.c | 2 +- ext/phalcon/filter/sanitize/striptags.zep.c | 2 +- ext/phalcon/filter/sanitize/upper.zep.c | 4 +- ext/phalcon/filter/sanitize/upperwords.zep.c | 6 +- ext/phalcon/filter/sanitize/url.zep.c | 2 +- ext/phalcon/forms/form.zep.c | 8 +- ext/phalcon/forms/manager.zep.c | 2 +- ext/phalcon/helper/arr.zep.c | 125 +++ ext/phalcon/helper/arr.zep.h | 40 + .../{mvc/url => helper}/exception.zep.c | 15 +- ext/phalcon/helper/exception.zep.h | 5 + ext/phalcon/html/breadcrumbs.zep.c | 2 +- ext/phalcon/html/tag.zep.c | 760 +++++++++--------- ext/phalcon/html/tag.zep.h | 12 - ext/phalcon/html/taglocatorfactory.zep.c | 2 +- ext/phalcon/http/request.zep.c | 4 +- ext/phalcon/image/adapter/gd.zep.c | 12 +- ext/phalcon/mvc/model.zep.c | 293 +++---- ext/phalcon/mvc/model/criteria.zep.c | 4 +- ext/phalcon/mvc/model/query/builder.zep.c | 4 +- ext/phalcon/mvc/url.zep.h | 134 --- ext/phalcon/mvc/url/exception.zep.h | 5 - ext/phalcon/mvc/url/utils.h | 30 - ext/phalcon/mvc/urlinterface.zep.h | 78 -- ext/phalcon/mvc/view.zep.c | 4 +- ext/phalcon/mvc/view/engine/php.zep.c | 2 +- ext/phalcon/mvc/view/engine/volt.zep.c | 89 +- .../mvc/view/engine/volt/compiler.zep.c | 134 +-- ext/phalcon/mvc/view/simple.zep.c | 6 +- .../paginator/adapter/nativearray.zep.c | 2 +- ext/phalcon/queue/beanstalk.zep.c | 60 +- ext/phalcon/registry.zep.c | 18 +- ext/phalcon/security.zep.c | 8 +- ext/phalcon/security/random.zep.c | 26 +- ext/phalcon/session/adapter/files.zep.c | 6 +- .../session/adapter/libmemcached.zep.c | 86 +- ext/phalcon/session/adapter/noop.zep.c | 2 +- ext/phalcon/session/adapter/redis.zep.c | 74 +- ext/phalcon/session/bag.zep.c | 2 +- ext/phalcon/session/manager.zep.c | 44 +- ext/phalcon/tag.zep.c | 44 +- ext/phalcon/tag.zep.h | 4 +- ext/phalcon/tag/select.zep.c | 8 +- ext/phalcon/text.zep.c | 40 +- ext/phalcon/translate/adapter/csv.zep.c | 4 +- ext/phalcon/translate/adapter/gettext.zep.c | 20 +- .../translate/interpolator/indexedarray.zep.c | 2 +- ext/phalcon/{mvc => }/url.zep.c | 64 +- ext/phalcon/url.zep.h | 134 +++ ext/phalcon/url/exception.zep.c | 37 + ext/phalcon/url/exception.zep.h | 5 + ext/phalcon/{mvc => }/url/utils.c | 86 +- ext/phalcon/url/utils.h | 21 + ext/phalcon/{mvc => }/urlinterface.zep.c | 26 +- ext/phalcon/urlinterface.zep.h | 78 ++ .../validation/validator/confirmation.zep.c | 4 +- ext/phalcon/validation/validator/email.zep.c | 2 +- ext/phalcon/validation/validator/ip.zep.c | 2 +- .../validation/validator/uniqueness.zep.c | 2 +- ext/phalcon/validation/validator/url.zep.c | 2 +- optimizers/PhalconGetUriOptimizer.php | 2 +- optimizers/PhalconReplacePathsOptimizer.php | 2 +- phalcon/debug.zep | 140 ++-- phalcon/helper/arr.zep | 57 ++ phalcon/helper/exception.zep | 22 + phalcon/html/tag.zep | 72 +- phalcon/session/adapter/libmemcached.zep | 9 +- phalcon/session/adapter/noop.zep | 3 +- phalcon/session/adapter/redis.zep | 11 +- phalcon/session/manager.zep | 8 +- phalcon/utility.zep | 33 - tests/testbed/index.php | 31 + tests/unit/Debug/GetCssSourcesCest.php | 12 +- tests/unit/Debug/GetJsSourcesCest.php | 10 +- tests/unit/Debug/SetUriCest.php | 12 +- tests/unit/Helper/Arr/GetCest.php | 89 ++ tests/unit/Helper/Arr/HasCest.php | 48 ++ tests/unit/Helper/Arr/SetCest.php | 100 +++ 111 files changed, 2455 insertions(+), 1745 deletions(-) create mode 100644 ext/phalcon/helper/arr.zep.c create mode 100644 ext/phalcon/helper/arr.zep.h rename ext/phalcon/{mvc/url => helper}/exception.zep.c (56%) create mode 100644 ext/phalcon/helper/exception.zep.h delete mode 100644 ext/phalcon/mvc/url.zep.h delete mode 100644 ext/phalcon/mvc/url/exception.zep.h delete mode 100644 ext/phalcon/mvc/url/utils.h delete mode 100644 ext/phalcon/mvc/urlinterface.zep.h rename ext/phalcon/{mvc => }/url.zep.c (87%) create mode 100644 ext/phalcon/url.zep.h create mode 100644 ext/phalcon/url/exception.zep.c create mode 100644 ext/phalcon/url/exception.zep.h rename ext/phalcon/{mvc => }/url/utils.c (70%) create mode 100644 ext/phalcon/url/utils.h rename ext/phalcon/{mvc => }/urlinterface.zep.c (54%) create mode 100644 ext/phalcon/urlinterface.zep.h create mode 100644 phalcon/helper/arr.zep create mode 100644 phalcon/helper/exception.zep delete mode 100644 phalcon/utility.zep create mode 100644 tests/testbed/index.php create mode 100644 tests/unit/Helper/Arr/GetCest.php create mode 100644 tests/unit/Helper/Arr/HasCest.php create mode 100644 tests/unit/Helper/Arr/SetCest.php diff --git a/.travis.yml b/.travis.yml index 3d2ec897357..1f99da265c9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ sudo: false language: php php: - # PHP 7.4 does not ready yet + # PHP 7.4 is not ready yet # - 'master' - '7.3' - '7.2' @@ -26,7 +26,7 @@ addons: matrix: fast_finish: true - # PHP 7.4 does not ready yet + # PHP 7.4 is not ready yet # allow_failures: # - php: 'master' diff --git a/CHANGELOG-4.0.md b/CHANGELOG-4.0.md index 82d15d44255..077b0058332 100644 --- a/CHANGELOG-4.0.md +++ b/CHANGELOG-4.0.md @@ -2,6 +2,7 @@ ## Added - Added `view:afterCompile` and `view:beforeCompile` events for the Volt compiler [#2182](https://github.com/phalcon/cphalcon/pull/2182) - Added array merge support to `Phalcon\Config::merge` +- Added `setBlacklist` in `Phalcon\Debug` to allow the developer to "blacklist" certain variables from the `$_REQUEST` or `$_SERVER` superglobals being displayed on screen [#13687](https://github.com/phalcon/cphalcon/pull/13687) ## Fixed - Fixed router and controller parameter inconsistencies (camelize etc.) [#13555](https://github.com/phalcon/cphalcon/issues/13555) diff --git a/build/_resource/config/phalcon_c_priority_files.php b/build/_resource/config/phalcon_c_priority_files.php index 4ed23ffcb89..3d20dd960d3 100644 --- a/build/_resource/config/phalcon_c_priority_files.php +++ b/build/_resource/config/phalcon_c_priority_files.php @@ -4,7 +4,6 @@ $files = [ 'phalcon/annotations/scanner.h', 'phalcon/annotations/annot.h', - 'phalcon/mvc/url/utils.h', 'phalcon/mvc/model/orm.h', 'phalcon/mvc/model/query/scanner.h', 'phalcon/mvc/model/query/phql.h', @@ -16,6 +15,7 @@ 'phalcon/mvc/view/engine/volt/parser.php' . PHP_MAJOR_VERSION . '.inc.h', 'phalcon/annotations/parser.php' . PHP_MAJOR_VERSION . '.h', 'phalcon/annotations/parser.php' . PHP_MAJOR_VERSION . '.inc.h', + 'phalcon/url/utils.h', 'kernel/main.h', 'kernel/memory.h', 'kernel/exception.h', diff --git a/build/_resource/config/phalcon_c_skip_files.php b/build/_resource/config/phalcon_c_skip_files.php index db66723bf31..e422edab841 100644 --- a/build/_resource/config/phalcon_c_skip_files.php +++ b/build/_resource/config/phalcon_c_skip_files.php @@ -14,7 +14,7 @@ 'phalcon/annotations/scanner.h', 'phalcon/annotations/annot.h', - 'phalcon/mvc/url/utils.h', + 'phalcon/url/utils.h', 'phalcon/mvc/model/orm.h', 'phalcon/mvc/model/query/scanner.h', 'phalcon/mvc/model/query/phql.h', diff --git a/config.json b/config.json index 518e0229599..d91c2662fe4 100644 --- a/config.json +++ b/config.json @@ -30,7 +30,7 @@ "phalcon/mvc/model/query/parser.c", "phalcon/mvc/view/engine/volt/parser.c", "phalcon/mvc/view/engine/volt/scanner.c", - "phalcon/mvc/url/utils.c" + "phalcon/url/utils.c" ], "globals": { "db.escape_identifiers": { diff --git a/ext/config.m4 b/ext/config.m4 index ffef614e04b..76d38c14ee2 100644 --- a/ext/config.m4 +++ b/ext/config.m4 @@ -29,7 +29,6 @@ if test "$PHP_PHALCON" = "yes"; then phalcon/mvc/model/metadata.zep.c phalcon/config.zep.c phalcon/db/adapterinterface.zep.c - phalcon/utility.zep.c phalcon/annotations/adapterinterface.zep.c phalcon/db/adapter.zep.c phalcon/db/dialectinterface.zep.c @@ -120,12 +119,12 @@ if test "$PHP_PHALCON" = "yes"; then phalcon/mvc/router.zep.c phalcon/mvc/router/groupinterface.zep.c phalcon/mvc/router/routeinterface.zep.c - phalcon/mvc/urlinterface.zep.c phalcon/mvc/view/exception.zep.c phalcon/mvc/viewinterface.zep.c phalcon/paginator/repositoryinterface.zep.c phalcon/session/baginterface.zep.c phalcon/session/managerinterface.zep.c + phalcon/urlinterface.zep.c phalcon/validation/combinedfieldsvalidator.zep.c phalcon/validationinterface.zep.c phalcon/acl.zep.c @@ -262,6 +261,8 @@ if test "$PHP_PHALCON" = "yes"; then phalcon/forms/exception.zep.c phalcon/forms/form.zep.c phalcon/forms/manager.zep.c + phalcon/helper/arr.zep.c + phalcon/helper/exception.zep.c phalcon/html/breadcrumbs.zep.c phalcon/html/exception.zep.c phalcon/html/helper/anchor.zep.c @@ -353,8 +354,6 @@ if test "$PHP_PHALCON" = "yes"; then phalcon/mvc/router/exception.zep.c phalcon/mvc/router/group.zep.c phalcon/mvc/router/route.zep.c - phalcon/mvc/url.zep.c - phalcon/mvc/url/exception.zep.c phalcon/mvc/view.zep.c phalcon/mvc/view/engine/php.zep.c phalcon/mvc/view/engine/volt.zep.c @@ -395,6 +394,8 @@ if test "$PHP_PHALCON" = "yes"; then phalcon/translate/factory.zep.c phalcon/translate/interpolator/associativearray.zep.c phalcon/translate/interpolator/indexedarray.zep.c + phalcon/url.zep.c + phalcon/url/exception.zep.c phalcon/validation.zep.c phalcon/validation/exception.zep.c phalcon/validation/validator/alnum.zep.c @@ -453,7 +454,7 @@ if test "$PHP_PHALCON" = "yes"; then phalcon/mvc/model/query/parser.c phalcon/mvc/view/engine/volt/parser.c phalcon/mvc/view/engine/volt/scanner.c - phalcon/mvc/url/utils.c" + phalcon/url/utils.c" PHP_NEW_EXTENSION(phalcon, $phalcon_sources, $ext_shared,, ) PHP_SUBST(PHALCON_SHARED_LIBADD) diff --git a/ext/config.w32 b/ext/config.w32 index b5eedd33e1d..d4309b4f9d5 100644 --- a/ext/config.w32 +++ b/ext/config.w32 @@ -13,8 +13,8 @@ if (PHP_PHALCON != "no") { ADD_SOURCES(configure_module_dirname + "/phalcon/mvc/model", "orm.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/mvc/model/query", "scanner.c parser.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/mvc/view/engine/volt", "parser.c scanner.c", "phalcon"); - ADD_SOURCES(configure_module_dirname + "/phalcon/mvc/url", "utils.c", "phalcon"); - ADD_SOURCES(configure_module_dirname + "/phalcon", "exception.zep.c factoryinterface.zep.c factory.zep.c dispatcherinterface.zep.c config.zep.c utility.zep.c diinterface.zep.c flashinterface.zep.c application.zep.c di.zep.c dispatcher.zep.c flash.zep.c cryptinterface.zep.c escaperinterface.zep.c validationinterface.zep.c acl.zep.c container.zep.c crypt.zep.c db.zep.c debug.zep.c escaper.zep.c image.zep.c kernel.zep.c loader.zep.c logger.zep.c plugin.zep.c registry.zep.c security.zep.c tag.zep.c text.zep.c translate.zep.c validation.zep.c version.zep.c 0__closure.zep.c 1__closure.zep.c 2__closure.zep.c 3__closure.zep.c 4__closure.zep.c 5__closure.zep.c 6__closure.zep.c 7__closure.zep.c 8__closure.zep.c 9__closure.zep.c 10__closure.zep.c 11__closure.zep.c 12__closure.zep.c 13__closure.zep.c 14__closure.zep.c 15__closure.zep.c 16__closure.zep.c 17__closure.zep.c 18__closure.zep.c 19__closure.zep.c 20__closure.zep.c 21__closure.zep.c 22__closure.zep.c 23__closure.zep.c 24__closure.zep.c 25__closure.zep.c 26__closure.zep.c 27__closure.zep.c", "phalcon"); + ADD_SOURCES(configure_module_dirname + "/phalcon/url", "utils.c", "phalcon"); + ADD_SOURCES(configure_module_dirname + "/phalcon", "exception.zep.c factoryinterface.zep.c factory.zep.c dispatcherinterface.zep.c config.zep.c diinterface.zep.c flashinterface.zep.c application.zep.c di.zep.c dispatcher.zep.c flash.zep.c cryptinterface.zep.c escaperinterface.zep.c urlinterface.zep.c validationinterface.zep.c acl.zep.c container.zep.c crypt.zep.c db.zep.c debug.zep.c escaper.zep.c image.zep.c kernel.zep.c loader.zep.c logger.zep.c plugin.zep.c registry.zep.c security.zep.c tag.zep.c text.zep.c translate.zep.c url.zep.c validation.zep.c version.zep.c 0__closure.zep.c 1__closure.zep.c 2__closure.zep.c 3__closure.zep.c 4__closure.zep.c 5__closure.zep.c 6__closure.zep.c 7__closure.zep.c 8__closure.zep.c 9__closure.zep.c 10__closure.zep.c 11__closure.zep.c 12__closure.zep.c 13__closure.zep.c 14__closure.zep.c 15__closure.zep.c 16__closure.zep.c 17__closure.zep.c 18__closure.zep.c 19__closure.zep.c 20__closure.zep.c 21__closure.zep.c 22__closure.zep.c 23__closure.zep.c 24__closure.zep.c 25__closure.zep.c 26__closure.zep.c 27__closure.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/di", "injectionawareinterface.zep.c injectable.zep.c exception.zep.c factorydefault.zep.c serviceinterface.zep.c service.zep.c serviceproviderinterface.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/events", "eventsawareinterface.zep.c eventinterface.zep.c managerinterface.zep.c event.zep.c exception.zep.c manager.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/validation", "validatorinterface.zep.c validator.zep.c combinedfieldsvalidator.zep.c exception.zep.c", "phalcon"); @@ -27,7 +27,7 @@ if (PHP_PHALCON != "no") { ADD_SOURCES(configure_module_dirname + "/phalcon/annotations", "adapterinterface.zep.c adapter.zep.c readerinterface.zep.c annotation.zep.c collection.zep.c exception.zep.c factory.zep.c reader.zep.c reflection.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/logger/adapter", "adapterinterface.zep.c abstractadapter.zep.c noop.zep.c stream.zep.c syslog.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/logger/formatter", "formatterinterface.zep.c abstractformatter.zep.c json.zep.c line.zep.c syslog.zep.c", "phalcon"); - ADD_SOURCES(configure_module_dirname + "/phalcon/mvc", "entityinterface.zep.c viewbaseinterface.zep.c routerinterface.zep.c collectioninterface.zep.c controllerinterface.zep.c dispatcherinterface.zep.c modelinterface.zep.c router.zep.c urlinterface.zep.c viewinterface.zep.c application.zep.c collection.zep.c controller.zep.c dispatcher.zep.c micro.zep.c model.zep.c moduledefinitioninterface.zep.c url.zep.c view.zep.c", "phalcon"); + ADD_SOURCES(configure_module_dirname + "/phalcon/mvc", "entityinterface.zep.c viewbaseinterface.zep.c routerinterface.zep.c collectioninterface.zep.c controllerinterface.zep.c dispatcherinterface.zep.c modelinterface.zep.c router.zep.c viewinterface.zep.c application.zep.c collection.zep.c controller.zep.c dispatcher.zep.c micro.zep.c model.zep.c moduledefinitioninterface.zep.c view.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/paginator", "adapterinterface.zep.c adapter.zep.c repositoryinterface.zep.c exception.zep.c factory.zep.c repository.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/translate", "adapterinterface.zep.c adapter.zep.c interpolatorinterface.zep.c exception.zep.c factory.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/db/adapter", "pdo.zep.c", "phalcon"); @@ -76,6 +76,7 @@ if (PHP_PHALCON != "no") { ADD_SOURCES(configure_module_dirname + "/phalcon/filter/sanitize", "absint.zep.c alnum.zep.c alpha.zep.c boolval.zep.c email.zep.c floatval.zep.c intval.zep.c lower.zep.c lowerfirst.zep.c regex.zep.c remove.zep.c replace.zep.c special.zep.c specialfull.zep.c stringval.zep.c striptags.zep.c trim.zep.c upper.zep.c upperfirst.zep.c upperwords.zep.c url.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/flash", "direct.zep.c exception.zep.c session.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/forms/element", "check.zep.c date.zep.c email.zep.c file.zep.c hidden.zep.c numeric.zep.c password.zep.c radio.zep.c select.zep.c submit.zep.c text.zep.c textarea.zep.c", "phalcon"); + ADD_SOURCES(configure_module_dirname + "/phalcon/helper", "arr.zep.c exception.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/html", "breadcrumbs.zep.c exception.zep.c tag.zep.c taglocator.zep.c taglocatorfactory.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/http/cookie", "exception.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/image/adapter", "gd.zep.c imagick.zep.c", "phalcon"); @@ -89,7 +90,6 @@ if (PHP_PHALCON != "no") { ADD_SOURCES(configure_module_dirname + "/phalcon/mvc/model/binder", "bindableinterface.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/mvc/model/metadata/strategy", "annotations.zep.c introspection.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/mvc/model/resultset", "complex.zep.c simple.zep.c", "phalcon"); - ADD_SOURCES(configure_module_dirname + "/phalcon/mvc/url", "exception.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/mvc/view/engine", "php.zep.c volt.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/mvc/view/engine/volt", "compiler.zep.c exception.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/paginator/adapter", "model.zep.c nativearray.zep.c querybuilder.zep.c", "phalcon"); @@ -99,6 +99,7 @@ if (PHP_PHALCON != "no") { ADD_SOURCES(configure_module_dirname + "/phalcon/tag", "exception.zep.c select.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/translate/adapter", "csv.zep.c gettext.zep.c nativearray.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/translate/interpolator", "associativearray.zep.c indexedarray.zep.c", "phalcon"); + ADD_SOURCES(configure_module_dirname + "/phalcon/url", "exception.zep.c", "phalcon"); ADD_SOURCES(configure_module_dirname + "/phalcon/validation/validator", "alnum.zep.c alpha.zep.c between.zep.c callback.zep.c confirmation.zep.c creditcard.zep.c date.zep.c digit.zep.c email.zep.c exception.zep.c exclusionin.zep.c file.zep.c identical.zep.c inclusionin.zep.c ip.zep.c numericality.zep.c presenceof.zep.c regex.zep.c stringlength.zep.c uniqueness.zep.c url.zep.c", "phalcon"); ADD_FLAG("CFLAGS_PHALCON", "/D ZEPHIR_RELEASE /Oi /Ot /Oy /Ob2 /Gs /GF /Gy /GL"); ADD_FLAG("CFLAGS", "/D ZEPHIR_RELEASE /Oi /Ot /Oy /Ob2 /Gs /GF /Gy /GL"); diff --git a/ext/phalcon.c b/ext/phalcon.c index 3e32f3cd7f3..db809775026 100644 --- a/ext/phalcon.c +++ b/ext/phalcon.c @@ -95,11 +95,11 @@ zend_class_entry *phalcon_mvc_model_transactioninterface_ce; zend_class_entry *phalcon_mvc_modelinterface_ce; zend_class_entry *phalcon_mvc_router_groupinterface_ce; zend_class_entry *phalcon_mvc_router_routeinterface_ce; -zend_class_entry *phalcon_mvc_urlinterface_ce; zend_class_entry *phalcon_mvc_viewinterface_ce; zend_class_entry *phalcon_paginator_repositoryinterface_ce; zend_class_entry *phalcon_session_baginterface_ce; zend_class_entry *phalcon_session_managerinterface_ce; +zend_class_entry *phalcon_urlinterface_ce; zend_class_entry *phalcon_validationinterface_ce; zend_class_entry *phalcon_acl_componentaware_ce; zend_class_entry *phalcon_acl_roleaware_ce; @@ -120,7 +120,6 @@ zend_class_entry *phalcon_cache_backend_ce; zend_class_entry *phalcon_html_helper_abstracthelper_ce; zend_class_entry *phalcon_mvc_model_metadata_ce; zend_class_entry *phalcon_config_ce; -zend_class_entry *phalcon_utility_ce; zend_class_entry *phalcon_db_adapter_ce; zend_class_entry *phalcon_annotations_adapter_ce; zend_class_entry *phalcon_db_adapter_pdo_ce; @@ -310,6 +309,8 @@ zend_class_entry *phalcon_forms_element_textarea_ce; zend_class_entry *phalcon_forms_exception_ce; zend_class_entry *phalcon_forms_form_ce; zend_class_entry *phalcon_forms_manager_ce; +zend_class_entry *phalcon_helper_arr_ce; +zend_class_entry *phalcon_helper_exception_ce; zend_class_entry *phalcon_html_breadcrumbs_ce; zend_class_entry *phalcon_html_exception_ce; zend_class_entry *phalcon_html_helper_anchor_ce; @@ -396,8 +397,6 @@ zend_class_entry *phalcon_mvc_router_annotations_ce; zend_class_entry *phalcon_mvc_router_exception_ce; zend_class_entry *phalcon_mvc_router_group_ce; zend_class_entry *phalcon_mvc_router_route_ce; -zend_class_entry *phalcon_mvc_url_ce; -zend_class_entry *phalcon_mvc_url_exception_ce; zend_class_entry *phalcon_mvc_view_ce; zend_class_entry *phalcon_mvc_view_engine_php_ce; zend_class_entry *phalcon_mvc_view_engine_volt_ce; @@ -438,6 +437,8 @@ zend_class_entry *phalcon_translate_exception_ce; zend_class_entry *phalcon_translate_factory_ce; zend_class_entry *phalcon_translate_interpolator_associativearray_ce; zend_class_entry *phalcon_translate_interpolator_indexedarray_ce; +zend_class_entry *phalcon_url_ce; +zend_class_entry *phalcon_url_exception_ce; zend_class_entry *phalcon_validation_ce; zend_class_entry *phalcon_validation_exception_ce; zend_class_entry *phalcon_validation_validator_alnum_ce; @@ -562,11 +563,11 @@ static PHP_MINIT_FUNCTION(phalcon) ZEPHIR_INIT(Phalcon_Mvc_Model_Transaction_ManagerInterface); ZEPHIR_INIT(Phalcon_Mvc_Router_GroupInterface); ZEPHIR_INIT(Phalcon_Mvc_Router_RouteInterface); - ZEPHIR_INIT(Phalcon_Mvc_UrlInterface); ZEPHIR_INIT(Phalcon_Mvc_ViewInterface); ZEPHIR_INIT(Phalcon_Paginator_RepositoryInterface); ZEPHIR_INIT(Phalcon_Session_BagInterface); ZEPHIR_INIT(Phalcon_Session_ManagerInterface); + ZEPHIR_INIT(Phalcon_UrlInterface); ZEPHIR_INIT(Phalcon_ValidationInterface); ZEPHIR_INIT(Phalcon_Acl_ComponentAware); ZEPHIR_INIT(Phalcon_Acl_RoleAware); @@ -587,7 +588,6 @@ static PHP_MINIT_FUNCTION(phalcon) ZEPHIR_INIT(Phalcon_Html_Helper_AbstractHelper); ZEPHIR_INIT(Phalcon_Mvc_Model_MetaData); ZEPHIR_INIT(Phalcon_Config); - ZEPHIR_INIT(Phalcon_Utility); ZEPHIR_INIT(Phalcon_Db_Adapter); ZEPHIR_INIT(Phalcon_Annotations_Adapter); ZEPHIR_INIT(Phalcon_Db_Adapter_Pdo); @@ -749,6 +749,8 @@ static PHP_MINIT_FUNCTION(phalcon) ZEPHIR_INIT(Phalcon_Forms_Exception); ZEPHIR_INIT(Phalcon_Forms_Form); ZEPHIR_INIT(Phalcon_Forms_Manager); + ZEPHIR_INIT(Phalcon_Helper_Arr); + ZEPHIR_INIT(Phalcon_Helper_Exception); ZEPHIR_INIT(Phalcon_Html_Breadcrumbs); ZEPHIR_INIT(Phalcon_Html_Exception); ZEPHIR_INIT(Phalcon_Html_Helper_Anchor); @@ -835,8 +837,6 @@ static PHP_MINIT_FUNCTION(phalcon) ZEPHIR_INIT(Phalcon_Mvc_Router_Exception); ZEPHIR_INIT(Phalcon_Mvc_Router_Group); ZEPHIR_INIT(Phalcon_Mvc_Router_Route); - ZEPHIR_INIT(Phalcon_Mvc_Url); - ZEPHIR_INIT(Phalcon_Mvc_Url_Exception); ZEPHIR_INIT(Phalcon_Mvc_View); ZEPHIR_INIT(Phalcon_Mvc_View_Engine_Php); ZEPHIR_INIT(Phalcon_Mvc_View_Engine_Volt); @@ -877,6 +877,8 @@ static PHP_MINIT_FUNCTION(phalcon) ZEPHIR_INIT(Phalcon_Translate_Factory); ZEPHIR_INIT(Phalcon_Translate_Interpolator_AssociativeArray); ZEPHIR_INIT(Phalcon_Translate_Interpolator_IndexedArray); + ZEPHIR_INIT(Phalcon_Url); + ZEPHIR_INIT(Phalcon_Url_Exception); ZEPHIR_INIT(Phalcon_Validation); ZEPHIR_INIT(Phalcon_Validation_Exception); ZEPHIR_INIT(Phalcon_Validation_Validator_Alnum); diff --git a/ext/phalcon.h b/ext/phalcon.h index 46d6ddb97e5..9f4a6017d0a 100644 --- a/ext/phalcon.h +++ b/ext/phalcon.h @@ -24,7 +24,6 @@ #include "phalcon/mvc/model/metadata.zep.h" #include "phalcon/config.zep.h" #include "phalcon/db/adapterinterface.zep.h" -#include "phalcon/utility.zep.h" #include "phalcon/annotations/adapterinterface.zep.h" #include "phalcon/db/adapter.zep.h" #include "phalcon/db/dialectinterface.zep.h" @@ -115,12 +114,12 @@ #include "phalcon/mvc/router.zep.h" #include "phalcon/mvc/router/groupinterface.zep.h" #include "phalcon/mvc/router/routeinterface.zep.h" -#include "phalcon/mvc/urlinterface.zep.h" #include "phalcon/mvc/view/exception.zep.h" #include "phalcon/mvc/viewinterface.zep.h" #include "phalcon/paginator/repositoryinterface.zep.h" #include "phalcon/session/baginterface.zep.h" #include "phalcon/session/managerinterface.zep.h" +#include "phalcon/urlinterface.zep.h" #include "phalcon/validation/combinedfieldsvalidator.zep.h" #include "phalcon/validationinterface.zep.h" #include "phalcon/acl.zep.h" @@ -257,6 +256,8 @@ #include "phalcon/forms/exception.zep.h" #include "phalcon/forms/form.zep.h" #include "phalcon/forms/manager.zep.h" +#include "phalcon/helper/arr.zep.h" +#include "phalcon/helper/exception.zep.h" #include "phalcon/html/breadcrumbs.zep.h" #include "phalcon/html/exception.zep.h" #include "phalcon/html/helper/anchor.zep.h" @@ -348,8 +349,6 @@ #include "phalcon/mvc/router/exception.zep.h" #include "phalcon/mvc/router/group.zep.h" #include "phalcon/mvc/router/route.zep.h" -#include "phalcon/mvc/url.zep.h" -#include "phalcon/mvc/url/exception.zep.h" #include "phalcon/mvc/view.zep.h" #include "phalcon/mvc/view/engine/php.zep.h" #include "phalcon/mvc/view/engine/volt.zep.h" @@ -390,6 +389,8 @@ #include "phalcon/translate/factory.zep.h" #include "phalcon/translate/interpolator/associativearray.zep.h" #include "phalcon/translate/interpolator/indexedarray.zep.h" +#include "phalcon/url.zep.h" +#include "phalcon/url/exception.zep.h" #include "phalcon/validation.zep.h" #include "phalcon/validation/exception.zep.h" #include "phalcon/validation/validator/alnum.zep.h" diff --git a/ext/phalcon/cli/dispatcher.zep.c b/ext/phalcon/cli/dispatcher.zep.c index 6f1ac5a703b..07ac475f402 100644 --- a/ext/phalcon/cli/dispatcher.zep.c +++ b/ext/phalcon/cli/dispatcher.zep.c @@ -434,36 +434,44 @@ PHP_METHOD(Phalcon_Cli_Dispatcher, callActionMethod) { zend_object *zephir_init_properties_Phalcon_Cli_Dispatcher(zend_class_entry *class_type TSRMLS_DC) { - zval _0, _2, _4, _1$$3, _3$$4, _5$$5; + zval _0, _2, _4, _6, _1$$3, _3$$4, _5$$5, _7$$6; ZVAL_UNDEF(&_0); ZVAL_UNDEF(&_2); ZVAL_UNDEF(&_4); + ZVAL_UNDEF(&_6); ZVAL_UNDEF(&_1$$3); ZVAL_UNDEF(&_3$$4); ZVAL_UNDEF(&_5$$5); + ZVAL_UNDEF(&_7$$6); ZEPHIR_MM_GROW(); { zval local_this_ptr, *this_ptr = &local_this_ptr; ZEPHIR_CREATE_OBJECT(this_ptr, class_type); - zephir_read_property(&_0, this_ptr, SL("_activeMethodMap"), PH_NOISY_CC | PH_READONLY); + zephir_read_property(&_0, this_ptr, SL("_camelCaseMap"), PH_NOISY_CC | PH_READONLY); if (Z_TYPE_P(&_0) == IS_NULL) { ZEPHIR_INIT_VAR(&_1$$3); array_init(&_1$$3); - zephir_update_property_zval(this_ptr, SL("_activeMethodMap"), &_1$$3); + zephir_update_property_zval(this_ptr, SL("_camelCaseMap"), &_1$$3); } - zephir_read_property(&_2, this_ptr, SL("_params"), PH_NOISY_CC | PH_READONLY); + zephir_read_property(&_2, this_ptr, SL("_activeMethodMap"), PH_NOISY_CC | PH_READONLY); if (Z_TYPE_P(&_2) == IS_NULL) { ZEPHIR_INIT_VAR(&_3$$4); array_init(&_3$$4); - zephir_update_property_zval(this_ptr, SL("_params"), &_3$$4); + zephir_update_property_zval(this_ptr, SL("_activeMethodMap"), &_3$$4); } - zephir_read_property(&_4, this_ptr, SL("_options"), PH_NOISY_CC | PH_READONLY); + zephir_read_property(&_4, this_ptr, SL("_params"), PH_NOISY_CC | PH_READONLY); if (Z_TYPE_P(&_4) == IS_NULL) { ZEPHIR_INIT_VAR(&_5$$5); array_init(&_5$$5); - zephir_update_property_zval(this_ptr, SL("_options"), &_5$$5); + zephir_update_property_zval(this_ptr, SL("_params"), &_5$$5); + } + zephir_read_property(&_6, this_ptr, SL("_options"), PH_NOISY_CC | PH_READONLY); + if (Z_TYPE_P(&_6) == IS_NULL) { + ZEPHIR_INIT_VAR(&_7$$6); + array_init(&_7$$6); + zephir_update_property_zval(this_ptr, SL("_options"), &_7$$6); } ZEPHIR_MM_RESTORE(); return Z_OBJ_P(this_ptr); diff --git a/ext/phalcon/config.zep.c b/ext/phalcon/config.zep.c index 8ebaafe4bf9..b2e07d9091f 100644 --- a/ext/phalcon/config.zep.c +++ b/ext/phalcon/config.zep.c @@ -409,17 +409,37 @@ PHP_METHOD(Phalcon_Config, offsetUnset) { PHP_METHOD(Phalcon_Config, merge) { zend_long ZEPHIR_LAST_CALL_STATUS; - zval *config, config_sub; + zval *configParam, configParam_sub, config, _0; zval *this_ptr = getThis(); - ZVAL_UNDEF(&config_sub); + ZVAL_UNDEF(&configParam_sub); + ZVAL_UNDEF(&config); + ZVAL_UNDEF(&_0); ZEPHIR_MM_GROW(); - zephir_fetch_params(1, 1, 0, &config); + zephir_fetch_params(1, 1, 0, &configParam); - ZEPHIR_RETURN_CALL_METHOD(this_ptr, "_merge", NULL, 13, config); + ZEPHIR_INIT_VAR(&_0); + zephir_gettype(&_0, configParam TSRMLS_CC); + do { + if (ZEPHIR_IS_STRING(&_0, "array")) { + ZEPHIR_INIT_VAR(&config); + object_init_ex(&config, phalcon_config_ce); + ZEPHIR_CALL_METHOD(NULL, &config, "__construct", NULL, 12, configParam); + zephir_check_call_status(); + break; + } + if (ZEPHIR_IS_STRING(&_0, "object")) { + ZEPHIR_CPY_WRT(&config, configParam); + break; + } + ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_config_exception_ce, "Invalid data type for merge.", "phalcon/config.zep", 216); + return; + } while(0); + + ZEPHIR_RETURN_CALL_METHOD(this_ptr, "_merge", NULL, 13, &config); zephir_check_call_status(); RETURN_MM(); @@ -454,7 +474,7 @@ PHP_METHOD(Phalcon_Config, toArray) { array_init(&arrayConfig); ZEPHIR_CALL_FUNCTION(&_0, "get_object_vars", NULL, 14, this_ptr); zephir_check_call_status(); - zephir_is_iterable(&_0, 0, "phalcon/config.zep", 234); + zephir_is_iterable(&_0, 0, "phalcon/config.zep", 247); ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&_0), _2, _3, _1) { ZEPHIR_INIT_NVAR(&key); @@ -637,7 +657,7 @@ PHP_METHOD(Phalcon_Config, _merge) { zephir_check_call_status(); ZEPHIR_CALL_FUNCTION(&_0, "get_object_vars", NULL, 14, config); zephir_check_call_status(); - zephir_is_iterable(&_0, 0, "phalcon/config.zep", 322); + zephir_is_iterable(&_0, 0, "phalcon/config.zep", 335); ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&_0), _2, _3, _1) { ZEPHIR_INIT_NVAR(&key); diff --git a/ext/phalcon/config.zep.h b/ext/phalcon/config.zep.h index 23c27566cd0..963cc2b0568 100644 --- a/ext/phalcon/config.zep.h +++ b/ext/phalcon/config.zep.h @@ -63,7 +63,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_config_merge, 0, 1, Phalc #else ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_config_merge, 0, 1, IS_OBJECT, "Phalcon\\Config", 0) #endif - ZEND_ARG_OBJ_INFO(0, config, Phalcon\\Config, 0) + ZEND_ARG_INFO(0, configParam) ZEND_END_ARG_INFO() #if PHP_VERSION_ID >= 70200 diff --git a/ext/phalcon/debug.zep.c b/ext/phalcon/debug.zep.c index 4262c4cfe8e..0f72036daeb 100644 --- a/ext/phalcon/debug.zep.c +++ b/ext/phalcon/debug.zep.c @@ -20,8 +20,8 @@ #include "kernel/operators.h" #include "kernel/concat.h" #include "kernel/exception.h" -#include "ext/spl/spl_exceptions.h" #include "kernel/string.h" +#include "ext/spl/spl_exceptions.h" /** @@ -73,6 +73,12 @@ ZEPHIR_INIT_CLASS(Phalcon_Debug) { */ zend_declare_property_string(phalcon_debug_ce, SL("uri"), "https://assets.phalconphp.com/debug/4.0.x/", ZEND_ACC_PROTECTED TSRMLS_CC); + /** + * @var array + */ + zend_declare_property_null(phalcon_debug_ce, SL("blacklist"), ZEND_ACC_PROTECTED TSRMLS_CC); + + phalcon_debug_ce->create_object = zephir_init_properties_Phalcon_Debug; return SUCCESS; } @@ -154,12 +160,12 @@ PHP_METHOD(Phalcon_Debug, getCssSources) { zephir_read_property(&_0, this_ptr, SL("uri"), PH_NOISY_CC | PH_READONLY); ZEPHIR_CPY_WRT(&uri, &_0); ZEPHIR_INIT_VAR(&sources); - ZEPHIR_CONCAT_SVS(&sources, ""); + ZEPHIR_CONCAT_SVS(&sources, ""); ZEPHIR_INIT_VAR(&_1); - ZEPHIR_CONCAT_SVS(&_1, ""); + ZEPHIR_CONCAT_SVS(&_1, ""); zephir_concat_self(&sources, &_1 TSRMLS_CC); ZEPHIR_INIT_VAR(&_2); - ZEPHIR_CONCAT_SVS(&_2, ""); + ZEPHIR_CONCAT_SVS(&_2, ""); zephir_concat_self(&sources, &_2 TSRMLS_CC); RETURN_CCTOR(&sources); @@ -186,18 +192,18 @@ PHP_METHOD(Phalcon_Debug, getJsSources) { zephir_read_property(&_0, this_ptr, SL("uri"), PH_NOISY_CC | PH_READONLY); ZEPHIR_CPY_WRT(&uri, &_0); ZEPHIR_INIT_VAR(&sources); - ZEPHIR_CONCAT_SVS(&sources, ""); + ZEPHIR_CONCAT_SVS(&sources, ""); ZEPHIR_INIT_VAR(&_1); - ZEPHIR_CONCAT_SVS(&_1, ""); + ZEPHIR_CONCAT_SVS(&_1, ""); zephir_concat_self(&sources, &_1 TSRMLS_CC); ZEPHIR_INIT_VAR(&_2); - ZEPHIR_CONCAT_SVS(&_2, ""); + ZEPHIR_CONCAT_SVS(&_2, ""); zephir_concat_self(&sources, &_2 TSRMLS_CC); ZEPHIR_INIT_VAR(&_3); - ZEPHIR_CONCAT_SVS(&_3, ""); + ZEPHIR_CONCAT_SVS(&_3, ""); zephir_concat_self(&sources, &_3 TSRMLS_CC); ZEPHIR_INIT_VAR(&_4); - ZEPHIR_CONCAT_SVS(&_4, ""); + ZEPHIR_CONCAT_SVS(&_4, ""); zephir_concat_self(&sources, &_4 TSRMLS_CC); RETURN_CCTOR(&sources); @@ -254,7 +260,7 @@ PHP_METHOD(Phalcon_Debug, halt) { zval *this_ptr = getThis(); - ZEPHIR_THROW_EXCEPTION_DEBUG_STRW(phalcon_exception_ce, "Halted request", "phalcon/debug.zep", 122); + ZEPHIR_THROW_EXCEPTION_DEBUG_STRW(phalcon_exception_ce, "Halted request", "phalcon/debug.zep", 129); return; } @@ -365,30 +371,31 @@ PHP_METHOD(Phalcon_Debug, listenLowSeverity) { */ PHP_METHOD(Phalcon_Debug, onUncaughtException) { - zend_string *_14$$5, *_19$$5, *_26$$5, *_33$$5, *_39$$13; - zend_ulong _13$$5, _18$$5, _25$$5, _32$$5, _38$$13; - zephir_fcall_cache_entry *_16 = NULL, *_22 = NULL, *_28 = NULL; + zend_string *_14$$5, *_23$$5, *_33$$5, *_41$$5, *_47$$15; + zend_ulong _13$$5, _22$$5, _32$$5, _40$$5, _46$$15; + zephir_fcall_cache_entry *_16 = NULL, *_17 = NULL, *_27 = NULL, *_36 = NULL; zend_long ZEPHIR_LAST_CALL_STATUS; - zval *exception, exception_sub, __$true, *_REQUEST, *_SERVER, __$false, obLevel, className, escapedMessage, html, showBackTrace, dataVars, n, traceItem, keyRequest, value, keyServer, keyFile, keyVar, dataVar, _0, _2, _3, _4, _5, _6, _7, _8, _9, _10, _43, _44, _1$$4, _11$$5, *_12$$5, *_17$$5, *_24$$5, _30$$5, *_31$$5, _35$$5, _36$$5, _15$$7, _20$$9, _21$$10, _23$$10, _27$$11, _29$$11, _34$$12, *_37$$13, _40$$14, _41$$14, _42$$14; + zval *exception, exception_sub, __$true, *_REQUEST, *_SERVER, __$false, blacklist, className, dataVar, dataVars, escapedMessage, html, keyFile, keyRequest, keyServer, keyVar, n, showBackTrace, traceItem, obLevel, value, _0, _2, _3, _4, _5, _6, _7, _8, _9, _10, _51, _52, _1$$4, _11$$5, *_12$$5, _18$$5, _19$$5, _20$$5, *_21$$5, _29$$5, _30$$5, *_31$$5, _38$$5, *_39$$5, _43$$5, _44$$5, _15$$7, _24$$8, _25$$10, _26$$11, _28$$11, _34$$12, _35$$13, _37$$13, _42$$14, *_45$$15, _48$$16, _49$$16, _50$$16; zval *this_ptr = getThis(); ZVAL_UNDEF(&exception_sub); ZVAL_BOOL(&__$true, 1); ZVAL_BOOL(&__$false, 0); - ZVAL_UNDEF(&obLevel); + ZVAL_UNDEF(&blacklist); ZVAL_UNDEF(&className); + ZVAL_UNDEF(&dataVar); + ZVAL_UNDEF(&dataVars); ZVAL_UNDEF(&escapedMessage); ZVAL_UNDEF(&html); - ZVAL_UNDEF(&showBackTrace); - ZVAL_UNDEF(&dataVars); - ZVAL_UNDEF(&n); - ZVAL_UNDEF(&traceItem); + ZVAL_UNDEF(&keyFile); ZVAL_UNDEF(&keyRequest); - ZVAL_UNDEF(&value); ZVAL_UNDEF(&keyServer); - ZVAL_UNDEF(&keyFile); ZVAL_UNDEF(&keyVar); - ZVAL_UNDEF(&dataVar); + ZVAL_UNDEF(&n); + ZVAL_UNDEF(&showBackTrace); + ZVAL_UNDEF(&traceItem); + ZVAL_UNDEF(&obLevel); + ZVAL_UNDEF(&value); ZVAL_UNDEF(&_0); ZVAL_UNDEF(&_2); ZVAL_UNDEF(&_3); @@ -399,23 +406,30 @@ PHP_METHOD(Phalcon_Debug, onUncaughtException) { ZVAL_UNDEF(&_8); ZVAL_UNDEF(&_9); ZVAL_UNDEF(&_10); - ZVAL_UNDEF(&_43); - ZVAL_UNDEF(&_44); + ZVAL_UNDEF(&_51); + ZVAL_UNDEF(&_52); ZVAL_UNDEF(&_1$$4); ZVAL_UNDEF(&_11$$5); + ZVAL_UNDEF(&_18$$5); + ZVAL_UNDEF(&_19$$5); + ZVAL_UNDEF(&_20$$5); + ZVAL_UNDEF(&_29$$5); ZVAL_UNDEF(&_30$$5); - ZVAL_UNDEF(&_35$$5); - ZVAL_UNDEF(&_36$$5); + ZVAL_UNDEF(&_38$$5); + ZVAL_UNDEF(&_43$$5); + ZVAL_UNDEF(&_44$$5); ZVAL_UNDEF(&_15$$7); - ZVAL_UNDEF(&_20$$9); - ZVAL_UNDEF(&_21$$10); - ZVAL_UNDEF(&_23$$10); - ZVAL_UNDEF(&_27$$11); - ZVAL_UNDEF(&_29$$11); + ZVAL_UNDEF(&_24$$8); + ZVAL_UNDEF(&_25$$10); + ZVAL_UNDEF(&_26$$11); + ZVAL_UNDEF(&_28$$11); ZVAL_UNDEF(&_34$$12); - ZVAL_UNDEF(&_40$$14); - ZVAL_UNDEF(&_41$$14); + ZVAL_UNDEF(&_35$$13); + ZVAL_UNDEF(&_37$$13); ZVAL_UNDEF(&_42$$14); + ZVAL_UNDEF(&_48$$16); + ZVAL_UNDEF(&_49$$16); + ZVAL_UNDEF(&_50$$16); ZEPHIR_MM_GROW(); zephir_get_global(&_SERVER, SL("_SERVER")); @@ -454,7 +468,7 @@ PHP_METHOD(Phalcon_Debug, onUncaughtException) { ZEPHIR_CALL_METHOD(&_5, this_ptr, "getversion", NULL, 0); zephir_check_call_status(); zephir_concat_self(&html, &_5 TSRMLS_CC); - zephir_concat_self_str(&html, SL("
") TSRMLS_CC); + zephir_concat_self_str(&html, SL("
") TSRMLS_CC); ZEPHIR_INIT_VAR(&_6); ZEPHIR_CONCAT_SVSVS(&_6, "

", &className, ": ", &escapedMessage, "

"); zephir_concat_self(&html, &_6 TSRMLS_CC); @@ -463,7 +477,7 @@ PHP_METHOD(Phalcon_Debug, onUncaughtException) { ZEPHIR_CALL_METHOD(&_8, exception, "getline", NULL, 0); zephir_check_call_status(); ZEPHIR_INIT_VAR(&_9); - ZEPHIR_CONCAT_SVSVS(&_9, "", &_7, " (", &_8, ")"); + ZEPHIR_CONCAT_SVSVS(&_9, "", &_7, " (", &_8, ")"); zephir_concat_self(&html, &_9 TSRMLS_CC); zephir_concat_self_str(&html, SL("
") TSRMLS_CC); zephir_read_property(&_10, this_ptr, SL("showBackTrace"), PH_NOISY_CC | PH_READONLY); @@ -471,20 +485,20 @@ PHP_METHOD(Phalcon_Debug, onUncaughtException) { if (zephir_is_true(&showBackTrace)) { ZEPHIR_OBS_VAR(&dataVars); zephir_read_property(&dataVars, this_ptr, SL("data"), PH_NOISY_CC); - zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); - zephir_concat_self_str(&html, SL("
  • Backtrace
  • ") TSRMLS_CC); - zephir_concat_self_str(&html, SL("
  • Request
  • ") TSRMLS_CC); - zephir_concat_self_str(&html, SL("
  • Server
  • ") TSRMLS_CC); - zephir_concat_self_str(&html, SL("
  • Included Files
  • ") TSRMLS_CC); - zephir_concat_self_str(&html, SL("
  • Memory
  • ") TSRMLS_CC); + zephir_concat_self_str(&html, SL("
      ") TSRMLS_CC); + zephir_concat_self_str(&html, SL("
    • Backtrace
    • ") TSRMLS_CC); + zephir_concat_self_str(&html, SL("
    • Request
    • ") TSRMLS_CC); + zephir_concat_self_str(&html, SL("
    • Server
    • ") TSRMLS_CC); + zephir_concat_self_str(&html, SL("
    • Included Files
    • ") TSRMLS_CC); + zephir_concat_self_str(&html, SL("
    • Memory
    • ") TSRMLS_CC); if (Z_TYPE_P(&dataVars) == IS_ARRAY) { - zephir_concat_self_str(&html, SL("
    • Variables
    • ") TSRMLS_CC); + zephir_concat_self_str(&html, SL("
    • Variables
    • ") TSRMLS_CC); } zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); - zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); + zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); ZEPHIR_CALL_METHOD(&_11$$5, exception, "gettrace", NULL, 0); zephir_check_call_status(); - zephir_is_iterable(&_11$$5, 0, "phalcon/debug.zep", 248); + zephir_is_iterable(&_11$$5, 0, "phalcon/debug.zep", 256); ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&_11$$5), _13$$5, _14$$5, _12$$5) { ZEPHIR_INIT_NVAR(&n); @@ -502,105 +516,127 @@ PHP_METHOD(Phalcon_Debug, onUncaughtException) { ZEPHIR_INIT_NVAR(&traceItem); ZEPHIR_INIT_NVAR(&n); zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); - zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); + zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); zephir_concat_self_str(&html, SL("") TSRMLS_CC); - zephir_is_iterable(_REQUEST, 0, "phalcon/debug.zep", 262); - ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(_REQUEST), _18$$5, _19$$5, _17$$5) + zephir_read_property(&_18$$5, this_ptr, SL("blacklist"), PH_NOISY_CC | PH_READONLY); + ZEPHIR_INIT_VAR(&_19$$5); + array_init(&_19$$5); + ZEPHIR_INIT_VAR(&_20$$5); + ZVAL_STRING(&_20$$5, "request"); + ZEPHIR_CALL_CE_STATIC(&blacklist, phalcon_helper_arr_ce, "get", &_17, 156, &_18$$5, &_20$$5, &_19$$5); + zephir_check_call_status(); + zephir_is_iterable(_REQUEST, 0, "phalcon/debug.zep", 273); + ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(_REQUEST), _22$$5, _23$$5, _21$$5) { ZEPHIR_INIT_NVAR(&keyRequest); - if (_19$$5 != NULL) { - ZVAL_STR_COPY(&keyRequest, _19$$5); + if (_23$$5 != NULL) { + ZVAL_STR_COPY(&keyRequest, _23$$5); } else { - ZVAL_LONG(&keyRequest, _18$$5); + ZVAL_LONG(&keyRequest, _22$$5); } ZEPHIR_INIT_NVAR(&value); - ZVAL_COPY(&value, _17$$5); - if (Z_TYPE_P(&value) != IS_ARRAY) { - ZEPHIR_INIT_LNVAR(_20$$9); - ZEPHIR_CONCAT_SVSVS(&_20$$9, ""); - zephir_concat_self(&html, &_20$$9 TSRMLS_CC); - } else { - ZEPHIR_CALL_FUNCTION(&_21$$10, "print_r", &_22, 156, &value, &__$true); - zephir_check_call_status(); - ZEPHIR_INIT_LNVAR(_23$$10); - ZEPHIR_CONCAT_SVSVS(&_23$$10, ""); - zephir_concat_self(&html, &_23$$10 TSRMLS_CC); + ZVAL_COPY(&value, _21$$5); + ZEPHIR_INIT_NVAR(&_24$$8); + zephir_fast_strtolower(&_24$$8, &keyRequest); + if (1 != zephir_array_isset(&blacklist, &_24$$8)) { + if (Z_TYPE_P(&value) != IS_ARRAY) { + ZEPHIR_INIT_LNVAR(_25$$10); + ZEPHIR_CONCAT_SVSVS(&_25$$10, ""); + zephir_concat_self(&html, &_25$$10 TSRMLS_CC); + } else { + ZEPHIR_CALL_FUNCTION(&_26$$11, "print_r", &_27, 157, &value, &__$true); + zephir_check_call_status(); + ZEPHIR_INIT_LNVAR(_28$$11); + ZEPHIR_CONCAT_SVSVS(&_28$$11, ""); + zephir_concat_self(&html, &_28$$11 TSRMLS_CC); + } } } ZEND_HASH_FOREACH_END(); ZEPHIR_INIT_NVAR(&value); ZEPHIR_INIT_NVAR(&keyRequest); zephir_concat_self_str(&html, SL("
    KeyValue
    ", &keyRequest, "", &value, "
    ", &keyRequest, "", &_21$$10, "
    ", &keyRequest, "", &value, "
    ", &keyRequest, "", &_26$$11, "
    ") TSRMLS_CC); - zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); + zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); zephir_concat_self_str(&html, SL("") TSRMLS_CC); - zephir_is_iterable(_SERVER, 0, "phalcon/debug.zep", 272); - ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(_SERVER), _25$$5, _26$$5, _24$$5) + zephir_read_property(&_29$$5, this_ptr, SL("blacklist"), PH_NOISY_CC | PH_READONLY); + ZEPHIR_INIT_NVAR(&_20$$5); + array_init(&_20$$5); + ZEPHIR_INIT_VAR(&_30$$5); + ZVAL_STRING(&_30$$5, "server"); + ZEPHIR_CALL_CE_STATIC(&blacklist, phalcon_helper_arr_ce, "get", &_17, 156, &_29$$5, &_30$$5, &_20$$5); + zephir_check_call_status(); + zephir_is_iterable(_SERVER, 0, "phalcon/debug.zep", 286); + ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(_SERVER), _32$$5, _33$$5, _31$$5) { ZEPHIR_INIT_NVAR(&keyServer); - if (_26$$5 != NULL) { - ZVAL_STR_COPY(&keyServer, _26$$5); + if (_33$$5 != NULL) { + ZVAL_STR_COPY(&keyServer, _33$$5); } else { - ZVAL_LONG(&keyServer, _25$$5); + ZVAL_LONG(&keyServer, _32$$5); } ZEPHIR_INIT_NVAR(&value); - ZVAL_COPY(&value, _24$$5); - ZEPHIR_CALL_METHOD(&_27$$11, this_ptr, "getvardump", &_28, 0, &value); - zephir_check_call_status(); - ZEPHIR_INIT_LNVAR(_29$$11); - ZEPHIR_CONCAT_SVSVS(&_29$$11, ""); - zephir_concat_self(&html, &_29$$11 TSRMLS_CC); + ZVAL_COPY(&value, _31$$5); + ZEPHIR_INIT_NVAR(&_34$$12); + zephir_fast_strtolower(&_34$$12, &keyServer); + if (1 != zephir_array_isset(&blacklist, &_34$$12)) { + ZEPHIR_CALL_METHOD(&_35$$13, this_ptr, "getvardump", &_36, 0, &value); + zephir_check_call_status(); + ZEPHIR_INIT_LNVAR(_37$$13); + ZEPHIR_CONCAT_SVSVS(&_37$$13, ""); + zephir_concat_self(&html, &_37$$13 TSRMLS_CC); + } } ZEND_HASH_FOREACH_END(); ZEPHIR_INIT_NVAR(&value); ZEPHIR_INIT_NVAR(&keyServer); zephir_concat_self_str(&html, SL("
    KeyValue
    ", &keyServer, "", &_27$$11, "
    ", &keyServer, "", &_35$$13, "
    ") TSRMLS_CC); - zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); + zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); zephir_concat_self_str(&html, SL("") TSRMLS_CC); - ZEPHIR_CALL_FUNCTION(&_30$$5, "get_included_files", NULL, 157); + ZEPHIR_CALL_FUNCTION(&_38$$5, "get_included_files", NULL, 158); zephir_check_call_status(); - zephir_is_iterable(&_30$$5, 0, "phalcon/debug.zep", 282); - ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&_30$$5), _32$$5, _33$$5, _31$$5) + zephir_is_iterable(&_38$$5, 0, "phalcon/debug.zep", 296); + ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&_38$$5), _40$$5, _41$$5, _39$$5) { ZEPHIR_INIT_NVAR(&keyFile); - if (_33$$5 != NULL) { - ZVAL_STR_COPY(&keyFile, _33$$5); + if (_41$$5 != NULL) { + ZVAL_STR_COPY(&keyFile, _41$$5); } else { - ZVAL_LONG(&keyFile, _32$$5); + ZVAL_LONG(&keyFile, _40$$5); } ZEPHIR_INIT_NVAR(&value); - ZVAL_COPY(&value, _31$$5); - ZEPHIR_INIT_LNVAR(_34$$12); - ZEPHIR_CONCAT_SVSVS(&_34$$12, ""); - zephir_concat_self(&html, &_34$$12 TSRMLS_CC); + ZVAL_COPY(&value, _39$$5); + ZEPHIR_INIT_LNVAR(_42$$14); + ZEPHIR_CONCAT_SVSVS(&_42$$14, ""); + zephir_concat_self(&html, &_42$$14 TSRMLS_CC); } ZEND_HASH_FOREACH_END(); ZEPHIR_INIT_NVAR(&value); ZEPHIR_INIT_NVAR(&keyFile); zephir_concat_self_str(&html, SL("
    #Path
    ", &keyFile, "", &value, "
    ", &keyFile, "", &value, "
    ") TSRMLS_CC); - zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); - ZEPHIR_CALL_FUNCTION(&_35$$5, "memory_get_usage", NULL, 158, &__$true); + zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); + ZEPHIR_CALL_FUNCTION(&_43$$5, "memory_get_usage", NULL, 159, &__$true); zephir_check_call_status(); - ZEPHIR_INIT_VAR(&_36$$5); - ZEPHIR_CONCAT_SVS(&_36$$5, ""); - zephir_concat_self(&html, &_36$$5 TSRMLS_CC); + ZEPHIR_INIT_VAR(&_44$$5); + ZEPHIR_CONCAT_SVS(&_44$$5, ""); + zephir_concat_self(&html, &_44$$5 TSRMLS_CC); zephir_concat_self_str(&html, SL("
    Memory
    Usage", &_35$$5, "
    Memory
    Usage", &_43$$5, "
    ") TSRMLS_CC); if (Z_TYPE_P(&dataVars) == IS_ARRAY) { - zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); + zephir_concat_self_str(&html, SL("
    ") TSRMLS_CC); zephir_concat_self_str(&html, SL("") TSRMLS_CC); - zephir_is_iterable(&dataVars, 0, "phalcon/debug.zep", 300); - ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&dataVars), _38$$13, _39$$13, _37$$13) + zephir_is_iterable(&dataVars, 0, "phalcon/debug.zep", 314); + ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&dataVars), _46$$15, _47$$15, _45$$15) { ZEPHIR_INIT_NVAR(&keyVar); - if (_39$$13 != NULL) { - ZVAL_STR_COPY(&keyVar, _39$$13); + if (_47$$15 != NULL) { + ZVAL_STR_COPY(&keyVar, _47$$15); } else { - ZVAL_LONG(&keyVar, _38$$13); + ZVAL_LONG(&keyVar, _46$$15); } ZEPHIR_INIT_NVAR(&dataVar); - ZVAL_COPY(&dataVar, _37$$13); - zephir_array_fetch_long(&_41$$14, &dataVar, 0, PH_NOISY | PH_READONLY, "phalcon/debug.zep", 298 TSRMLS_CC); - ZEPHIR_CALL_METHOD(&_40$$14, this_ptr, "getvardump", &_28, 0, &_41$$14); + ZVAL_COPY(&dataVar, _45$$15); + zephir_array_fetch_long(&_49$$16, &dataVar, 0, PH_NOISY | PH_READONLY, "phalcon/debug.zep", 312 TSRMLS_CC); + ZEPHIR_CALL_METHOD(&_48$$16, this_ptr, "getvardump", &_36, 0, &_49$$16); zephir_check_call_status(); - ZEPHIR_INIT_LNVAR(_42$$14); - ZEPHIR_CONCAT_SVSVS(&_42$$14, ""); - zephir_concat_self(&html, &_42$$14 TSRMLS_CC); + ZEPHIR_INIT_LNVAR(_50$$16); + ZEPHIR_CONCAT_SVSVS(&_50$$16, ""); + zephir_concat_self(&html, &_50$$16 TSRMLS_CC); } ZEND_HASH_FOREACH_END(); ZEPHIR_INIT_NVAR(&dataVar); ZEPHIR_INIT_NVAR(&keyVar); @@ -608,11 +644,11 @@ PHP_METHOD(Phalcon_Debug, onUncaughtException) { } zephir_concat_self_str(&html, SL("") TSRMLS_CC); } - ZEPHIR_CALL_METHOD(&_43, this_ptr, "getjssources", NULL, 0); + ZEPHIR_CALL_METHOD(&_51, this_ptr, "getjssources", NULL, 0); zephir_check_call_status(); - ZEPHIR_INIT_VAR(&_44); - ZEPHIR_CONCAT_VS(&_44, &_43, ""); - zephir_concat_self(&html, &_44 TSRMLS_CC); + ZEPHIR_INIT_VAR(&_52); + ZEPHIR_CONCAT_VS(&_52, &_51, ""); + zephir_concat_self(&html, &_52 TSRMLS_CC); zend_print_zval(&html, 0); zend_update_static_property(phalcon_debug_ce, ZEND_STRL("isActive"), &__$false); RETURN_MM_BOOL(1); @@ -643,7 +679,7 @@ PHP_METHOD(Phalcon_Debug, onUncaughtLowSeverity) { - ZEPHIR_CALL_FUNCTION(&_0, "error_reporting", NULL, 159); + ZEPHIR_CALL_FUNCTION(&_0, "error_reporting", NULL, 160); zephir_check_call_status(); ZEPHIR_SINIT_VAR(_1); zephir_bitwise_and_function(&_1, &_0, severity TSRMLS_CC); @@ -651,9 +687,9 @@ PHP_METHOD(Phalcon_Debug, onUncaughtLowSeverity) { ZEPHIR_INIT_VAR(&_2$$3); object_init_ex(&_2$$3, zephir_get_internal_ce(SL("errorexception"))); ZVAL_LONG(&_3$$3, 0); - ZEPHIR_CALL_METHOD(NULL, &_2$$3, "__construct", NULL, 160, message, &_3$$3, severity, file, line); + ZEPHIR_CALL_METHOD(NULL, &_2$$3, "__construct", NULL, 161, message, &_3$$3, severity, file, line); zephir_check_call_status(); - zephir_throw_exception_debug(&_2$$3, "phalcon/debug.zep", 330 TSRMLS_CC); + zephir_throw_exception_debug(&_2$$3, "phalcon/debug.zep", 344 TSRMLS_CC); ZEPHIR_MM_RESTORE(); return; } @@ -661,6 +697,85 @@ PHP_METHOD(Phalcon_Debug, onUncaughtLowSeverity) { } +/** + * Sets if files the exception's backtrace must be showed + */ +PHP_METHOD(Phalcon_Debug, setBlacklist) { + + zend_long ZEPHIR_LAST_CALL_STATUS; + zephir_fcall_cache_entry *_0 = NULL; + zval *blacklist_param = NULL, area, result, subArray, value, _1, _2, *_3, _5, *_6, _4$$3, _7$$4; + zval blacklist; + zval *this_ptr = getThis(); + + ZVAL_UNDEF(&blacklist); + ZVAL_UNDEF(&area); + ZVAL_UNDEF(&result); + ZVAL_UNDEF(&subArray); + ZVAL_UNDEF(&value); + ZVAL_UNDEF(&_1); + ZVAL_UNDEF(&_2); + ZVAL_UNDEF(&_5); + ZVAL_UNDEF(&_4$$3); + ZVAL_UNDEF(&_7$$4); + + ZEPHIR_MM_GROW(); + zephir_fetch_params(1, 1, 0, &blacklist_param); + + zephir_get_arrval(&blacklist, blacklist_param); + + + ZEPHIR_INIT_VAR(&_1); + array_init(&_1); + ZEPHIR_INIT_VAR(&_2); + ZVAL_STRING(&_2, "request"); + ZEPHIR_CALL_CE_STATIC(&area, phalcon_helper_arr_ce, "get", &_0, 156, &blacklist, &_2, &_1); + zephir_check_call_status(); + ZEPHIR_INIT_VAR(&subArray); + array_init(&subArray); + ZEPHIR_INIT_VAR(&result); + array_init(&result); + zephir_is_iterable(&area, 0, "phalcon/debug.zep", 364); + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&area), _3) + { + ZEPHIR_INIT_NVAR(&value); + ZVAL_COPY(&value, _3); + ZEPHIR_INIT_NVAR(&_4$$3); + zephir_fast_strtolower(&_4$$3, &value); + ZEPHIR_CPY_WRT(&value, &_4$$3); + ZEPHIR_INIT_NVAR(&_4$$3); + ZVAL_LONG(&_4$$3, 1); + zephir_array_update_zval(&subArray, &value, &_4$$3, PH_COPY | PH_SEPARATE); + } ZEND_HASH_FOREACH_END(); + ZEPHIR_INIT_NVAR(&value); + zephir_array_update_string(&result, SL("request"), &subArray, PH_COPY | PH_SEPARATE); + ZEPHIR_INIT_NVAR(&_2); + array_init(&_2); + ZEPHIR_INIT_VAR(&_5); + ZVAL_STRING(&_5, "server"); + ZEPHIR_CALL_CE_STATIC(&area, phalcon_helper_arr_ce, "get", &_0, 156, &blacklist, &_5, &_2); + zephir_check_call_status(); + ZEPHIR_INIT_NVAR(&subArray); + array_init(&subArray); + zephir_is_iterable(&area, 0, "phalcon/debug.zep", 373); + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&area), _6) + { + ZEPHIR_INIT_NVAR(&value); + ZVAL_COPY(&value, _6); + ZEPHIR_INIT_NVAR(&_7$$4); + zephir_fast_strtolower(&_7$$4, &value); + ZEPHIR_CPY_WRT(&value, &_7$$4); + ZEPHIR_INIT_NVAR(&_7$$4); + ZVAL_LONG(&_7$$4, 1); + zephir_array_update_zval(&subArray, &value, &_7$$4, PH_COPY | PH_SEPARATE); + } ZEND_HASH_FOREACH_END(); + ZEPHIR_INIT_NVAR(&value); + zephir_array_update_string(&result, SL("server"), &subArray, PH_COPY | PH_SEPARATE); + zephir_update_property_zval(this_ptr, SL("blacklist"), &result); + RETURN_THIS(); + +} + /** * Sets if files the exception's backtrace must be showed */ @@ -802,7 +917,7 @@ PHP_METHOD(Phalcon_Debug, escapeString) { ZVAL_LONG(&_3$$3, 2); ZEPHIR_INIT_VAR(&_4$$3); ZVAL_STRING(&_4$$3, "utf-8"); - ZEPHIR_RETURN_CALL_FUNCTION("htmlentities", NULL, 161, &_0$$3, &_3$$3, &_4$$3); + ZEPHIR_RETURN_CALL_FUNCTION("htmlentities", NULL, 162, &_0$$3, &_3$$3, &_4$$3); zephir_check_call_status(); RETURN_MM(); } @@ -862,7 +977,7 @@ PHP_METHOD(Phalcon_Debug, getArrayDump) { } ZEPHIR_INIT_VAR(&dump); array_init(&dump); - zephir_is_iterable(&argument, 0, "phalcon/debug.zep", 428); + zephir_is_iterable(&argument, 0, "phalcon/debug.zep", 464); ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&argument), _2, _3, _1) { ZEPHIR_INIT_NVAR(&k); @@ -881,7 +996,7 @@ PHP_METHOD(Phalcon_Debug, getArrayDump) { zephir_check_call_status(); } else if (Z_TYPE_P(&v) == IS_ARRAY) { ZVAL_LONG(&_6$$8, (zephir_get_numberval(n) + 1)); - ZEPHIR_CALL_METHOD(&_5$$8, this_ptr, "getarraydump", &_7, 162, &v, &_6$$8); + ZEPHIR_CALL_METHOD(&_5$$8, this_ptr, "getarraydump", &_7, 163, &v, &_6$$8); zephir_check_call_status(); ZEPHIR_INIT_NVAR(&varDump); ZEPHIR_CONCAT_SVS(&varDump, "Array(", &_5$$8, ")"); @@ -898,7 +1013,7 @@ PHP_METHOD(Phalcon_Debug, getArrayDump) { } ZEPHIR_INIT_LNVAR(_9$$5); ZEPHIR_CONCAT_SVSV(&_9$$5, "[", &k, "] => ", &varDump); - zephir_array_append(&dump, &_9$$5, PH_SEPARATE, "phalcon/debug.zep", 425); + zephir_array_append(&dump, &_9$$5, PH_SEPARATE, "phalcon/debug.zep", 461); } ZEND_HASH_FOREACH_END(); ZEPHIR_INIT_NVAR(&v); ZEPHIR_INIT_NVAR(&k); @@ -959,7 +1074,7 @@ PHP_METHOD(Phalcon_Debug, getVarDump) { } } if (Z_TYPE_P(variable) == IS_ARRAY) { - ZEPHIR_CALL_METHOD(&_1$$11, this_ptr, "getarraydump", NULL, 162, variable); + ZEPHIR_CALL_METHOD(&_1$$11, this_ptr, "getarraydump", NULL, 163, variable); zephir_check_call_status(); ZEPHIR_CONCAT_SVS(return_value, "Array(", &_1$$11, ")"); RETURN_MM(); @@ -1063,7 +1178,7 @@ PHP_METHOD(Phalcon_Debug, showTraceItem) { ZEPHIR_SINIT_VAR(_0); ZVAL_LONG(&_0, n); ZEPHIR_INIT_VAR(&_1); - ZEPHIR_CONCAT_SVS(&_1, "
    KeyValue
    ", &keyVar, "", &_40$$14, "
    ", &keyVar, "", &_48$$16, "
    #", &_0, ""); + ZEPHIR_CONCAT_SVS(&_1, "
    #", &_0, ""); ZEPHIR_CPY_WRT(&html, &_1); ZEPHIR_OBS_VAR(&className); if (zephir_array_isset_string_fetch(&className, &trace, SL("class"), 0)) { @@ -1078,17 +1193,17 @@ PHP_METHOD(Phalcon_Debug, showTraceItem) { ZEPHIR_INIT_VAR(&_6$$4); ZVAL_STRING(&_6$$4, "\\"); ZEPHIR_INIT_VAR(&_7$$4); - ZVAL_STRING(&_7$$4, "/"); + ZVAL_STRING(&_7$$4, "_"); ZEPHIR_INIT_VAR(&prepareUriClass); zephir_fast_str_replace(&prepareUriClass, &_6$$4, &_7$$4, &className TSRMLS_CC); ZEPHIR_INIT_VAR(&classNameWithLink); - ZEPHIR_CONCAT_SVSVS(&classNameWithLink, "", &className, ""); + ZEPHIR_CONCAT_SVSVS(&classNameWithLink, "", &className, ""); } else { ZEPHIR_INIT_VAR(&classReflection); object_init_ex(&classReflection, zephir_get_internal_ce(SL("reflectionclass"))); ZEPHIR_CALL_METHOD(NULL, &classReflection, "__construct", NULL, 82, &className); zephir_check_call_status(); - ZEPHIR_CALL_METHOD(&_8$$5, &classReflection, "isinternal", NULL, 163); + ZEPHIR_CALL_METHOD(&_8$$5, &classReflection, "isinternal", NULL, 164); zephir_check_call_status(); if (zephir_is_true(&_8$$5)) { ZEPHIR_INIT_VAR(&_9$$6); @@ -1100,19 +1215,19 @@ PHP_METHOD(Phalcon_Debug, showTraceItem) { ZEPHIR_INIT_VAR(&prepareInternalClass); zephir_fast_str_replace(&prepareInternalClass, &_10$$6, &_11$$6, &_9$$6 TSRMLS_CC); ZEPHIR_INIT_NVAR(&classNameWithLink); - ZEPHIR_CONCAT_SVSVS(&classNameWithLink, "", &className, ""); + ZEPHIR_CONCAT_SVSVS(&classNameWithLink, "", &className, ""); } else { ZEPHIR_CPY_WRT(&classNameWithLink, &className); } } ZEPHIR_INIT_VAR(&_12$$3); - ZEPHIR_CONCAT_SVS(&_12$$3, "", &classNameWithLink, ""); + ZEPHIR_CONCAT_SVS(&_12$$3, "", &classNameWithLink, ""); zephir_concat_self(&html, &_12$$3 TSRMLS_CC); - zephir_array_fetch_string(&_13$$3, &trace, SL("type"), PH_NOISY | PH_READONLY, "phalcon/debug.zep", 567 TSRMLS_CC); + zephir_array_fetch_string(&_13$$3, &trace, SL("type"), PH_NOISY | PH_READONLY, "phalcon/debug.zep", 603 TSRMLS_CC); zephir_concat_self(&html, &_13$$3 TSRMLS_CC); } ZEPHIR_OBS_VAR(&functionName); - zephir_array_fetch_string(&functionName, &trace, SL("function"), PH_NOISY, "phalcon/debug.zep", 573 TSRMLS_CC); + zephir_array_fetch_string(&functionName, &trace, SL("function"), PH_NOISY, "phalcon/debug.zep", 609 TSRMLS_CC); if (zephir_array_isset_string(&trace, SL("class"))) { ZEPHIR_CPY_WRT(&functionNameWithLink, &functionName); } else { @@ -1121,7 +1236,7 @@ PHP_METHOD(Phalcon_Debug, showTraceItem) { object_init_ex(&functionReflection, zephir_get_internal_ce(SL("reflectionfunction"))); ZEPHIR_CALL_METHOD(NULL, &functionReflection, "__construct", NULL, 75, &functionName); zephir_check_call_status(); - ZEPHIR_CALL_METHOD(&_14$$10, &functionReflection, "isinternal", NULL, 164); + ZEPHIR_CALL_METHOD(&_14$$10, &functionReflection, "isinternal", NULL, 165); zephir_check_call_status(); if (zephir_is_true(&_14$$10)) { ZEPHIR_INIT_VAR(&_15$$11); @@ -1131,7 +1246,7 @@ PHP_METHOD(Phalcon_Debug, showTraceItem) { ZEPHIR_INIT_VAR(&preparedFunctionName); zephir_fast_str_replace(&preparedFunctionName, &_15$$11, &_16$$11, &functionName TSRMLS_CC); ZEPHIR_INIT_NVAR(&functionNameWithLink); - ZEPHIR_CONCAT_SVSVS(&functionNameWithLink, "", &functionName, ""); + ZEPHIR_CONCAT_SVSVS(&functionNameWithLink, "", &functionName, ""); } else { ZEPHIR_CPY_WRT(&functionNameWithLink, &functionName); } @@ -1140,13 +1255,13 @@ PHP_METHOD(Phalcon_Debug, showTraceItem) { } } ZEPHIR_INIT_VAR(&_17); - ZEPHIR_CONCAT_SVS(&_17, "", &functionNameWithLink, ""); + ZEPHIR_CONCAT_SVS(&_17, "", &functionNameWithLink, ""); zephir_concat_self(&html, &_17 TSRMLS_CC); ZEPHIR_OBS_VAR(&traceArgs); if (zephir_array_isset_string_fetch(&traceArgs, &trace, SL("args"), 0)) { ZEPHIR_INIT_VAR(&arguments); array_init(&arguments); - zephir_is_iterable(&traceArgs, 0, "phalcon/debug.zep", 622); + zephir_is_iterable(&traceArgs, 0, "phalcon/debug.zep", 658); ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&traceArgs), _18$$14) { ZEPHIR_INIT_NVAR(&argument); @@ -1154,8 +1269,8 @@ PHP_METHOD(Phalcon_Debug, showTraceItem) { ZEPHIR_CALL_METHOD(&_19$$15, this_ptr, "getvardump", &_20, 0, &argument); zephir_check_call_status(); ZEPHIR_INIT_LNVAR(_21$$15); - ZEPHIR_CONCAT_SVS(&_21$$15, "", &_19$$15, ""); - zephir_array_append(&arguments, &_21$$15, PH_SEPARATE, "phalcon/debug.zep", 616); + ZEPHIR_CONCAT_SVS(&_21$$15, "", &_19$$15, ""); + zephir_array_append(&arguments, &_21$$15, PH_SEPARATE, "phalcon/debug.zep", 652); } ZEND_HASH_FOREACH_END(); ZEPHIR_INIT_NVAR(&argument); ZEPHIR_INIT_VAR(&_22$$14); @@ -1167,16 +1282,16 @@ PHP_METHOD(Phalcon_Debug, showTraceItem) { ZEPHIR_OBS_VAR(&filez); if (zephir_array_isset_string_fetch(&filez, &trace, SL("file"), 0)) { ZEPHIR_OBS_VAR(&_24$$16); - zephir_array_fetch_string(&_24$$16, &trace, SL("line"), PH_NOISY, "phalcon/debug.zep", 630 TSRMLS_CC); + zephir_array_fetch_string(&_24$$16, &trace, SL("line"), PH_NOISY, "phalcon/debug.zep", 666 TSRMLS_CC); zephir_get_strval(&_25$$16, &_24$$16); ZEPHIR_CPY_WRT(&line, &_25$$16); ZEPHIR_INIT_VAR(&_26$$16); - ZEPHIR_CONCAT_SVSVS(&_26$$16, "
    ", &filez, " (", &line, ")
    "); + ZEPHIR_CONCAT_SVSVS(&_26$$16, "
    ", &filez, " (", &line, ")
    "); zephir_concat_self(&html, &_26$$16 TSRMLS_CC); zephir_read_property(&_27$$16, this_ptr, SL("showFiles"), PH_NOISY_CC | PH_READONLY); ZEPHIR_CPY_WRT(&showFiles, &_27$$16); if (zephir_is_true(&showFiles)) { - ZEPHIR_CALL_FUNCTION(&lines, "file", NULL, 165, &filez); + ZEPHIR_CALL_FUNCTION(&lines, "file", NULL, 166, &filez); zephir_check_call_status(); ZEPHIR_INIT_VAR(&numberLines); ZVAL_LONG(&numberLines, zephir_fast_count_int(&lines TSRMLS_CC)); @@ -1199,14 +1314,14 @@ PHP_METHOD(Phalcon_Debug, showTraceItem) { ZVAL_LONG(&lastLine, afterLine$$18); } ZEPHIR_INIT_VAR(&_29$$18); - ZEPHIR_CONCAT_SVSVSVS(&_29$$18, "
    ");
    +				ZEPHIR_CONCAT_SVSVSVS(&_29$$18, "
    ");
     				zephir_concat_self(&html, &_29$$18 TSRMLS_CC);
     			} else {
     				ZEPHIR_INIT_NVAR(&firstLine);
     				ZVAL_LONG(&firstLine, 1);
     				ZEPHIR_CPY_WRT(&lastLine, &numberLines);
     				ZEPHIR_INIT_VAR(&_30$$23);
    -				ZEPHIR_CONCAT_SVSVS(&_30$$23, "
    ");
    +				ZEPHIR_CONCAT_SVSVS(&_30$$23, "
    ");
     				zephir_concat_self(&html, &_30$$23 TSRMLS_CC);
     			}
     			i = zephir_get_numberval(&firstLine);
    @@ -1217,7 +1332,7 @@ PHP_METHOD(Phalcon_Debug, showTraceItem) {
     				ZEPHIR_INIT_NVAR(&linePosition);
     				ZVAL_LONG(&linePosition, (i - 1));
     				ZEPHIR_OBS_NVAR(¤tLine);
    -				zephir_array_fetch(¤tLine, &lines, &linePosition, PH_NOISY, "phalcon/debug.zep", 702 TSRMLS_CC);
    +				zephir_array_fetch(¤tLine, &lines, &linePosition, PH_NOISY, "phalcon/debug.zep", 738 TSRMLS_CC);
     				if (zephir_is_true(&showFileFragment)) {
     					if (ZEPHIR_IS_LONG(&firstLine, i)) {
     						ZEPHIR_INIT_NVAR(&_31$$26);
    @@ -1256,7 +1371,7 @@ PHP_METHOD(Phalcon_Debug, showTraceItem) {
     					ZVAL_LONG(&_43$$29, 2);
     					ZEPHIR_INIT_NVAR(&_44$$29);
     					ZVAL_STRING(&_44$$29, "UTF-8");
    -					ZEPHIR_CALL_FUNCTION(&_45$$29, "htmlentities", &_46, 161, &_40$$29, &_43$$29, &_44$$29);
    +					ZEPHIR_CALL_FUNCTION(&_45$$29, "htmlentities", &_46, 162, &_40$$29, &_43$$29, &_44$$29);
     					zephir_check_call_status();
     					zephir_concat_self(&html, &_45$$29 TSRMLS_CC);
     				}
    @@ -1270,3 +1385,34 @@ PHP_METHOD(Phalcon_Debug, showTraceItem) {
     
     }
     
    +zend_object *zephir_init_properties_Phalcon_Debug(zend_class_entry *class_type TSRMLS_DC) {
    +
    +		zval _1$$3;
    +	zval _0, _2$$3;
    +		ZVAL_UNDEF(&_0);
    +	ZVAL_UNDEF(&_2$$3);
    +	ZVAL_UNDEF(&_1$$3);
    +
    +		ZEPHIR_MM_GROW();
    +	
    +	{
    +		zval local_this_ptr, *this_ptr = &local_this_ptr;
    +		ZEPHIR_CREATE_OBJECT(this_ptr, class_type);
    +		zephir_read_property(&_0, this_ptr, SL("blacklist"), PH_NOISY_CC | PH_READONLY);
    +		if (Z_TYPE_P(&_0) == IS_NULL) {
    +			ZEPHIR_INIT_VAR(&_1$$3);
    +			zephir_create_array(&_1$$3, 2, 0 TSRMLS_CC);
    +			ZEPHIR_INIT_VAR(&_2$$3);
    +			array_init(&_2$$3);
    +			zephir_array_update_string(&_1$$3, SL("request"), &_2$$3, PH_COPY | PH_SEPARATE);
    +			ZEPHIR_INIT_NVAR(&_2$$3);
    +			array_init(&_2$$3);
    +			zephir_array_update_string(&_1$$3, SL("server"), &_2$$3, PH_COPY | PH_SEPARATE);
    +			zephir_update_property_zval(this_ptr, SL("blacklist"), &_1$$3);
    +		}
    +		ZEPHIR_MM_RESTORE();
    +		return Z_OBJ_P(this_ptr);
    +	}
    +
    +}
    +
    diff --git a/ext/phalcon/debug.zep.h b/ext/phalcon/debug.zep.h
    index b274db54c2f..2fcc89fdbdb 100644
    --- a/ext/phalcon/debug.zep.h
    +++ b/ext/phalcon/debug.zep.h
    @@ -14,6 +14,7 @@ PHP_METHOD(Phalcon_Debug, listenExceptions);
     PHP_METHOD(Phalcon_Debug, listenLowSeverity);
     PHP_METHOD(Phalcon_Debug, onUncaughtException);
     PHP_METHOD(Phalcon_Debug, onUncaughtLowSeverity);
    +PHP_METHOD(Phalcon_Debug, setBlacklist);
     PHP_METHOD(Phalcon_Debug, setShowBackTrace);
     PHP_METHOD(Phalcon_Debug, setShowFileFragment);
     PHP_METHOD(Phalcon_Debug, setShowFiles);
    @@ -22,6 +23,7 @@ PHP_METHOD(Phalcon_Debug, escapeString);
     PHP_METHOD(Phalcon_Debug, getArrayDump);
     PHP_METHOD(Phalcon_Debug, getVarDump);
     PHP_METHOD(Phalcon_Debug, showTraceItem);
    +zend_object *zephir_init_properties_Phalcon_Debug(zend_class_entry *class_type TSRMLS_DC);
     
     #if PHP_VERSION_ID >= 70200
     ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_debug_clearvars, 0, 0, Phalcon\\Debug, 0)
    @@ -111,6 +113,14 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_debug_onuncaughtlowseverity, 0, 0, 5)
     	ZEND_ARG_INFO(0, context)
     ZEND_END_ARG_INFO()
     
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_debug_setblacklist, 0, 1, Phalcon\\Debug, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_debug_setblacklist, 0, 1, IS_OBJECT, "Phalcon\\Debug", 0)
    +#endif
    +	ZEND_ARG_ARRAY_INFO(0, blacklist, 0)
    +ZEND_END_ARG_INFO()
    +
     #if PHP_VERSION_ID >= 70200
     ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_debug_setshowbacktrace, 0, 1, Phalcon\\Debug, 0)
     #else
    @@ -205,6 +215,7 @@ ZEPHIR_INIT_FUNCS(phalcon_debug_method_entry) {
     	PHP_ME(Phalcon_Debug, listenLowSeverity, arginfo_phalcon_debug_listenlowseverity, ZEND_ACC_PUBLIC)
     	PHP_ME(Phalcon_Debug, onUncaughtException, arginfo_phalcon_debug_onuncaughtexception, ZEND_ACC_PUBLIC)
     	PHP_ME(Phalcon_Debug, onUncaughtLowSeverity, arginfo_phalcon_debug_onuncaughtlowseverity, ZEND_ACC_PUBLIC)
    +	PHP_ME(Phalcon_Debug, setBlacklist, arginfo_phalcon_debug_setblacklist, ZEND_ACC_PUBLIC)
     	PHP_ME(Phalcon_Debug, setShowBackTrace, arginfo_phalcon_debug_setshowbacktrace, ZEND_ACC_PUBLIC)
     	PHP_ME(Phalcon_Debug, setShowFileFragment, arginfo_phalcon_debug_setshowfilefragment, ZEND_ACC_PUBLIC)
     	PHP_ME(Phalcon_Debug, setShowFiles, arginfo_phalcon_debug_setshowfiles, ZEND_ACC_PUBLIC)
    diff --git a/ext/phalcon/debug/dump.zep.c b/ext/phalcon/debug/dump.zep.c
    index 01404f9705f..657bcddde85 100644
    --- a/ext/phalcon/debug/dump.zep.c
    +++ b/ext/phalcon/debug/dump.zep.c
    @@ -656,7 +656,7 @@ PHP_METHOD(Phalcon_Debug_Dump, output) {
     				ZEPHIR_INIT_NVAR(&_18$$7);
     				ZVAL_STRING(&_18$$7, "");
     				ZVAL_LONG(&_19$$7, (tab + 1));
    -				ZEPHIR_CALL_METHOD(&_17$$7, this_ptr, "output", &_20, 166, &value, &_18$$7, &_19$$7);
    +				ZEPHIR_CALL_METHOD(&_17$$7, this_ptr, "output", &_20, 167, &value, &_18$$7, &_19$$7);
     				zephir_check_call_status();
     				ZEPHIR_INIT_LNVAR(_21$$7);
     				ZEPHIR_CONCAT_VS(&_21$$7, &_17$$7, "\n");
    @@ -687,7 +687,7 @@ PHP_METHOD(Phalcon_Debug_Dump, output) {
     		ZEPHIR_CALL_FUNCTION(&_25$$8, "strtr", NULL, 50, &_26$$8, &_24$$8);
     		zephir_check_call_status();
     		zephir_concat_self(&output, &_25$$8 TSRMLS_CC);
    -		ZEPHIR_CALL_FUNCTION(&_27$$8, "get_parent_class", NULL, 167, variable);
    +		ZEPHIR_CALL_FUNCTION(&_27$$8, "get_parent_class", NULL, 168, variable);
     		zephir_check_call_status();
     		if (zephir_is_true(&_27$$8)) {
     			ZEPHIR_INIT_VAR(&_28$$9);
    @@ -697,7 +697,7 @@ PHP_METHOD(Phalcon_Debug_Dump, output) {
     			ZEPHIR_CALL_METHOD(&_29$$9, this_ptr, "getstyle", NULL, 0, &_30$$9);
     			zephir_check_call_status();
     			zephir_array_update_string(&_28$$9, SL(":style"), &_29$$9, PH_COPY | PH_SEPARATE);
    -			ZEPHIR_CALL_FUNCTION(&_29$$9, "get_parent_class", NULL, 167, variable);
    +			ZEPHIR_CALL_FUNCTION(&_29$$9, "get_parent_class", NULL, 168, variable);
     			zephir_check_call_status();
     			zephir_array_update_string(&_28$$9, SL(":parent"), &_29$$9, PH_COPY | PH_SEPARATE);
     			ZEPHIR_INIT_NVAR(&_30$$9);
    @@ -755,7 +755,7 @@ PHP_METHOD(Phalcon_Debug_Dump, output) {
     				ZEPHIR_INIT_NVAR(&_44$$12);
     				ZVAL_STRING(&_44$$12, "");
     				ZVAL_LONG(&_40$$12, (tab + 1));
    -				ZEPHIR_CALL_METHOD(&_46$$12, this_ptr, "output", &_20, 166, &value, &_44$$12, &_40$$12);
    +				ZEPHIR_CALL_METHOD(&_46$$12, this_ptr, "output", &_20, 167, &value, &_44$$12, &_40$$12);
     				zephir_check_call_status();
     				ZEPHIR_INIT_LNVAR(_47$$12);
     				ZEPHIR_CONCAT_VS(&_47$$12, &_46$$12, "\n");
    @@ -814,7 +814,7 @@ PHP_METHOD(Phalcon_Debug_Dump, output) {
     				ZEPHIR_INIT_NVAR(&_62$$14);
     				ZVAL_STRING(&_62$$14, "");
     				ZVAL_LONG(&_50$$14, (tab + 1));
    -				ZEPHIR_CALL_METHOD(&_64$$14, this_ptr, "output", &_20, 166, &_65$$14, &_62$$14, &_50$$14);
    +				ZEPHIR_CALL_METHOD(&_64$$14, this_ptr, "output", &_20, 167, &_65$$14, &_62$$14, &_50$$14);
     				zephir_check_call_status();
     				ZEPHIR_INIT_LNVAR(_67$$14);
     				ZEPHIR_CONCAT_VS(&_67$$14, &_64$$14, "\n");
    @@ -822,7 +822,7 @@ PHP_METHOD(Phalcon_Debug_Dump, output) {
     			} ZEND_HASH_FOREACH_END();
     			ZEPHIR_INIT_NVAR(&property$$13);
     		}
    -		ZEPHIR_CALL_FUNCTION(&attr, "get_class_methods", NULL, 168, variable);
    +		ZEPHIR_CALL_FUNCTION(&attr, "get_class_methods", NULL, 169, variable);
     		zephir_check_call_status();
     		ZVAL_LONG(&_68$$8, tab);
     		ZEPHIR_CALL_FUNCTION(&_69$$8, "str_repeat", &_9, 128, &space, &_68$$8);
    @@ -934,7 +934,7 @@ PHP_METHOD(Phalcon_Debug_Dump, output) {
     		ZEPHIR_CONCAT_VV(return_value, &output, &_96$$20);
     		RETURN_MM();
     	}
    -	ZEPHIR_CALL_FUNCTION(&_98, "is_float", NULL, 169, variable);
    +	ZEPHIR_CALL_FUNCTION(&_98, "is_float", NULL, 170, variable);
     	zephir_check_call_status();
     	if (zephir_is_true(&_98)) {
     		ZEPHIR_INIT_VAR(&_99$$21);
    @@ -981,9 +981,9 @@ PHP_METHOD(Phalcon_Debug_Dump, output) {
     		ZVAL_LONG(&_108$$23, 4);
     		ZEPHIR_INIT_NVAR(&_107$$23);
     		ZVAL_STRING(&_107$$23, "utf-8");
    -		ZEPHIR_CALL_FUNCTION(&_106$$23, "htmlentities", NULL, 161, variable, &_108$$23, &_107$$23);
    +		ZEPHIR_CALL_FUNCTION(&_106$$23, "htmlentities", NULL, 162, variable, &_108$$23, &_107$$23);
     		zephir_check_call_status();
    -		ZEPHIR_CALL_FUNCTION(&_109$$23, "nl2br", NULL, 170, &_106$$23);
    +		ZEPHIR_CALL_FUNCTION(&_109$$23, "nl2br", NULL, 171, &_106$$23);
     		zephir_check_call_status();
     		zephir_array_update_string(&_105$$23, SL(":var"), &_109$$23, PH_COPY | PH_SEPARATE);
     		ZEPHIR_INIT_NVAR(&_107$$23);
    diff --git a/ext/phalcon/di.zep.c b/ext/phalcon/di.zep.c
    index 9da17c0abac..9b4e35682e1 100644
    --- a/ext/phalcon/di.zep.c
    +++ b/ext/phalcon/di.zep.c
    @@ -471,31 +471,31 @@ PHP_METHOD(Phalcon_Di, getService) {
      */
     PHP_METHOD(Phalcon_Di, get) {
     
    -	zend_bool _9$$8;
    -	zval _1$$3, _10$$14;
    +	zend_bool _10$$8;
    +	zval _1$$3, _11$$14;
     	zend_long ZEPHIR_LAST_CALL_STATUS;
    -	zval *name_param = NULL, *parameters = NULL, parameters_sub, __$null, service, eventsManager, instance, e, _0, _2$$3, _3$$4, _4$$5, _5$$7, _7$$9, _11$$14;
    -	zval name, _6$$7, _8$$9;
    +	zval *name_param = NULL, *parameters = NULL, parameters_sub, __$null, service, eventsManager, instance, _0, _2$$3, _3$$4, _4$$5, _5$$5, _6$$7, _8$$9, _12$$14;
    +	zval name, _7$$7, _9$$9;
     	zval *this_ptr = getThis();
     
     	ZVAL_UNDEF(&name);
    -	ZVAL_UNDEF(&_6$$7);
    -	ZVAL_UNDEF(&_8$$9);
    +	ZVAL_UNDEF(&_7$$7);
    +	ZVAL_UNDEF(&_9$$9);
     	ZVAL_UNDEF(¶meters_sub);
     	ZVAL_NULL(&__$null);
     	ZVAL_UNDEF(&service);
     	ZVAL_UNDEF(&eventsManager);
     	ZVAL_UNDEF(&instance);
    -	ZVAL_UNDEF(&e);
     	ZVAL_UNDEF(&_0);
     	ZVAL_UNDEF(&_2$$3);
     	ZVAL_UNDEF(&_3$$4);
     	ZVAL_UNDEF(&_4$$5);
    -	ZVAL_UNDEF(&_5$$7);
    -	ZVAL_UNDEF(&_7$$9);
    -	ZVAL_UNDEF(&_11$$14);
    +	ZVAL_UNDEF(&_5$$5);
    +	ZVAL_UNDEF(&_6$$7);
    +	ZVAL_UNDEF(&_8$$9);
    +	ZVAL_UNDEF(&_12$$14);
     	ZVAL_UNDEF(&_1$$3);
    -	ZVAL_UNDEF(&_10$$14);
    +	ZVAL_UNDEF(&_11$$14);
     
     	ZEPHIR_MM_GROW();
     	zephir_fetch_params(1, 1, 1, &name_param, ¶meters);
    @@ -546,37 +546,38 @@ PHP_METHOD(Phalcon_Di, get) {
     				ZEPHIR_INIT_VAR(&_4$$5);
     				ZVAL_OBJ(&_4$$5, EG(exception));
     				Z_ADDREF_P(&_4$$5);
    +				ZEPHIR_INIT_VAR(&_5$$5);
     				if (zephir_instance_of_ev(&_4$$5, phalcon_di_exception_serviceresolutionexception_ce TSRMLS_CC)) {
     					zend_clear_exception(TSRMLS_C);
    -					ZEPHIR_CPY_WRT(&e, &_4$$5);
    -					ZEPHIR_INIT_VAR(&_5$$7);
    -					object_init_ex(&_5$$7, phalcon_di_exception_ce);
    +					ZEPHIR_CPY_WRT(&_5$$5, &_4$$5);
     					ZEPHIR_INIT_VAR(&_6$$7);
    -					ZEPHIR_CONCAT_SVS(&_6$$7, "Service '", &name, "' cannot be resolved");
    -					ZEPHIR_CALL_METHOD(NULL, &_5$$7, "__construct", NULL, 4, &_6$$7);
    +					object_init_ex(&_6$$7, phalcon_di_exception_ce);
    +					ZEPHIR_INIT_VAR(&_7$$7);
    +					ZEPHIR_CONCAT_SVS(&_7$$7, "Service '", &name, "' cannot be resolved");
    +					ZEPHIR_CALL_METHOD(NULL, &_6$$7, "__construct", NULL, 4, &_7$$7);
     					zephir_check_call_status();
    -					zephir_throw_exception_debug(&_5$$7, "phalcon/di.zep", 228 TSRMLS_CC);
    +					zephir_throw_exception_debug(&_6$$7, "phalcon/di.zep", 228 TSRMLS_CC);
     					ZEPHIR_MM_RESTORE();
     					return;
     				}
     			}
     		} else {
     			if (!(zephir_class_exists(&name, 1 TSRMLS_CC))) {
    -				ZEPHIR_INIT_VAR(&_7$$9);
    -				object_init_ex(&_7$$9, phalcon_di_exception_ce);
     				ZEPHIR_INIT_VAR(&_8$$9);
    -				ZEPHIR_CONCAT_SVS(&_8$$9, "Service '", &name, "' wasn't found in the dependency injection container");
    -				ZEPHIR_CALL_METHOD(NULL, &_7$$9, "__construct", NULL, 4, &_8$$9);
    +				object_init_ex(&_8$$9, phalcon_di_exception_ce);
    +				ZEPHIR_INIT_VAR(&_9$$9);
    +				ZEPHIR_CONCAT_SVS(&_9$$9, "Service '", &name, "' wasn't found in the dependency injection container");
    +				ZEPHIR_CALL_METHOD(NULL, &_8$$9, "__construct", NULL, 4, &_9$$9);
     				zephir_check_call_status();
    -				zephir_throw_exception_debug(&_7$$9, "phalcon/di.zep", 235 TSRMLS_CC);
    +				zephir_throw_exception_debug(&_8$$9, "phalcon/di.zep", 235 TSRMLS_CC);
     				ZEPHIR_MM_RESTORE();
     				return;
     			}
    -			_9$$8 = Z_TYPE_P(parameters) == IS_ARRAY;
    -			if (_9$$8) {
    -				_9$$8 = ((zephir_fast_count_int(parameters TSRMLS_CC)) ? 1 : 0);
    +			_10$$8 = Z_TYPE_P(parameters) == IS_ARRAY;
    +			if (_10$$8) {
    +				_10$$8 = ((zephir_fast_count_int(parameters TSRMLS_CC)) ? 1 : 0);
     			}
    -			if (_9$$8) {
    +			if (_10$$8) {
     				ZEPHIR_INIT_NVAR(&instance);
     				ZEPHIR_LAST_CALL_STATUS = zephir_create_instance_params(&instance, &name, parameters TSRMLS_CC);
     				zephir_check_call_status();
    @@ -594,14 +595,14 @@ PHP_METHOD(Phalcon_Di, get) {
     		}
     	}
     	if (Z_TYPE_P(&eventsManager) == IS_OBJECT) {
    -		ZEPHIR_INIT_VAR(&_10$$14);
    -		zephir_create_array(&_10$$14, 3, 0 TSRMLS_CC);
    -		zephir_array_update_string(&_10$$14, SL("name"), &name, PH_COPY | PH_SEPARATE);
    -		zephir_array_update_string(&_10$$14, SL("parameters"), parameters, PH_COPY | PH_SEPARATE);
    -		zephir_array_update_string(&_10$$14, SL("instance"), &instance, PH_COPY | PH_SEPARATE);
     		ZEPHIR_INIT_VAR(&_11$$14);
    -		ZVAL_STRING(&_11$$14, "di:afterServiceResolve");
    -		ZEPHIR_CALL_METHOD(NULL, &eventsManager, "fire", NULL, 0, &_11$$14, this_ptr, &_10$$14);
    +		zephir_create_array(&_11$$14, 3, 0 TSRMLS_CC);
    +		zephir_array_update_string(&_11$$14, SL("name"), &name, PH_COPY | PH_SEPARATE);
    +		zephir_array_update_string(&_11$$14, SL("parameters"), parameters, PH_COPY | PH_SEPARATE);
    +		zephir_array_update_string(&_11$$14, SL("instance"), &instance, PH_COPY | PH_SEPARATE);
    +		ZEPHIR_INIT_VAR(&_12$$14);
    +		ZVAL_STRING(&_12$$14, "di:afterServiceResolve");
    +		ZEPHIR_CALL_METHOD(NULL, &eventsManager, "fire", NULL, 0, &_12$$14, this_ptr, &_11$$14);
     		zephir_check_call_status();
     	}
     	RETURN_CCTOR(&instance);
    diff --git a/ext/phalcon/di/factorydefault.zep.c b/ext/phalcon/di/factorydefault.zep.c
    index 68d93536ceb..a71972c547d 100644
    --- a/ext/phalcon/di/factorydefault.zep.c
    +++ b/ext/phalcon/di/factorydefault.zep.c
    @@ -218,7 +218,7 @@ PHP_METHOD(Phalcon_Di_FactoryDefault, __construct) {
     	ZEPHIR_INIT_NVAR(&_2);
     	object_init_ex(&_2, phalcon_di_service_ce);
     	ZEPHIR_INIT_NVAR(&_3);
    -	ZVAL_STRING(&_3, "Phalcon\\Mvc\\Url");
    +	ZVAL_STRING(&_3, "Phalcon\\Url");
     	ZVAL_BOOL(&_4, 1);
     	ZEPHIR_CALL_METHOD(NULL, &_2, "__construct", NULL, 54, &_3, &_4);
     	zephir_check_call_status();
    diff --git a/ext/phalcon/di/injectable.zep.c b/ext/phalcon/di/injectable.zep.c
    index 11a867043df..dfdd3e1c867 100644
    --- a/ext/phalcon/di/injectable.zep.c
    +++ b/ext/phalcon/di/injectable.zep.c
    @@ -38,7 +38,7 @@
      *
      * @property \Phalcon\Mvc\Dispatcher|\Phalcon\Mvc\DispatcherInterface $dispatcher
      * @property \Phalcon\Mvc\Router|\Phalcon\Mvc\RouterInterface $router
    - * @property \Phalcon\Mvc\Url|\Phalcon\Mvc\UrlInterface $url
    + * @property \Phalcon\Url|\Phalcon\UrlInterface $url
      * @property \Phalcon\Http\Request|\Phalcon\Http\RequestInterface $request
      * @property \Phalcon\Http\Response|\Phalcon\Http\ResponseInterface $response
      * @property \Phalcon\Http\Response\Cookies|\Phalcon\Http\Response\CookiesInterface $cookies
    diff --git a/ext/phalcon/di/service.zep.c b/ext/phalcon/di/service.zep.c
    index 1c46c3fb0de..2d9db7fab05 100644
    --- a/ext/phalcon/di/service.zep.c
    +++ b/ext/phalcon/di/service.zep.c
    @@ -288,7 +288,7 @@ PHP_METHOD(Phalcon_Di_Service, resolve) {
     					ZEPHIR_CALL_METHOD(NULL, &builder, "__construct", NULL, 0);
     					zephir_check_call_status();
     				}
    -				ZEPHIR_CALL_METHOD(&instance, &builder, "build", NULL, 171, dependencyInjector, &definition, parameters);
    +				ZEPHIR_CALL_METHOD(&instance, &builder, "build", NULL, 172, dependencyInjector, &definition, parameters);
     				zephir_check_call_status();
     			} else {
     				found = 0;
    diff --git a/ext/phalcon/di/service/builder.zep.c b/ext/phalcon/di/service/builder.zep.c
    index 1bdc6f42f88..5e3dc722270 100644
    --- a/ext/phalcon/di/service/builder.zep.c
    +++ b/ext/phalcon/di/service/builder.zep.c
    @@ -225,7 +225,7 @@ PHP_METHOD(Phalcon_Di_Service_Builder, _buildParameters) {
     		}
     		ZEPHIR_INIT_NVAR(&argument);
     		ZVAL_COPY(&argument, _0);
    -		ZEPHIR_CALL_METHOD(&_3$$3, this_ptr, "_buildparameter", &_4, 172, dependencyInjector, &position, &argument);
    +		ZEPHIR_CALL_METHOD(&_3$$3, this_ptr, "_buildparameter", &_4, 173, dependencyInjector, &position, &argument);
     		zephir_check_call_status();
     		zephir_array_append(&buildArguments, &_3$$3, PH_SEPARATE, "phalcon/di/service/builder.zep", 105);
     	} ZEND_HASH_FOREACH_END();
    @@ -313,7 +313,7 @@ PHP_METHOD(Phalcon_Di_Service_Builder, build) {
     	} else {
     		ZEPHIR_OBS_VAR(&arguments);
     		if (zephir_array_isset_string_fetch(&arguments, &definition, SL("arguments"), 0)) {
    -			ZEPHIR_CALL_METHOD(&_0$$8, this_ptr, "_buildparameters", NULL, 173, dependencyInjector, &arguments);
    +			ZEPHIR_CALL_METHOD(&_0$$8, this_ptr, "_buildparameters", NULL, 174, dependencyInjector, &arguments);
     			zephir_check_call_status();
     			ZEPHIR_INIT_NVAR(&instance);
     			ZEPHIR_LAST_CALL_STATUS = zephir_create_instance_params(&instance, &className, &_0$$8 TSRMLS_CC);
    @@ -387,7 +387,7 @@ PHP_METHOD(Phalcon_Di_Service_Builder, build) {
     				}
     				if (zephir_fast_count_int(&arguments TSRMLS_CC)) {
     					ZEPHIR_INIT_NVAR(&_11$$18);
    -					ZEPHIR_CALL_METHOD(&_12$$18, this_ptr, "_buildparameters", NULL, 173, dependencyInjector, &arguments);
    +					ZEPHIR_CALL_METHOD(&_12$$18, this_ptr, "_buildparameters", NULL, 174, dependencyInjector, &arguments);
     					zephir_check_call_status();
     					ZEPHIR_CALL_USER_FUNC_ARRAY(&_11$$18, &methodCall, &_12$$18);
     					zephir_check_call_status();
    @@ -457,7 +457,7 @@ PHP_METHOD(Phalcon_Di_Service_Builder, build) {
     				ZEPHIR_MM_RESTORE();
     				return;
     			}
    -			ZEPHIR_CALL_METHOD(&_23$$22, this_ptr, "_buildparameter", &_24, 172, dependencyInjector, &propertyPosition, &propertyValue);
    +			ZEPHIR_CALL_METHOD(&_23$$22, this_ptr, "_buildparameter", &_24, 173, dependencyInjector, &propertyPosition, &propertyValue);
     			zephir_check_call_status();
     			zephir_update_property_zval_zval(&instance, &propertyName, &_23$$22 TSRMLS_CC);
     		} ZEND_HASH_FOREACH_END();
    diff --git a/ext/phalcon/dispatcher.zep.c b/ext/phalcon/dispatcher.zep.c
    index 62cb67d057c..0b662cfc9ea 100644
    --- a/ext/phalcon/dispatcher.zep.c
    +++ b/ext/phalcon/dispatcher.zep.c
    @@ -18,8 +18,8 @@
     #include "kernel/exception.h"
     #include "kernel/array.h"
     #include "kernel/fcall.h"
    -#include "kernel/string.h"
     #include "kernel/concat.h"
    +#include "kernel/string.h"
     #include "ext/spl/spl_exceptions.h"
     
     
    @@ -77,6 +77,8 @@ ZEPHIR_INIT_CLASS(Phalcon_Dispatcher) {
     
     	zend_declare_property_null(phalcon_dispatcher_ce, SL("_activeMethodMap"), ZEND_ACC_PROTECTED TSRMLS_CC);
     
    +	zend_declare_property_null(phalcon_dispatcher_ce, SL("_camelCaseMap"), ZEND_ACC_PROTECTED TSRMLS_CC);
    +
     	zend_declare_property_null(phalcon_dispatcher_ce, SL("_previousNamespaceName"), ZEND_ACC_PROTECTED TSRMLS_CC);
     
     	zend_declare_property_null(phalcon_dispatcher_ce, SL("_previousHandlerName"), ZEND_ACC_PROTECTED TSRMLS_CC);
    @@ -378,7 +380,7 @@ PHP_METHOD(Phalcon_Dispatcher, setParams) {
     
     
     	if (Z_TYPE_P(params) != IS_ARRAY) {
    -		ZEPHIR_THROW_EXCEPTION_DEBUG_STRW(phalcon_exception_ce, "Parameters must be an Array", "phalcon/dispatcher.zep", 226);
    +		ZEPHIR_THROW_EXCEPTION_DEBUG_STRW(phalcon_exception_ce, "Parameters must be an Array", "phalcon/dispatcher.zep", 228);
     		return;
     	}
     	zephir_update_property_zval(this_ptr, SL("_params"), params);
    @@ -511,20 +513,17 @@ PHP_METHOD(Phalcon_Dispatcher, hasParam) {
      */
     PHP_METHOD(Phalcon_Dispatcher, getActiveMethod) {
     
    -	zval activeMethodName, _0, _1, _8, _2$$3, _3$$3, _4$$3, _5$$3, _6$$3, _7$$3;
    +	zval activeMethodName, _0, _1, _5, _2$$3, _3$$3, _4$$3;
     	zend_long ZEPHIR_LAST_CALL_STATUS;
     	zval *this_ptr = getThis();
     
     	ZVAL_UNDEF(&activeMethodName);
     	ZVAL_UNDEF(&_0);
     	ZVAL_UNDEF(&_1);
    -	ZVAL_UNDEF(&_8);
    +	ZVAL_UNDEF(&_5);
     	ZVAL_UNDEF(&_2$$3);
     	ZVAL_UNDEF(&_3$$3);
     	ZVAL_UNDEF(&_4$$3);
    -	ZVAL_UNDEF(&_5$$3);
    -	ZVAL_UNDEF(&_6$$3);
    -	ZVAL_UNDEF(&_7$$3);
     
     	ZEPHIR_MM_GROW();
     
    @@ -532,25 +531,17 @@ PHP_METHOD(Phalcon_Dispatcher, getActiveMethod) {
     	zephir_read_property(&_0, this_ptr, SL("_activeMethodMap"), PH_NOISY_CC | PH_READONLY);
     	zephir_read_property(&_1, this_ptr, SL("_actionName"), PH_NOISY_CC | PH_READONLY);
     	if (!(zephir_array_isset_fetch(&activeMethodName, &_0, &_1, 0 TSRMLS_CC))) {
    -		ZEPHIR_INIT_VAR(&_2$$3);
     		zephir_read_property(&_3$$3, this_ptr, SL("_actionName"), PH_NOISY_CC | PH_READONLY);
    -		ZEPHIR_INIT_VAR(&_4$$3);
    -		ZVAL_STRING(&_4$$3, "/[_-]+/");
    -		ZEPHIR_CALL_FUNCTION(&_5$$3, "preg_split", NULL, 58, &_4$$3, &_3$$3);
    -		zephir_check_call_status();
    -		ZEPHIR_INIT_NVAR(&_4$$3);
    -		ZVAL_STRING(&_4$$3, "ucfirst");
    -		ZEPHIR_CALL_FUNCTION(&_6$$3, "array_map", NULL, 59, &_4$$3, &_5$$3);
    +		ZEPHIR_CALL_METHOD(&_2$$3, this_ptr, "tocamelcase", NULL, 0, &_3$$3);
     		zephir_check_call_status();
    -		zephir_fast_join_str(&_2$$3, SL(""), &_6$$3 TSRMLS_CC);
     		ZEPHIR_CALL_FUNCTION(&activeMethodName, "lcfirst", NULL, 55, &_2$$3);
     		zephir_check_call_status();
    -		ZEPHIR_OBS_VAR(&_7$$3);
    -		zephir_read_property(&_7$$3, this_ptr, SL("_actionName"), PH_NOISY_CC);
    -		zephir_update_property_array(this_ptr, SL("_activeMethodMap"), &_7$$3, &activeMethodName TSRMLS_CC);
    +		ZEPHIR_OBS_VAR(&_4$$3);
    +		zephir_read_property(&_4$$3, this_ptr, SL("_actionName"), PH_NOISY_CC);
    +		zephir_update_property_array(this_ptr, SL("_activeMethodMap"), &_4$$3, &activeMethodName TSRMLS_CC);
     	}
    -	zephir_read_property(&_8, this_ptr, SL("_actionSuffix"), PH_NOISY_CC | PH_READONLY);
    -	ZEPHIR_CONCAT_VV(return_value, &activeMethodName, &_8);
    +	zephir_read_property(&_5, this_ptr, SL("_actionSuffix"), PH_NOISY_CC | PH_READONLY);
    +	ZEPHIR_CONCAT_VV(return_value, &activeMethodName, &_5);
     	RETURN_MM();
     
     }
    @@ -871,7 +862,7 @@ PHP_METHOD(Phalcon_Dispatcher, dispatch) {
     					if (ZEPHIR_IS_FALSE_IDENTICAL(&status)) {
     						RETURN_MM_BOOL(0);
     					}
    -					zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 434 TSRMLS_CC);
    +					zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 436 TSRMLS_CC);
     					ZEPHIR_MM_RESTORE();
     					return;
     				}
    @@ -947,7 +938,7 @@ PHP_METHOD(Phalcon_Dispatcher, dispatch) {
     					if (_21$$15) {
     						continue;
     					}
    -					zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 470 TSRMLS_CC);
    +					zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 472 TSRMLS_CC);
     					ZEPHIR_MM_RESTORE();
     					return;
     				}
    @@ -1097,7 +1088,7 @@ PHP_METHOD(Phalcon_Dispatcher, dispatch) {
     						zephir_check_call_status();
     						continue;
     					}
    -					zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 564 TSRMLS_CC);
    +					zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 566 TSRMLS_CC);
     					ZEPHIR_MM_RESTORE();
     					return;
     				}
    @@ -1141,7 +1132,7 @@ PHP_METHOD(Phalcon_Dispatcher, dispatch) {
     						zephir_check_call_status();
     						continue;
     					}
    -					zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 581 TSRMLS_CC);
    +					zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 583 TSRMLS_CC);
     					ZEPHIR_MM_RESTORE();
     					return;
     				}
    @@ -1184,7 +1175,7 @@ PHP_METHOD(Phalcon_Dispatcher, dispatch) {
     						if (_75$$42) {
     							continue;
     						}
    -						zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 614 TSRMLS_CC);
    +						zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 616 TSRMLS_CC);
     						ZEPHIR_MM_RESTORE();
     						return;
     					}
    @@ -1231,7 +1222,7 @@ PHP_METHOD(Phalcon_Dispatcher, dispatch) {
     						if (_85$$47) {
     							continue;
     						}
    -						zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 631 TSRMLS_CC);
    +						zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 633 TSRMLS_CC);
     						ZEPHIR_MM_RESTORE();
     						return;
     					}
    @@ -1303,7 +1294,7 @@ PHP_METHOD(Phalcon_Dispatcher, dispatch) {
     				if (_101$$58) {
     					continue;
     				}
    -				zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 681 TSRMLS_CC);
    +				zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 683 TSRMLS_CC);
     				ZEPHIR_MM_RESTORE();
     				return;
     			}
    @@ -1344,7 +1335,7 @@ PHP_METHOD(Phalcon_Dispatcher, dispatch) {
     					if (_111$$63) {
     						continue;
     					}
    -					zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 695 TSRMLS_CC);
    +					zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 697 TSRMLS_CC);
     					ZEPHIR_MM_RESTORE();
     					return;
     				}
    @@ -1384,7 +1375,7 @@ PHP_METHOD(Phalcon_Dispatcher, dispatch) {
     					if (_119$$68) {
     						continue;
     					}
    -					zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 710 TSRMLS_CC);
    +					zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 712 TSRMLS_CC);
     					ZEPHIR_MM_RESTORE();
     					return;
     				}
    @@ -1418,7 +1409,7 @@ PHP_METHOD(Phalcon_Dispatcher, dispatch) {
     					if (_126$$72) {
     						continue;
     					}
    -					zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 724 TSRMLS_CC);
    +					zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 726 TSRMLS_CC);
     					ZEPHIR_MM_RESTORE();
     					return;
     				}
    @@ -1448,7 +1439,7 @@ PHP_METHOD(Phalcon_Dispatcher, dispatch) {
     				if (ZEPHIR_IS_FALSE_IDENTICAL(&_130$$76)) {
     					RETURN_MM_BOOL(0);
     				}
    -				zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 741 TSRMLS_CC);
    +				zephir_throw_exception_debug(&e, "phalcon/dispatcher.zep", 743 TSRMLS_CC);
     				ZEPHIR_MM_RESTORE();
     				return;
     			}
    @@ -1499,11 +1490,11 @@ PHP_METHOD(Phalcon_Dispatcher, forward) {
     
     	zephir_read_property(&_0, this_ptr, SL("_isControllerInitialize"), PH_NOISY_CC | PH_READONLY);
     	if (ZEPHIR_IS_TRUE_IDENTICAL(&_0)) {
    -		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_exception_ce, "Forwarding inside a controller's initialize() method is forbidden", "phalcon/dispatcher.zep", 772);
    +		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_exception_ce, "Forwarding inside a controller's initialize() method is forbidden", "phalcon/dispatcher.zep", 774);
     		return;
     	}
     	if (Z_TYPE_P(forward) != IS_ARRAY) {
    -		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_exception_ce, "Forward parameter must be an Array", "phalcon/dispatcher.zep", 780);
    +		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_exception_ce, "Forward parameter must be an Array", "phalcon/dispatcher.zep", 782);
     		return;
     	}
     	zephir_read_property(&_1, this_ptr, SL("_namespaceName"), PH_NOISY_CC | PH_READONLY);
    @@ -1578,9 +1569,9 @@ PHP_METHOD(Phalcon_Dispatcher, getHandlerClass) {
     	zephir_read_property(&handlerName, this_ptr, SL("_handlerName"), PH_NOISY_CC);
     	ZEPHIR_OBS_VAR(&namespaceName);
     	zephir_read_property(&namespaceName, this_ptr, SL("_namespaceName"), PH_NOISY_CC);
    -	if (!(zephir_memnstr_str(&handlerName, SL("\\"), "phalcon/dispatcher.zep", 837))) {
    -		ZEPHIR_INIT_VAR(&camelizedClass);
    -		zephir_camelize(&camelizedClass, &handlerName, NULL  );
    +	if (!(zephir_memnstr_str(&handlerName, SL("\\"), "phalcon/dispatcher.zep", 839))) {
    +		ZEPHIR_CALL_METHOD(&camelizedClass, this_ptr, "tocamelcase", NULL, 0, &handlerName);
    +		zephir_check_call_status();
     	} else {
     		ZEPHIR_CPY_WRT(&camelizedClass, &handlerName);
     	}
    @@ -1703,30 +1694,77 @@ PHP_METHOD(Phalcon_Dispatcher, _resolveEmptyProperties) {
     
     }
     
    +PHP_METHOD(Phalcon_Dispatcher, toCamelCase) {
    +
    +	zend_long ZEPHIR_LAST_CALL_STATUS;
    +	zval *input_param = NULL, camelCaseInput, _0, _1$$3, _2$$3, _3$$3;
    +	zval input;
    +	zval *this_ptr = getThis();
    +
    +	ZVAL_UNDEF(&input);
    +	ZVAL_UNDEF(&camelCaseInput);
    +	ZVAL_UNDEF(&_0);
    +	ZVAL_UNDEF(&_1$$3);
    +	ZVAL_UNDEF(&_2$$3);
    +	ZVAL_UNDEF(&_3$$3);
    +
    +	ZEPHIR_MM_GROW();
    +	zephir_fetch_params(1, 1, 0, &input_param);
    +
    +	zephir_get_strval(&input, input_param);
    +
    +
    +	ZEPHIR_OBS_VAR(&camelCaseInput);
    +	zephir_read_property(&_0, this_ptr, SL("_camelCaseMap"), PH_NOISY_CC | PH_READONLY);
    +	if (!(zephir_array_isset_fetch(&camelCaseInput, &_0, &input, 0 TSRMLS_CC))) {
    +		ZEPHIR_INIT_VAR(&_1$$3);
    +		ZVAL_STRING(&_1$$3, "/[_-]+/");
    +		ZEPHIR_CALL_FUNCTION(&_2$$3, "preg_split", NULL, 58, &_1$$3, &input);
    +		zephir_check_call_status();
    +		ZEPHIR_INIT_NVAR(&_1$$3);
    +		ZVAL_STRING(&_1$$3, "ucfirst");
    +		ZEPHIR_CALL_FUNCTION(&_3$$3, "array_map", NULL, 59, &_1$$3, &_2$$3);
    +		zephir_check_call_status();
    +		ZEPHIR_INIT_NVAR(&camelCaseInput);
    +		zephir_fast_join_str(&camelCaseInput, SL(""), &_3$$3 TSRMLS_CC);
    +		zephir_update_property_array(this_ptr, SL("_camelCaseMap"), &input, &camelCaseInput TSRMLS_CC);
    +	}
    +	RETURN_CCTOR(&camelCaseInput);
    +
    +}
    +
     zend_object *zephir_init_properties_Phalcon_Dispatcher(zend_class_entry *class_type TSRMLS_DC) {
     
    -		zval _0, _2, _1$$3, _3$$4;
    +		zval _0, _2, _4, _1$$3, _3$$4, _5$$5;
     		ZVAL_UNDEF(&_0);
     	ZVAL_UNDEF(&_2);
    +	ZVAL_UNDEF(&_4);
     	ZVAL_UNDEF(&_1$$3);
     	ZVAL_UNDEF(&_3$$4);
    +	ZVAL_UNDEF(&_5$$5);
     
     		ZEPHIR_MM_GROW();
     	
     	{
     		zval local_this_ptr, *this_ptr = &local_this_ptr;
     		ZEPHIR_CREATE_OBJECT(this_ptr, class_type);
    -		zephir_read_property(&_0, this_ptr, SL("_activeMethodMap"), PH_NOISY_CC | PH_READONLY);
    +		zephir_read_property(&_0, this_ptr, SL("_camelCaseMap"), PH_NOISY_CC | PH_READONLY);
     		if (Z_TYPE_P(&_0) == IS_NULL) {
     			ZEPHIR_INIT_VAR(&_1$$3);
     			array_init(&_1$$3);
    -			zephir_update_property_zval(this_ptr, SL("_activeMethodMap"), &_1$$3);
    +			zephir_update_property_zval(this_ptr, SL("_camelCaseMap"), &_1$$3);
     		}
    -		zephir_read_property(&_2, this_ptr, SL("_params"), PH_NOISY_CC | PH_READONLY);
    +		zephir_read_property(&_2, this_ptr, SL("_activeMethodMap"), PH_NOISY_CC | PH_READONLY);
     		if (Z_TYPE_P(&_2) == IS_NULL) {
     			ZEPHIR_INIT_VAR(&_3$$4);
     			array_init(&_3$$4);
    -			zephir_update_property_zval(this_ptr, SL("_params"), &_3$$4);
    +			zephir_update_property_zval(this_ptr, SL("_activeMethodMap"), &_3$$4);
    +		}
    +		zephir_read_property(&_4, this_ptr, SL("_params"), PH_NOISY_CC | PH_READONLY);
    +		if (Z_TYPE_P(&_4) == IS_NULL) {
    +			ZEPHIR_INIT_VAR(&_5$$5);
    +			array_init(&_5$$5);
    +			zephir_update_property_zval(this_ptr, SL("_params"), &_5$$5);
     		}
     		ZEPHIR_MM_RESTORE();
     		return Z_OBJ_P(this_ptr);
    diff --git a/ext/phalcon/dispatcher.zep.h b/ext/phalcon/dispatcher.zep.h
    index 73c03b163b4..7a6557111ef 100644
    --- a/ext/phalcon/dispatcher.zep.h
    +++ b/ext/phalcon/dispatcher.zep.h
    @@ -38,6 +38,7 @@ PHP_METHOD(Phalcon_Dispatcher, getHandlerClass);
     PHP_METHOD(Phalcon_Dispatcher, callActionMethod);
     PHP_METHOD(Phalcon_Dispatcher, getBoundModels);
     PHP_METHOD(Phalcon_Dispatcher, _resolveEmptyProperties);
    +PHP_METHOD(Phalcon_Dispatcher, toCamelCase);
     zend_object *zephir_init_properties_Phalcon_Dispatcher(zend_class_entry *class_type TSRMLS_DC);
     
     ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_dispatcher_setdi, 0, 0, 1)
    @@ -259,6 +260,18 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_dispatcher_getboundmodel
     #endif
     ZEND_END_ARG_INFO()
     
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_dispatcher_tocamelcase, 0, 1, IS_STRING, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_dispatcher_tocamelcase, 0, 1, IS_STRING, NULL, 0)
    +#endif
    +#if PHP_VERSION_ID >= 70200
    +	ZEND_ARG_TYPE_INFO(0, input, IS_STRING, 0)
    +#else
    +	ZEND_ARG_INFO(0, input)
    +#endif
    +ZEND_END_ARG_INFO()
    +
     ZEPHIR_INIT_FUNCS(phalcon_dispatcher_method_entry) {
     	PHP_ME(Phalcon_Dispatcher, setDI, arginfo_phalcon_dispatcher_setdi, ZEND_ACC_PUBLIC)
     	PHP_ME(Phalcon_Dispatcher, getDI, arginfo_phalcon_dispatcher_getdi, ZEND_ACC_PUBLIC)
    @@ -295,5 +308,6 @@ ZEPHIR_INIT_FUNCS(phalcon_dispatcher_method_entry) {
     	PHP_ME(Phalcon_Dispatcher, callActionMethod, arginfo_phalcon_dispatcher_callactionmethod, ZEND_ACC_PUBLIC)
     	PHP_ME(Phalcon_Dispatcher, getBoundModels, arginfo_phalcon_dispatcher_getboundmodels, ZEND_ACC_PUBLIC)
     	PHP_ME(Phalcon_Dispatcher, _resolveEmptyProperties, NULL, ZEND_ACC_PROTECTED)
    +	PHP_ME(Phalcon_Dispatcher, toCamelCase, arginfo_phalcon_dispatcher_tocamelcase, ZEND_ACC_PROTECTED)
     	PHP_FE_END
     };
    diff --git a/ext/phalcon/escaper.zep.c b/ext/phalcon/escaper.zep.c
    index bb9bb618a52..38c68a0dcb7 100644
    --- a/ext/phalcon/escaper.zep.c
    +++ b/ext/phalcon/escaper.zep.c
    @@ -208,14 +208,14 @@ PHP_METHOD(Phalcon_Escaper, detectEncoding) {
     	{
     		ZEPHIR_INIT_NVAR(&charset);
     		ZVAL_COPY(&charset, _2);
    -		ZEPHIR_CALL_FUNCTION(&_3$$5, "mb_detect_encoding", &_4, 174, &str, &charset, &__$true);
    +		ZEPHIR_CALL_FUNCTION(&_3$$5, "mb_detect_encoding", &_4, 175, &str, &charset, &__$true);
     		zephir_check_call_status();
     		if (zephir_is_true(&_3$$5)) {
     			RETURN_CCTOR(&charset);
     		}
     	} ZEND_HASH_FOREACH_END();
     	ZEPHIR_INIT_NVAR(&charset);
    -	ZEPHIR_RETURN_CALL_FUNCTION("mb_detect_encoding", &_4, 174, &str);
    +	ZEPHIR_RETURN_CALL_FUNCTION("mb_detect_encoding", &_4, 175, &str);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -245,11 +245,11 @@ PHP_METHOD(Phalcon_Escaper, normalizeEncoding) {
     		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_escaper_exception_ce, "Extension 'mbstring' is required", "phalcon/escaper.zep", 135);
     		return;
     	}
    -	ZEPHIR_CALL_METHOD(&_0, this_ptr, "detectencoding", NULL, 175, &str);
    +	ZEPHIR_CALL_METHOD(&_0, this_ptr, "detectencoding", NULL, 176, &str);
     	zephir_check_call_status();
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "UTF-32");
    -	ZEPHIR_RETURN_CALL_FUNCTION("mb_convert_encoding", NULL, 176, &str, &_1, &_0);
    +	ZEPHIR_RETURN_CALL_FUNCTION("mb_convert_encoding", NULL, 177, &str, &_1, &_0);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -279,7 +279,7 @@ PHP_METHOD(Phalcon_Escaper, escapeHtml) {
     	zephir_read_property(&_0, this_ptr, SL("_htmlQuoteType"), PH_NOISY_CC | PH_READONLY);
     	zephir_read_property(&_1, this_ptr, SL("_encoding"), PH_NOISY_CC | PH_READONLY);
     	zephir_read_property(&_2, this_ptr, SL("_doubleEncode"), PH_NOISY_CC | PH_READONLY);
    -	ZEPHIR_RETURN_CALL_FUNCTION("htmlspecialchars", NULL, 177, &text, &_0, &_1, &_2);
    +	ZEPHIR_RETURN_CALL_FUNCTION("htmlspecialchars", NULL, 178, &text, &_0, &_1, &_2);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -309,7 +309,7 @@ PHP_METHOD(Phalcon_Escaper, escapeHtmlAttr) {
     	zephir_read_property(&_0, this_ptr, SL("_encoding"), PH_NOISY_CC | PH_READONLY);
     	zephir_read_property(&_1, this_ptr, SL("_doubleEncode"), PH_NOISY_CC | PH_READONLY);
     	ZVAL_LONG(&_2, 3);
    -	ZEPHIR_RETURN_CALL_FUNCTION("htmlspecialchars", NULL, 177, &attribute, &_2, &_0, &_1);
    +	ZEPHIR_RETURN_CALL_FUNCTION("htmlspecialchars", NULL, 178, &attribute, &_2, &_0, &_1);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -334,7 +334,7 @@ PHP_METHOD(Phalcon_Escaper, escapeCss) {
     	zephir_get_strval(&css, css_param);
     
     
    -	ZEPHIR_CALL_METHOD(&_0, this_ptr, "normalizeencoding", NULL, 178, &css);
    +	ZEPHIR_CALL_METHOD(&_0, this_ptr, "normalizeencoding", NULL, 179, &css);
     	zephir_check_call_status();
     	zephir_escape_css(return_value, &_0);
     	RETURN_MM();
    @@ -360,7 +360,7 @@ PHP_METHOD(Phalcon_Escaper, escapeJs) {
     	zephir_get_strval(&js, js_param);
     
     
    -	ZEPHIR_CALL_METHOD(&_0, this_ptr, "normalizeencoding", NULL, 178, &js);
    +	ZEPHIR_CALL_METHOD(&_0, this_ptr, "normalizeencoding", NULL, 179, &js);
     	zephir_check_call_status();
     	zephir_escape_js(return_value, &_0);
     	RETURN_MM();
    @@ -385,7 +385,7 @@ PHP_METHOD(Phalcon_Escaper, escapeUrl) {
     	zephir_get_strval(&url, url_param);
     
     
    -	ZEPHIR_RETURN_CALL_FUNCTION("rawurlencode", NULL, 179, &url);
    +	ZEPHIR_RETURN_CALL_FUNCTION("rawurlencode", NULL, 180, &url);
     	zephir_check_call_status();
     	RETURN_MM();
     
    diff --git a/ext/phalcon/events/manager.zep.c b/ext/phalcon/events/manager.zep.c
    index c8af097e9bc..639664f9610 100644
    --- a/ext/phalcon/events/manager.zep.c
    +++ b/ext/phalcon/events/manager.zep.c
    @@ -118,7 +118,7 @@ PHP_METHOD(Phalcon_Events_Manager, attach) {
     				zephir_check_call_status();
     			}
     			ZVAL_LONG(&_2$$5, 1);
    -			ZEPHIR_CALL_METHOD(NULL, &priorityQueue, "setextractflags", NULL, 180, &_2$$5);
    +			ZEPHIR_CALL_METHOD(NULL, &priorityQueue, "setextractflags", NULL, 181, &_2$$5);
     			zephir_check_call_status();
     			zephir_update_property_array(this_ptr, SL("_events"), &eventType, &priorityQueue TSRMLS_CC);
     		} else {
    @@ -127,7 +127,7 @@ PHP_METHOD(Phalcon_Events_Manager, attach) {
     	}
     	if (Z_TYPE_P(&priorityQueue) == IS_OBJECT) {
     		ZVAL_LONG(&_3$$7, priority);
    -		ZEPHIR_CALL_METHOD(NULL, &priorityQueue, "insert", NULL, 181, handler, &_3$$7);
    +		ZEPHIR_CALL_METHOD(NULL, &priorityQueue, "insert", NULL, 182, handler, &_3$$7);
     		zephir_check_call_status();
     	} else {
     		zephir_array_append(&priorityQueue, handler, PH_SEPARATE, "phalcon/events/manager.zep", 71);
    @@ -194,7 +194,7 @@ PHP_METHOD(Phalcon_Events_Manager, detach) {
     				zephir_check_call_status();
     			}
     			ZVAL_LONG(&_1$$5, 1);
    -			ZEPHIR_CALL_METHOD(NULL, &newPriorityQueue, "setextractflags", NULL, 180, &_1$$5);
    +			ZEPHIR_CALL_METHOD(NULL, &newPriorityQueue, "setextractflags", NULL, 181, &_1$$5);
     			zephir_check_call_status();
     			ZVAL_LONG(&_1$$5, 3);
     			ZEPHIR_CALL_METHOD(NULL, &priorityQueue, "setextractflags", NULL, 0, &_1$$5);
    @@ -215,13 +215,13 @@ PHP_METHOD(Phalcon_Events_Manager, detach) {
     				if (!ZEPHIR_IS_IDENTICAL(&_5$$6, handler)) {
     					zephir_array_fetch_string(&_6$$7, &data, SL("data"), PH_NOISY | PH_READONLY, "phalcon/events/manager.zep", 105 TSRMLS_CC);
     					zephir_array_fetch_string(&_7$$7, &data, SL("priority"), PH_NOISY | PH_READONLY, "phalcon/events/manager.zep", 105 TSRMLS_CC);
    -					ZEPHIR_CALL_METHOD(NULL, &newPriorityQueue, "insert", &_8, 181, &_6$$7, &_7$$7);
    +					ZEPHIR_CALL_METHOD(NULL, &newPriorityQueue, "insert", &_8, 182, &_6$$7, &_7$$7);
     					zephir_check_call_status();
     				}
     			}
     			zephir_update_property_array(this_ptr, SL("_events"), &eventType, &newPriorityQueue TSRMLS_CC);
     		} else {
    -			ZEPHIR_CALL_FUNCTION(&key, "array_search", NULL, 182, handler, &priorityQueue, &__$true);
    +			ZEPHIR_CALL_FUNCTION(&key, "array_search", NULL, 183, handler, &priorityQueue, &__$true);
     			zephir_check_call_status();
     			if (!ZEPHIR_IS_FALSE_IDENTICAL(&key)) {
     				zephir_array_unset(&priorityQueue, &key, PH_SEPARATE);
    @@ -663,9 +663,9 @@ PHP_METHOD(Phalcon_Events_Manager, fire) {
     			} else {
     				ZVAL_BOOL(&_4$$7, 0);
     			}
    -			ZEPHIR_CALL_METHOD(NULL, &event, "__construct", NULL, 183, &eventName, source, data, &_4$$7);
    +			ZEPHIR_CALL_METHOD(NULL, &event, "__construct", NULL, 184, &eventName, source, data, &_4$$7);
     			zephir_check_call_status();
    -			ZEPHIR_CALL_METHOD(&status, this_ptr, "firequeue", NULL, 184, &fireEvents, &event);
    +			ZEPHIR_CALL_METHOD(&status, this_ptr, "firequeue", NULL, 185, &fireEvents, &event);
     			zephir_check_call_status();
     		}
     	}
    @@ -684,10 +684,10 @@ PHP_METHOD(Phalcon_Events_Manager, fire) {
     				} else {
     					ZVAL_BOOL(&_6$$10, 0);
     				}
    -				ZEPHIR_CALL_METHOD(NULL, &event, "__construct", NULL, 183, &eventName, source, data, &_6$$10);
    +				ZEPHIR_CALL_METHOD(NULL, &event, "__construct", NULL, 184, &eventName, source, data, &_6$$10);
     				zephir_check_call_status();
     			}
    -			ZEPHIR_CALL_METHOD(&status, this_ptr, "firequeue", NULL, 184, &fireEvents, &event);
    +			ZEPHIR_CALL_METHOD(&status, this_ptr, "firequeue", NULL, 185, &fireEvents, &event);
     			zephir_check_call_status();
     		}
     	}
    diff --git a/ext/phalcon/filter/filterlocator.zep.c b/ext/phalcon/filter/filterlocator.zep.c
    index 452ea4f0123..c13d88932ef 100644
    --- a/ext/phalcon/filter/filterlocator.zep.c
    +++ b/ext/phalcon/filter/filterlocator.zep.c
    @@ -145,11 +145,11 @@ PHP_METHOD(Phalcon_Filter_FilterLocator, sanitize) {
     				_3$$5 = !noRecursive;
     			}
     			if (_3$$5) {
    -				ZEPHIR_CALL_METHOD(&_4$$8, this_ptr, "processarrayvalues", &_5, 185, value, &sanitizerName, &sanitizerParams);
    +				ZEPHIR_CALL_METHOD(&_4$$8, this_ptr, "processarrayvalues", &_5, 186, value, &sanitizerName, &sanitizerParams);
     				zephir_check_call_status();
     				ZEPHIR_CPY_WRT(value, &_4$$8);
     			} else {
    -				ZEPHIR_CALL_METHOD(&_6$$9, this_ptr, "sanitizer", &_7, 186, value, &sanitizerName, &sanitizerParams);
    +				ZEPHIR_CALL_METHOD(&_6$$9, this_ptr, "sanitizer", &_7, 187, value, &sanitizerName, &sanitizerParams);
     				zephir_check_call_status();
     				ZEPHIR_CPY_WRT(value, &_6$$9);
     			}
    @@ -164,11 +164,11 @@ PHP_METHOD(Phalcon_Filter_FilterLocator, sanitize) {
     		_8 = !noRecursive;
     	}
     	if (_8) {
    -		ZEPHIR_RETURN_CALL_METHOD(this_ptr, "processarrayvalues", &_5, 185, value, sanitizers);
    +		ZEPHIR_RETURN_CALL_METHOD(this_ptr, "processarrayvalues", &_5, 186, value, sanitizers);
     		zephir_check_call_status();
     		RETURN_MM();
     	}
    -	ZEPHIR_RETURN_CALL_METHOD(this_ptr, "sanitizer", &_7, 186, value, sanitizers);
    +	ZEPHIR_RETURN_CALL_METHOD(this_ptr, "sanitizer", &_7, 187, value, sanitizers);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -219,7 +219,7 @@ PHP_METHOD(Phalcon_Filter_FilterLocator, processArrayValues) {
     		}
     		ZEPHIR_INIT_NVAR(&itemValue);
     		ZVAL_COPY(&itemValue, _0);
    -		ZEPHIR_CALL_METHOD(&_3$$3, this_ptr, "sanitizer", &_4, 186, &itemValue, &sanitizerName, &sanitizerParams);
    +		ZEPHIR_CALL_METHOD(&_3$$3, this_ptr, "sanitizer", &_4, 187, &itemValue, &sanitizerName, &sanitizerParams);
     		zephir_check_call_status();
     		zephir_array_update_zval(&arrayValue, &itemKey, &_3$$3, PH_COPY | PH_SEPARATE);
     	} ZEND_HASH_FOREACH_END();
    diff --git a/ext/phalcon/filter/filterlocatorfactory.zep.c b/ext/phalcon/filter/filterlocatorfactory.zep.c
    index 849dcfc36fd..6c974b5f7fd 100644
    --- a/ext/phalcon/filter/filterlocatorfactory.zep.c
    +++ b/ext/phalcon/filter/filterlocatorfactory.zep.c
    @@ -72,7 +72,7 @@ PHP_METHOD(Phalcon_Filter_FilterLocatorFactory, newInstance) {
     	add_assoc_stringl_ex(&helpers, SL("upperWords"), SL("Phalcon\\Filter\\Sanitize\\UpperWords"));
     	add_assoc_stringl_ex(&helpers, SL("url"), SL("Phalcon\\Filter\\Sanitize\\Url"));
     	object_init_ex(return_value, phalcon_filter_filterlocator_ce);
    -	ZEPHIR_CALL_METHOD(NULL, return_value, "__construct", NULL, 187, &helpers);
    +	ZEPHIR_CALL_METHOD(NULL, return_value, "__construct", NULL, 188, &helpers);
     	zephir_check_call_status();
     	RETURN_MM();
     
    diff --git a/ext/phalcon/filter/sanitize/absint.zep.c b/ext/phalcon/filter/sanitize/absint.zep.c
    index 7d31ee77efc..fa30a887b85 100644
    --- a/ext/phalcon/filter/sanitize/absint.zep.c
    +++ b/ext/phalcon/filter/sanitize/absint.zep.c
    @@ -57,10 +57,10 @@ PHP_METHOD(Phalcon_Filter_Sanitize_AbsInt, __invoke) {
     
     
     	ZVAL_LONG(&_0, 519);
    -	ZEPHIR_CALL_FUNCTION(&_1, "filter_var", NULL, 188, input, &_0);
    +	ZEPHIR_CALL_FUNCTION(&_1, "filter_var", NULL, 189, input, &_0);
     	zephir_check_call_status();
     	ZVAL_LONG(&_0, zephir_get_intval(&_1));
    -	ZEPHIR_RETURN_CALL_FUNCTION("abs", NULL, 189, &_0);
    +	ZEPHIR_RETURN_CALL_FUNCTION("abs", NULL, 190, &_0);
     	zephir_check_call_status();
     	RETURN_MM();
     
    diff --git a/ext/phalcon/filter/sanitize/email.zep.c b/ext/phalcon/filter/sanitize/email.zep.c
    index d1bea60100d..a3656fa2104 100644
    --- a/ext/phalcon/filter/sanitize/email.zep.c
    +++ b/ext/phalcon/filter/sanitize/email.zep.c
    @@ -57,7 +57,7 @@ PHP_METHOD(Phalcon_Filter_Sanitize_Email, __invoke) {
     
     	ZVAL_LONG(&_0, 517);
     	ZVAL_LONG(&_1, 1048576);
    -	ZEPHIR_RETURN_CALL_FUNCTION("filter_var", NULL, 188, input, &_0, &_1);
    +	ZEPHIR_RETURN_CALL_FUNCTION("filter_var", NULL, 189, input, &_0, &_1);
     	zephir_check_call_status();
     	RETURN_MM();
     
    diff --git a/ext/phalcon/filter/sanitize/floatval.zep.c b/ext/phalcon/filter/sanitize/floatval.zep.c
    index 386cac90c84..761f005e609 100644
    --- a/ext/phalcon/filter/sanitize/floatval.zep.c
    +++ b/ext/phalcon/filter/sanitize/floatval.zep.c
    @@ -63,7 +63,7 @@ PHP_METHOD(Phalcon_Filter_Sanitize_FloatVal, __invoke) {
     	zephir_create_array(&_0, 1, 0 TSRMLS_CC);
     	add_assoc_long_ex(&_0, SL("flags"), 4096);
     	ZVAL_LONG(&_1, 520);
    -	ZEPHIR_CALL_FUNCTION(&_2, "filter_var", NULL, 188, input, &_1, &_0);
    +	ZEPHIR_CALL_FUNCTION(&_2, "filter_var", NULL, 189, input, &_1, &_0);
     	zephir_check_call_status();
     	RETURN_MM_DOUBLE(zephir_get_doubleval(&_2));
     
    diff --git a/ext/phalcon/filter/sanitize/intval.zep.c b/ext/phalcon/filter/sanitize/intval.zep.c
    index c16aee3239a..f6b131f1b47 100644
    --- a/ext/phalcon/filter/sanitize/intval.zep.c
    +++ b/ext/phalcon/filter/sanitize/intval.zep.c
    @@ -57,7 +57,7 @@ PHP_METHOD(Phalcon_Filter_Sanitize_IntVal, __invoke) {
     
     
     	ZVAL_LONG(&_0, 519);
    -	ZEPHIR_CALL_FUNCTION(&_1, "filter_var", NULL, 188, input, &_0);
    +	ZEPHIR_CALL_FUNCTION(&_1, "filter_var", NULL, 189, input, &_0);
     	zephir_check_call_status();
     	RETURN_MM_LONG(zephir_get_intval(&_1));
     
    diff --git a/ext/phalcon/filter/sanitize/lower.zep.c b/ext/phalcon/filter/sanitize/lower.zep.c
    index b00131187c4..9efcf03e0b1 100644
    --- a/ext/phalcon/filter/sanitize/lower.zep.c
    +++ b/ext/phalcon/filter/sanitize/lower.zep.c
    @@ -76,11 +76,11 @@ PHP_METHOD(Phalcon_Filter_Sanitize_Lower, __invoke) {
     		ZVAL_LONG(&_0$$3, 1);
     		ZEPHIR_INIT_VAR(&_1$$3);
     		ZVAL_STRING(&_1$$3, "UTF-8");
    -		ZEPHIR_RETURN_CALL_FUNCTION("mb_convert_case", NULL, 190, &input, &_0$$3, &_1$$3);
    +		ZEPHIR_RETURN_CALL_FUNCTION("mb_convert_case", NULL, 191, &input, &_0$$3, &_1$$3);
     		zephir_check_call_status();
     		RETURN_MM();
     	}
    -	ZEPHIR_CALL_FUNCTION(&_2, "utf8_decode", NULL, 191, &input);
    +	ZEPHIR_CALL_FUNCTION(&_2, "utf8_decode", NULL, 192, &input);
     	zephir_check_call_status();
     	zephir_fast_strtolower(return_value, &_2);
     	RETURN_MM();
    diff --git a/ext/phalcon/filter/sanitize/special.zep.c b/ext/phalcon/filter/sanitize/special.zep.c
    index c23446e7856..8e67424b070 100644
    --- a/ext/phalcon/filter/sanitize/special.zep.c
    +++ b/ext/phalcon/filter/sanitize/special.zep.c
    @@ -55,7 +55,7 @@ PHP_METHOD(Phalcon_Filter_Sanitize_Special, __invoke) {
     
     
     	ZVAL_LONG(&_0, 515);
    -	ZEPHIR_RETURN_CALL_FUNCTION("filter_var", NULL, 188, input, &_0);
    +	ZEPHIR_RETURN_CALL_FUNCTION("filter_var", NULL, 189, input, &_0);
     	zephir_check_call_status();
     	RETURN_MM();
     
    diff --git a/ext/phalcon/filter/sanitize/specialfull.zep.c b/ext/phalcon/filter/sanitize/specialfull.zep.c
    index 7d60bb911c2..90d9bcd9dd6 100644
    --- a/ext/phalcon/filter/sanitize/specialfull.zep.c
    +++ b/ext/phalcon/filter/sanitize/specialfull.zep.c
    @@ -55,7 +55,7 @@ PHP_METHOD(Phalcon_Filter_Sanitize_SpecialFull, __invoke) {
     
     
     	ZVAL_LONG(&_0, 522);
    -	ZEPHIR_RETURN_CALL_FUNCTION("filter_var", NULL, 188, input, &_0);
    +	ZEPHIR_RETURN_CALL_FUNCTION("filter_var", NULL, 189, input, &_0);
     	zephir_check_call_status();
     	RETURN_MM();
     
    diff --git a/ext/phalcon/filter/sanitize/stringval.zep.c b/ext/phalcon/filter/sanitize/stringval.zep.c
    index 58d3b24c9b9..037a8b77a95 100644
    --- a/ext/phalcon/filter/sanitize/stringval.zep.c
    +++ b/ext/phalcon/filter/sanitize/stringval.zep.c
    @@ -55,7 +55,7 @@ PHP_METHOD(Phalcon_Filter_Sanitize_StringVal, __invoke) {
     
     
     	ZVAL_LONG(&_0, 513);
    -	ZEPHIR_RETURN_CALL_FUNCTION("filter_var", NULL, 188, input, &_0);
    +	ZEPHIR_RETURN_CALL_FUNCTION("filter_var", NULL, 189, input, &_0);
     	zephir_check_call_status();
     	RETURN_MM();
     
    diff --git a/ext/phalcon/filter/sanitize/striptags.zep.c b/ext/phalcon/filter/sanitize/striptags.zep.c
    index af35d9c2280..3fc4b555bce 100644
    --- a/ext/phalcon/filter/sanitize/striptags.zep.c
    +++ b/ext/phalcon/filter/sanitize/striptags.zep.c
    @@ -67,7 +67,7 @@ PHP_METHOD(Phalcon_Filter_Sanitize_Striptags, __invoke) {
     	}
     
     
    -	ZEPHIR_RETURN_CALL_FUNCTION("strip_tags", NULL, 192, &input);
    +	ZEPHIR_RETURN_CALL_FUNCTION("strip_tags", NULL, 193, &input);
     	zephir_check_call_status();
     	RETURN_MM();
     
    diff --git a/ext/phalcon/filter/sanitize/upper.zep.c b/ext/phalcon/filter/sanitize/upper.zep.c
    index dd47533d93c..2b8102cb8a4 100644
    --- a/ext/phalcon/filter/sanitize/upper.zep.c
    +++ b/ext/phalcon/filter/sanitize/upper.zep.c
    @@ -76,11 +76,11 @@ PHP_METHOD(Phalcon_Filter_Sanitize_Upper, __invoke) {
     		ZVAL_LONG(&_0$$3, 0);
     		ZEPHIR_INIT_VAR(&_1$$3);
     		ZVAL_STRING(&_1$$3, "UTF-8");
    -		ZEPHIR_RETURN_CALL_FUNCTION("mb_convert_case", NULL, 190, &input, &_0$$3, &_1$$3);
    +		ZEPHIR_RETURN_CALL_FUNCTION("mb_convert_case", NULL, 191, &input, &_0$$3, &_1$$3);
     		zephir_check_call_status();
     		RETURN_MM();
     	}
    -	ZEPHIR_CALL_FUNCTION(&_2, "utf8_decode", NULL, 191, &input);
    +	ZEPHIR_CALL_FUNCTION(&_2, "utf8_decode", NULL, 192, &input);
     	zephir_check_call_status();
     	zephir_fast_strtoupper(return_value, &_2);
     	RETURN_MM();
    diff --git a/ext/phalcon/filter/sanitize/upperwords.zep.c b/ext/phalcon/filter/sanitize/upperwords.zep.c
    index 86055662f7c..b6c29048849 100644
    --- a/ext/phalcon/filter/sanitize/upperwords.zep.c
    +++ b/ext/phalcon/filter/sanitize/upperwords.zep.c
    @@ -75,13 +75,13 @@ PHP_METHOD(Phalcon_Filter_Sanitize_UpperWords, __invoke) {
     		ZVAL_LONG(&_0$$3, 2);
     		ZEPHIR_INIT_VAR(&_1$$3);
     		ZVAL_STRING(&_1$$3, "UTF-8");
    -		ZEPHIR_RETURN_CALL_FUNCTION("mb_convert_case", NULL, 190, &input, &_0$$3, &_1$$3);
    +		ZEPHIR_RETURN_CALL_FUNCTION("mb_convert_case", NULL, 191, &input, &_0$$3, &_1$$3);
     		zephir_check_call_status();
     		RETURN_MM();
     	}
    -	ZEPHIR_CALL_FUNCTION(&_2, "utf8_decode", NULL, 191, &input);
    +	ZEPHIR_CALL_FUNCTION(&_2, "utf8_decode", NULL, 192, &input);
     	zephir_check_call_status();
    -	ZEPHIR_RETURN_CALL_FUNCTION("ucwords", NULL, 193, &_2);
    +	ZEPHIR_RETURN_CALL_FUNCTION("ucwords", NULL, 194, &_2);
     	zephir_check_call_status();
     	RETURN_MM();
     
    diff --git a/ext/phalcon/filter/sanitize/url.zep.c b/ext/phalcon/filter/sanitize/url.zep.c
    index 3a5d602a58c..8374511e176 100644
    --- a/ext/phalcon/filter/sanitize/url.zep.c
    +++ b/ext/phalcon/filter/sanitize/url.zep.c
    @@ -55,7 +55,7 @@ PHP_METHOD(Phalcon_Filter_Sanitize_Url, __invoke) {
     
     
     	ZVAL_LONG(&_0, 518);
    -	ZEPHIR_RETURN_CALL_FUNCTION("filter_var", NULL, 188, input, &_0);
    +	ZEPHIR_RETURN_CALL_FUNCTION("filter_var", NULL, 189, input, &_0);
     	zephir_check_call_status();
     	RETURN_MM();
     
    diff --git a/ext/phalcon/forms/form.zep.c b/ext/phalcon/forms/form.zep.c
    index 2cc5b09fab5..765b7ef614a 100644
    --- a/ext/phalcon/forms/form.zep.c
    +++ b/ext/phalcon/forms/form.zep.c
    @@ -516,7 +516,7 @@ PHP_METHOD(Phalcon_Forms_Form, isValid) {
     	if (_4) {
     		ZEPHIR_INIT_NVAR(&validation);
     		object_init_ex(&validation, phalcon_validation_ce);
    -		ZEPHIR_CALL_METHOD(NULL, &validation, "__construct", NULL, 194);
    +		ZEPHIR_CALL_METHOD(NULL, &validation, "__construct", NULL, 195);
     		zephir_check_call_status();
     	}
     	zephir_read_property(&_5, this_ptr, SL("_elements"), PH_NOISY_CC | PH_READONLY);
    @@ -541,19 +541,19 @@ PHP_METHOD(Phalcon_Forms_Form, isValid) {
     		{
     			ZEPHIR_INIT_NVAR(&validator);
     			ZVAL_COPY(&validator, _8$$11);
    -			ZEPHIR_CALL_METHOD(NULL, &validation, "add", &_9, 195, &name, &validator);
    +			ZEPHIR_CALL_METHOD(NULL, &validation, "add", &_9, 196, &name, &validator);
     			zephir_check_call_status();
     		} ZEND_HASH_FOREACH_END();
     		ZEPHIR_INIT_NVAR(&validator);
     		ZEPHIR_CALL_METHOD(&filters, &element, "getfilters", NULL, 0);
     		zephir_check_call_status();
     		if (Z_TYPE_P(&filters) == IS_ARRAY) {
    -			ZEPHIR_CALL_METHOD(NULL, &validation, "setfilters", &_10, 196, &name, &filters);
    +			ZEPHIR_CALL_METHOD(NULL, &validation, "setfilters", &_10, 197, &name, &filters);
     			zephir_check_call_status();
     		}
     	} ZEND_HASH_FOREACH_END();
     	ZEPHIR_INIT_NVAR(&element);
    -	ZEPHIR_CALL_METHOD(&messages, &validation, "validate", NULL, 197, data, entity);
    +	ZEPHIR_CALL_METHOD(&messages, &validation, "validate", NULL, 198, data, entity);
     	zephir_check_call_status();
     	ZEPHIR_CALL_METHOD(&_11, &messages, "count", NULL, 0);
     	zephir_check_call_status();
    diff --git a/ext/phalcon/forms/manager.zep.c b/ext/phalcon/forms/manager.zep.c
    index aab97e75ced..fe5aa505c1c 100644
    --- a/ext/phalcon/forms/manager.zep.c
    +++ b/ext/phalcon/forms/manager.zep.c
    @@ -71,7 +71,7 @@ PHP_METHOD(Phalcon_Forms_Manager, create) {
     
     	ZEPHIR_INIT_VAR(&form);
     	object_init_ex(&form, phalcon_forms_form_ce);
    -	ZEPHIR_CALL_METHOD(NULL, &form, "__construct", NULL, 198, entity);
    +	ZEPHIR_CALL_METHOD(NULL, &form, "__construct", NULL, 199, entity);
     	zephir_check_call_status();
     	zephir_update_property_array(this_ptr, SL("_forms"), &name, &form TSRMLS_CC);
     	RETURN_CCTOR(&form);
    diff --git a/ext/phalcon/helper/arr.zep.c b/ext/phalcon/helper/arr.zep.c
    new file mode 100644
    index 00000000000..df310ba9a56
    --- /dev/null
    +++ b/ext/phalcon/helper/arr.zep.c
    @@ -0,0 +1,125 @@
    +
    +#ifdef HAVE_CONFIG_H
    +#include "../../ext_config.h"
    +#endif
    +
    +#include 
    +#include "../../php_ext.h"
    +#include "../../ext.h"
    +
    +#include 
    +#include 
    +#include 
    +
    +#include "kernel/main.h"
    +#include "kernel/array.h"
    +#include "ext/spl/spl_exceptions.h"
    +#include "kernel/exception.h"
    +#include "kernel/memory.h"
    +#include "kernel/operators.h"
    +
    +
    +/**
    + * This file is part of the Phalcon.
    + *
    + * (c) Phalcon Team 
    + *
    + * For the full copyright and license information, please view the LICENSE
    + * file that was distributed with this source code.
    + */
    +/**
    + * Phalcon\Helper\Arr
    + *
    + * This class offers quick array functions throught the framework
    + */
    +ZEPHIR_INIT_CLASS(Phalcon_Helper_Arr) {
    +
    +	ZEPHIR_REGISTER_CLASS(Phalcon\\Helper, Arr, phalcon, helper_arr, phalcon_helper_arr_method_entry, 0);
    +
    +	return SUCCESS;
    +
    +}
    +
    +/**
    + * Helper method to get an array element or a default
    + */
    +PHP_METHOD(Phalcon_Helper_Arr, get) {
    +
    +	zval *collection_param = NULL, *index, index_sub, *defaultValue, defaultValue_sub, value;
    +	zval collection;
    +	zval *this_ptr = getThis();
    +
    +	ZVAL_UNDEF(&collection);
    +	ZVAL_UNDEF(&index_sub);
    +	ZVAL_UNDEF(&defaultValue_sub);
    +	ZVAL_UNDEF(&value);
    +
    +	ZEPHIR_MM_GROW();
    +	zephir_fetch_params(1, 3, 0, &collection_param, &index, &defaultValue);
    +
    +	ZEPHIR_OBS_COPY_OR_DUP(&collection, collection_param);
    +
    +
    +	if (EXPECTED(zephir_array_isset_fetch(&value, &collection, index, 1 TSRMLS_CC))) {
    +		RETURN_CTOR(&value);
    +	}
    +	RETVAL_ZVAL(defaultValue, 1, 0);
    +	RETURN_MM();
    +
    +}
    +
    +/**
    + * Helper method to get an array element or a default
    + */
    +PHP_METHOD(Phalcon_Helper_Arr, has) {
    +
    +	zval *collection_param = NULL, *index, index_sub;
    +	zval collection;
    +	zval *this_ptr = getThis();
    +
    +	ZVAL_UNDEF(&collection);
    +	ZVAL_UNDEF(&index_sub);
    +
    +	ZEPHIR_MM_GROW();
    +	zephir_fetch_params(1, 2, 0, &collection_param, &index);
    +
    +	ZEPHIR_OBS_COPY_OR_DUP(&collection, collection_param);
    +
    +
    +	RETURN_MM_BOOL(zephir_array_isset(&collection, index));
    +
    +}
    +
    +/**
    + * Helper method to set an array element
    + */
    +PHP_METHOD(Phalcon_Helper_Arr, set) {
    +
    +	zval *collection_param = NULL, *value, value_sub, *index = NULL, index_sub, __$null;
    +	zval collection;
    +	zval *this_ptr = getThis();
    +
    +	ZVAL_UNDEF(&collection);
    +	ZVAL_UNDEF(&value_sub);
    +	ZVAL_UNDEF(&index_sub);
    +	ZVAL_NULL(&__$null);
    +
    +	ZEPHIR_MM_GROW();
    +	zephir_fetch_params(1, 2, 1, &collection_param, &value, &index);
    +
    +	ZEPHIR_OBS_COPY_OR_DUP(&collection, collection_param);
    +	if (!index) {
    +		index = &index_sub;
    +		index = &__$null;
    +	}
    +
    +
    +	if (Z_TYPE_P(index) == IS_NULL) {
    +		zephir_array_append(&collection, value, PH_SEPARATE, "phalcon/helper/arr.zep", 50);
    +	} else {
    +		zephir_array_update_zval(&collection, index, value, PH_COPY | PH_SEPARATE);
    +	}
    +	RETURN_CTOR(&collection);
    +
    +}
    +
    diff --git a/ext/phalcon/helper/arr.zep.h b/ext/phalcon/helper/arr.zep.h
    new file mode 100644
    index 00000000000..cc6f29bf230
    --- /dev/null
    +++ b/ext/phalcon/helper/arr.zep.h
    @@ -0,0 +1,40 @@
    +
    +extern zend_class_entry *phalcon_helper_arr_ce;
    +
    +ZEPHIR_INIT_CLASS(Phalcon_Helper_Arr);
    +
    +PHP_METHOD(Phalcon_Helper_Arr, get);
    +PHP_METHOD(Phalcon_Helper_Arr, has);
    +PHP_METHOD(Phalcon_Helper_Arr, set);
    +
    +ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_helper_arr_get, 0, 0, 3)
    +	ZEND_ARG_ARRAY_INFO(0, collection, 0)
    +	ZEND_ARG_INFO(0, index)
    +	ZEND_ARG_INFO(0, defaultValue)
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_helper_arr_has, 0, 2, _IS_BOOL, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_helper_arr_has, 0, 2, _IS_BOOL, NULL, 0)
    +#endif
    +	ZEND_ARG_ARRAY_INFO(0, collection, 0)
    +	ZEND_ARG_INFO(0, index)
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_helper_arr_set, 0, 2, IS_ARRAY, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_helper_arr_set, 0, 2, IS_ARRAY, NULL, 0)
    +#endif
    +	ZEND_ARG_ARRAY_INFO(0, collection, 0)
    +	ZEND_ARG_INFO(0, value)
    +	ZEND_ARG_INFO(0, index)
    +ZEND_END_ARG_INFO()
    +
    +ZEPHIR_INIT_FUNCS(phalcon_helper_arr_method_entry) {
    +	PHP_ME(Phalcon_Helper_Arr, get, arginfo_phalcon_helper_arr_get, ZEND_ACC_FINAL|ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
    +	PHP_ME(Phalcon_Helper_Arr, has, arginfo_phalcon_helper_arr_has, ZEND_ACC_FINAL|ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
    +	PHP_ME(Phalcon_Helper_Arr, set, arginfo_phalcon_helper_arr_set, ZEND_ACC_FINAL|ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
    +	PHP_FE_END
    +};
    diff --git a/ext/phalcon/mvc/url/exception.zep.c b/ext/phalcon/helper/exception.zep.c
    similarity index 56%
    rename from ext/phalcon/mvc/url/exception.zep.c
    rename to ext/phalcon/helper/exception.zep.c
    index c0648695464..62a69840f3c 100644
    --- a/ext/phalcon/mvc/url/exception.zep.c
    +++ b/ext/phalcon/helper/exception.zep.c
    @@ -1,11 +1,11 @@
     
     #ifdef HAVE_CONFIG_H
    -#include "../../../ext_config.h"
    +#include "../../ext_config.h"
     #endif
     
     #include 
    -#include "../../../php_ext.h"
    -#include "../../../ext.h"
    +#include "../../php_ext.h"
    +#include "../../ext.h"
     
     #include 
     #include 
    @@ -23,13 +23,14 @@
      * file that was distributed with this source code.
      */
     /**
    - * Phalcon\Mvc\Url\Exception
    + * Phalcon\Helper\Exception
    + *
    + * Exceptions thrown in Phalcon\Helper will use this class
      *
    - * Exceptions thrown in Phalcon\Mvc\Url will use this class
      */
    -ZEPHIR_INIT_CLASS(Phalcon_Mvc_Url_Exception) {
    +ZEPHIR_INIT_CLASS(Phalcon_Helper_Exception) {
     
    -	ZEPHIR_REGISTER_CLASS_EX(Phalcon\\Mvc\\Url, Exception, phalcon, mvc_url_exception, phalcon_exception_ce, NULL, 0);
    +	ZEPHIR_REGISTER_CLASS_EX(Phalcon\\Helper, Exception, phalcon, helper_exception, phalcon_exception_ce, NULL, 0);
     
     	return SUCCESS;
     
    diff --git a/ext/phalcon/helper/exception.zep.h b/ext/phalcon/helper/exception.zep.h
    new file mode 100644
    index 00000000000..96473b0a604
    --- /dev/null
    +++ b/ext/phalcon/helper/exception.zep.h
    @@ -0,0 +1,5 @@
    +
    +extern zend_class_entry *phalcon_helper_exception_ce;
    +
    +ZEPHIR_INIT_CLASS(Phalcon_Helper_Exception);
    +
    diff --git a/ext/phalcon/html/breadcrumbs.zep.c b/ext/phalcon/html/breadcrumbs.zep.c
    index d6fe288d688..30382d263d4 100644
    --- a/ext/phalcon/html/breadcrumbs.zep.c
    +++ b/ext/phalcon/html/breadcrumbs.zep.c
    @@ -243,7 +243,7 @@ PHP_METHOD(Phalcon_Html_Breadcrumbs, render) {
     	ZEPHIR_INIT_VAR(&urls);
     	zephir_array_keys(&urls, &elements TSRMLS_CC);
     	ZEPHIR_MAKE_REF(&urls);
    -	ZEPHIR_CALL_FUNCTION(&lastUrl, "end", NULL, 199, &urls);
    +	ZEPHIR_CALL_FUNCTION(&lastUrl, "end", NULL, 200, &urls);
     	ZEPHIR_UNREF(&urls);
     	zephir_check_call_status();
     	ZEPHIR_OBS_VAR(&lastLabel);
    diff --git a/ext/phalcon/html/tag.zep.c b/ext/phalcon/html/tag.zep.c
    index 27658bd0a62..41f3e46a250 100644
    --- a/ext/phalcon/html/tag.zep.c
    +++ b/ext/phalcon/html/tag.zep.c
    @@ -191,7 +191,7 @@ PHP_METHOD(Phalcon_Html_Tag, button) {
     
     	ZEPHIR_INIT_VAR(&_0);
     	ZVAL_STRING(&_0, "button");
    -	ZEPHIR_RETURN_CALL_METHOD(this_ptr, "renderinput", NULL, 200, &_0, &name, ¶meters);
    +	ZEPHIR_RETURN_CALL_METHOD(this_ptr, "renderinput", NULL, 201, &_0, &name, ¶meters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -248,21 +248,22 @@ PHP_METHOD(Phalcon_Html_Tag, clear) {
     PHP_METHOD(Phalcon_Html_Tag, element) {
     
     	zend_long ZEPHIR_LAST_CALL_STATUS;
    +	zephir_fcall_cache_entry *_0 = NULL;
     	zval parameters;
    -	zval *tag_param = NULL, *parameters_param = NULL, onlyStart, output, selfClose, useEol, _0, _1, _4$$9;
    -	zval tag, _2, _3$$8;
    +	zval *tag_param = NULL, *parameters_param = NULL, onlyStart, output, selfClose, useEol, _1, _2, _5$$9;
    +	zval tag, _3, _4$$8;
     	zval *this_ptr = getThis();
     
     	ZVAL_UNDEF(&tag);
    -	ZVAL_UNDEF(&_2);
    -	ZVAL_UNDEF(&_3$$8);
    +	ZVAL_UNDEF(&_3);
    +	ZVAL_UNDEF(&_4$$8);
     	ZVAL_UNDEF(&onlyStart);
     	ZVAL_UNDEF(&output);
     	ZVAL_UNDEF(&selfClose);
     	ZVAL_UNDEF(&useEol);
    -	ZVAL_UNDEF(&_0);
     	ZVAL_UNDEF(&_1);
    -	ZVAL_UNDEF(&_4$$9);
    +	ZVAL_UNDEF(&_2);
    +	ZVAL_UNDEF(&_5$$9);
     	ZVAL_UNDEF(¶meters);
     
     	ZEPHIR_MM_GROW();
    @@ -286,30 +287,30 @@ PHP_METHOD(Phalcon_Html_Tag, element) {
     	}
     
     
    -	ZEPHIR_INIT_VAR(&_0);
    -	ZVAL_STRING(&_0, "useEol");
    -	ZVAL_BOOL(&_1, 0);
    -	ZEPHIR_CALL_METHOD(&useEol, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &_1);
    +	ZEPHIR_INIT_VAR(&_1);
    +	ZVAL_STRING(&_1, "useEol");
    +	ZVAL_BOOL(&_2, 0);
    +	ZEPHIR_CALL_CE_STATIC(&useEol, phalcon_helper_arr_ce, "get", &_0, 156, ¶meters, &_1, &_2);
     	zephir_check_call_status();
    -	ZEPHIR_INIT_NVAR(&_0);
    -	ZVAL_STRING(&_0, "onlyStart");
    -	ZVAL_BOOL(&_1, 0);
    -	ZEPHIR_CALL_METHOD(&onlyStart, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &_1);
    +	ZEPHIR_INIT_NVAR(&_1);
    +	ZVAL_STRING(&_1, "onlyStart");
    +	ZVAL_BOOL(&_2, 0);
    +	ZEPHIR_CALL_CE_STATIC(&onlyStart, phalcon_helper_arr_ce, "get", &_0, 156, ¶meters, &_1, &_2);
     	zephir_check_call_status();
    -	ZEPHIR_INIT_NVAR(&_0);
    -	ZVAL_STRING(&_0, "selfClose");
    -	ZVAL_BOOL(&_1, 0);
    -	ZEPHIR_CALL_METHOD(&selfClose, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &_1);
    +	ZEPHIR_INIT_NVAR(&_1);
    +	ZVAL_STRING(&_1, "selfClose");
    +	ZVAL_BOOL(&_2, 0);
    +	ZEPHIR_CALL_CE_STATIC(&selfClose, phalcon_helper_arr_ce, "get", &_0, 156, ¶meters, &_1, &_2);
     	zephir_check_call_status();
     	zephir_array_unset_string(¶meters, SL("onlyStart"), PH_SEPARATE);
     	zephir_array_unset_string(¶meters, SL("selfClose"), PH_SEPARATE);
     	zephir_array_unset_string(¶meters, SL("useEol"), PH_SEPARATE);
    -	ZEPHIR_INIT_VAR(&_2);
    -	ZEPHIR_CONCAT_SV(&_2, "<", &tag);
    -	ZEPHIR_CALL_METHOD(&output, this_ptr, "renderattributes", NULL, 202, &_2, ¶meters);
    +	ZEPHIR_INIT_VAR(&_3);
    +	ZEPHIR_CONCAT_SV(&_3, "<", &tag);
    +	ZEPHIR_CALL_METHOD(&output, this_ptr, "renderattributes", NULL, 202, &_3, ¶meters);
     	zephir_check_call_status();
    -	zephir_read_property(&_1, this_ptr, SL("docType"), PH_NOISY_CC | PH_READONLY);
    -	if (ZEPHIR_GT_LONG(&_1, 5)) {
    +	zephir_read_property(&_2, this_ptr, SL("docType"), PH_NOISY_CC | PH_READONLY);
    +	if (ZEPHIR_GT_LONG(&_2, 5)) {
     		if (zephir_is_true(&selfClose)) {
     			zephir_concat_self_str(&output, SL(" />") TSRMLS_CC);
     		} else {
    @@ -319,15 +320,15 @@ PHP_METHOD(Phalcon_Html_Tag, element) {
     		if (zephir_is_true(&onlyStart)) {
     			zephir_concat_self_str(&output, SL(">") TSRMLS_CC);
     		} else {
    -			ZEPHIR_INIT_VAR(&_3$$8);
    -			ZEPHIR_CONCAT_SVS(&_3$$8, ">");
    -			zephir_concat_self(&output, &_3$$8 TSRMLS_CC);
    +			ZEPHIR_INIT_VAR(&_4$$8);
    +			ZEPHIR_CONCAT_SVS(&_4$$8, ">");
    +			zephir_concat_self(&output, &_4$$8 TSRMLS_CC);
     		}
     	}
     	if (zephir_is_true(&useEol)) {
    -		ZEPHIR_INIT_VAR(&_4$$9);
    -		ZEPHIR_GET_CONSTANT(&_4$$9, "PHP_EOL");
    -		zephir_concat_self(&output, &_4$$9 TSRMLS_CC);
    +		ZEPHIR_INIT_VAR(&_5$$9);
    +		ZEPHIR_GET_CONSTANT(&_5$$9, "PHP_EOL");
    +		zephir_concat_self(&output, &_5$$9 TSRMLS_CC);
     	}
     	RETURN_CCTOR(&output);
     
    @@ -362,16 +363,17 @@ PHP_METHOD(Phalcon_Html_Tag, element) {
     PHP_METHOD(Phalcon_Html_Tag, elementClose) {
     
     	zend_long ZEPHIR_LAST_CALL_STATUS;
    +	zephir_fcall_cache_entry *_0 = NULL;
     	zval parameters;
    -	zval *tag_param = NULL, *parameters_param = NULL, useEol, _0, _1, _2$$3;
    +	zval *tag_param = NULL, *parameters_param = NULL, useEol, _1, _2, _3$$3;
     	zval tag;
     	zval *this_ptr = getThis();
     
     	ZVAL_UNDEF(&tag);
     	ZVAL_UNDEF(&useEol);
    -	ZVAL_UNDEF(&_0);
     	ZVAL_UNDEF(&_1);
    -	ZVAL_UNDEF(&_2$$3);
    +	ZVAL_UNDEF(&_2);
    +	ZVAL_UNDEF(&_3$$3);
     	ZVAL_UNDEF(¶meters);
     
     	ZEPHIR_MM_GROW();
    @@ -397,15 +399,15 @@ PHP_METHOD(Phalcon_Html_Tag, elementClose) {
     
     	ZEPHIR_INIT_VAR(&useEol);
     	ZVAL_BOOL(&useEol, 0);
    -	ZEPHIR_INIT_VAR(&_0);
    -	ZVAL_STRING(&_0, "useEol");
    -	ZVAL_BOOL(&_1, 0);
    -	ZEPHIR_CALL_METHOD(&useEol, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &_1);
    +	ZEPHIR_INIT_VAR(&_1);
    +	ZVAL_STRING(&_1, "useEol");
    +	ZVAL_BOOL(&_2, 0);
    +	ZEPHIR_CALL_CE_STATIC(&useEol, phalcon_helper_arr_ce, "get", &_0, 156, ¶meters, &_1, &_2);
     	zephir_check_call_status();
     	if (zephir_is_true(&useEol)) {
    -		ZEPHIR_INIT_VAR(&_2$$3);
    -		ZEPHIR_GET_CONSTANT(&_2$$3, "PHP_EOL");
    -		ZEPHIR_CONCAT_SVSV(return_value, "", &_2$$3);
    +		ZEPHIR_INIT_VAR(&_3$$3);
    +		ZEPHIR_GET_CONSTANT(&_3$$3, "PHP_EOL");
    +		ZEPHIR_CONCAT_SVSV(return_value, "", &_3$$3);
     		RETURN_MM();
     	}
     	ZEPHIR_CONCAT_SVS(return_value, "");
    @@ -471,9 +473,10 @@ PHP_METHOD(Phalcon_Html_Tag, endForm) {
      */
     PHP_METHOD(Phalcon_Html_Tag, form) {
     
    +	zephir_fcall_cache_entry *_2 = NULL;
     	zend_long ZEPHIR_LAST_CALL_STATUS;
     	zval parameters;
    -	zval *action_param = NULL, *parameters_param = NULL, output, params, service, _0, _1, _2, _3, _5, _4$$3;
    +	zval *action_param = NULL, *parameters_param = NULL, output, params, service, _0, _1, _3, _4, _6, _5$$3;
     	zval action;
     	zval *this_ptr = getThis();
     
    @@ -483,10 +486,10 @@ PHP_METHOD(Phalcon_Html_Tag, form) {
     	ZVAL_UNDEF(&service);
     	ZVAL_UNDEF(&_0);
     	ZVAL_UNDEF(&_1);
    -	ZVAL_UNDEF(&_2);
     	ZVAL_UNDEF(&_3);
    -	ZVAL_UNDEF(&_5);
    -	ZVAL_UNDEF(&_4$$3);
    +	ZVAL_UNDEF(&_4);
    +	ZVAL_UNDEF(&_6);
    +	ZVAL_UNDEF(&_5$$3);
     	ZVAL_UNDEF(¶meters);
     
     	ZEPHIR_MM_GROW();
    @@ -507,27 +510,27 @@ PHP_METHOD(Phalcon_Html_Tag, form) {
     	zephir_check_call_status();
     	ZEPHIR_INIT_NVAR(&_0);
     	ZVAL_STRING(&_0, "method");
    -	ZEPHIR_INIT_VAR(&_2);
    -	ZVAL_STRING(&_2, "post");
    -	ZEPHIR_CALL_METHOD(&_1, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &_2);
    +	ZEPHIR_INIT_VAR(&_3);
    +	ZVAL_STRING(&_3, "post");
    +	ZEPHIR_CALL_CE_STATIC(&_1, phalcon_helper_arr_ce, "get", &_2, 156, ¶meters, &_0, &_3);
     	zephir_check_call_status();
     	zephir_array_update_string(¶meters, SL("method"), &_1, PH_COPY | PH_SEPARATE);
    -	ZEPHIR_CALL_METHOD(&_3, &service, "get", NULL, 0, &action);
    +	ZEPHIR_CALL_METHOD(&_4, &service, "get", NULL, 0, &action);
     	zephir_check_call_status();
    -	zephir_array_update_string(¶meters, SL("action"), &_3, PH_COPY | PH_SEPARATE);
    +	zephir_array_update_string(¶meters, SL("action"), &_4, PH_COPY | PH_SEPARATE);
     	ZEPHIR_OBS_VAR(¶ms);
     	if (zephir_array_isset_string_fetch(¶ms, ¶meters, SL("parameters"), 0)) {
    -		ZEPHIR_INIT_VAR(&_4$$3);
    -		ZEPHIR_CONCAT_SV(&_4$$3, "?", ¶ms);
    -		zephir_array_update_string(¶meters, SL("action"), &_4$$3, PH_COPY | PH_SEPARATE);
    +		ZEPHIR_INIT_VAR(&_5$$3);
    +		ZEPHIR_CONCAT_SV(&_5$$3, "?", ¶ms);
    +		zephir_array_update_string(¶meters, SL("action"), &_5$$3, PH_COPY | PH_SEPARATE);
     		zephir_array_unset_string(¶meters, SL("parameters"), PH_SEPARATE);
     	}
     	ZEPHIR_INIT_NVAR(&_0);
     	ZVAL_STRING(&_0, "");
    +	ZEPHIR_CONCAT_VS(&output, &_6, ">");
     	RETURN_CCTOR(&output);
     
     }
    @@ -561,10 +564,11 @@ PHP_METHOD(Phalcon_Html_Tag, form) {
      */
     PHP_METHOD(Phalcon_Html_Tag, friendlyTitle) {
     
    -	zend_bool _9$$4;
    +	zend_bool _10$$4;
    +	zephir_fcall_cache_entry *_6 = NULL;
     	zend_long ZEPHIR_LAST_CALL_STATUS;
     	zval parameters;
    -	zval *text_param = NULL, *parameters_param = NULL, count, from, locale, lowercase, replace, separator, to, output, _0, _1, _6, _7, _8, _14, _2$$3, _3$$3, _4$$3, _5$$3, _10$$4, _11$$4, _12$$4, _13$$8, _15$$9;
    +	zval *text_param = NULL, *parameters_param = NULL, count, from, locale, lowercase, replace, separator, to, output, _0, _1, _7, _8, _9, _15, _2$$3, _3$$3, _4$$3, _5$$3, _11$$4, _12$$4, _13$$4, _14$$8, _16$$9;
     	zval text;
     	zval *this_ptr = getThis();
     
    @@ -579,19 +583,19 @@ PHP_METHOD(Phalcon_Html_Tag, friendlyTitle) {
     	ZVAL_UNDEF(&output);
     	ZVAL_UNDEF(&_0);
     	ZVAL_UNDEF(&_1);
    -	ZVAL_UNDEF(&_6);
     	ZVAL_UNDEF(&_7);
     	ZVAL_UNDEF(&_8);
    -	ZVAL_UNDEF(&_14);
    +	ZVAL_UNDEF(&_9);
    +	ZVAL_UNDEF(&_15);
     	ZVAL_UNDEF(&_2$$3);
     	ZVAL_UNDEF(&_3$$3);
     	ZVAL_UNDEF(&_4$$3);
     	ZVAL_UNDEF(&_5$$3);
    -	ZVAL_UNDEF(&_10$$4);
     	ZVAL_UNDEF(&_11$$4);
     	ZVAL_UNDEF(&_12$$4);
    -	ZVAL_UNDEF(&_13$$8);
    -	ZVAL_UNDEF(&_15$$9);
    +	ZVAL_UNDEF(&_13$$4);
    +	ZVAL_UNDEF(&_14$$8);
    +	ZVAL_UNDEF(&_16$$9);
     	ZVAL_UNDEF(¶meters);
     
     	ZEPHIR_MM_GROW();
    @@ -635,28 +639,28 @@ PHP_METHOD(Phalcon_Html_Tag, friendlyTitle) {
     	}
     	ZEPHIR_INIT_NVAR(&_0);
     	ZVAL_STRING(&_0, "lowercase");
    -	ZVAL_BOOL(&_6, 1);
    -	ZEPHIR_CALL_METHOD(&lowercase, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &_6);
    +	ZVAL_BOOL(&_7, 1);
    +	ZEPHIR_CALL_CE_STATIC(&lowercase, phalcon_helper_arr_ce, "get", &_6, 156, ¶meters, &_0, &_7);
     	zephir_check_call_status();
     	ZEPHIR_INIT_NVAR(&_0);
     	array_init(&_0);
    -	ZEPHIR_INIT_VAR(&_7);
    -	ZVAL_STRING(&_7, "replace");
    -	ZEPHIR_CALL_METHOD(&replace, this_ptr, "arraygetdefault", NULL, 201, &_7, ¶meters, &_0);
    -	zephir_check_call_status();
    -	ZEPHIR_INIT_NVAR(&_7);
    -	ZVAL_STRING(&_7, "separator");
     	ZEPHIR_INIT_VAR(&_8);
    -	ZVAL_STRING(&_8, "-");
    -	ZEPHIR_CALL_METHOD(&separator, this_ptr, "arraygetdefault", NULL, 201, &_7, ¶meters, &_8);
    +	ZVAL_STRING(&_8, "replace");
    +	ZEPHIR_CALL_CE_STATIC(&replace, phalcon_helper_arr_ce, "get", &_6, 156, ¶meters, &_8, &_0);
    +	zephir_check_call_status();
    +	ZEPHIR_INIT_NVAR(&_8);
    +	ZVAL_STRING(&_8, "separator");
    +	ZEPHIR_INIT_VAR(&_9);
    +	ZVAL_STRING(&_9, "-");
    +	ZEPHIR_CALL_CE_STATIC(&separator, phalcon_helper_arr_ce, "get", &_6, 156, ¶meters, &_8, &_9);
     	zephir_check_call_status();
     	if (!(ZEPHIR_IS_EMPTY(&replace))) {
    -		_9$$4 = Z_TYPE_P(&replace) != IS_ARRAY;
    -		if (_9$$4) {
    -			_9$$4 = Z_TYPE_P(&replace) != IS_STRING;
    +		_10$$4 = Z_TYPE_P(&replace) != IS_ARRAY;
    +		if (_10$$4) {
    +			_10$$4 = Z_TYPE_P(&replace) != IS_STRING;
     		}
    -		if (_9$$4) {
    -			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_html_exception_ce, "Parameter replace must be an array or a string", "phalcon/html/tag.zep", 323);
    +		if (_10$$4) {
    +			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_html_exception_ce, "Parameter replace must be an array or a string", "phalcon/html/tag.zep", 324);
     			return;
     		}
     		if (Z_TYPE_P(&replace) == IS_STRING) {
    @@ -668,42 +672,42 @@ PHP_METHOD(Phalcon_Html_Tag, friendlyTitle) {
     		}
     		ZEPHIR_INIT_VAR(&count);
     		ZVAL_LONG(&count, zephir_fast_count_int(&from TSRMLS_CC));
    -		ZVAL_LONG(&_10$$4, 0);
    -		ZVAL_LONG(&_11$$4, (zephir_get_numberval(&count) - 1));
    -		ZEPHIR_INIT_VAR(&_12$$4);
    -		ZVAL_STRING(&_12$$4, " ");
    -		ZEPHIR_CALL_FUNCTION(&to, "array_fill", NULL, 206, &_10$$4, &_11$$4, &_12$$4);
    +		ZVAL_LONG(&_11$$4, 0);
    +		ZVAL_LONG(&_12$$4, (zephir_get_numberval(&count) - 1));
    +		ZEPHIR_INIT_VAR(&_13$$4);
    +		ZVAL_STRING(&_13$$4, " ");
    +		ZEPHIR_CALL_FUNCTION(&to, "array_fill", NULL, 206, &_11$$4, &_12$$4, &_13$$4);
     		zephir_check_call_status();
    -		ZEPHIR_INIT_NVAR(&_12$$4);
    -		zephir_fast_str_replace(&_12$$4, &from, &to, &text TSRMLS_CC);
    -		zephir_get_strval(&text, &_12$$4);
    +		ZEPHIR_INIT_NVAR(&_13$$4);
    +		zephir_fast_str_replace(&_13$$4, &from, &to, &text TSRMLS_CC);
    +		zephir_get_strval(&text, &_13$$4);
     	}
    -	ZEPHIR_INIT_NVAR(&_7);
    -	ZVAL_STRING(&_7, "/[^a-zA-Z0-9\\/_|+ -]/");
     	ZEPHIR_INIT_NVAR(&_8);
    -	ZVAL_STRING(&_8, "");
    -	ZEPHIR_CALL_FUNCTION(&output, "preg_replace", NULL, 23, &_7, &_8, &text);
    +	ZVAL_STRING(&_8, "/[^a-zA-Z0-9\\/_|+ -]/");
    +	ZEPHIR_INIT_NVAR(&_9);
    +	ZVAL_STRING(&_9, "");
    +	ZEPHIR_CALL_FUNCTION(&output, "preg_replace", NULL, 23, &_8, &_9, &text);
     	zephir_check_call_status();
     	if (zephir_is_true(&lowercase)) {
    -		ZEPHIR_INIT_VAR(&_13$$8);
    -		zephir_fast_strtolower(&_13$$8, &output);
    -		ZEPHIR_CPY_WRT(&output, &_13$$8);
    -	}
    -	ZEPHIR_INIT_NVAR(&_7);
    -	ZVAL_STRING(&_7, "/[\\/_|+ -]+/");
    -	ZEPHIR_CALL_FUNCTION(&_14, "preg_replace", NULL, 23, &_7, &separator, &output);
    -	zephir_check_call_status();
    -	ZEPHIR_CPY_WRT(&output, &_14);
    -	ZEPHIR_INIT_NVAR(&_7);
    -	zephir_fast_trim(&_7, &output, &separator, ZEPHIR_TRIM_BOTH TSRMLS_CC);
    -	ZEPHIR_CPY_WRT(&output, &_7);
    -	ZEPHIR_INIT_NVAR(&_7);
    -	ZVAL_STRING(&_7, "iconv");
    -	ZEPHIR_CALL_FUNCTION(&_14, "extension_loaded", NULL, 124, &_7);
    -	zephir_check_call_status();
    -	if (zephir_is_true(&_14)) {
    -		ZVAL_LONG(&_15$$9, 6);
    -		ZEPHIR_CALL_FUNCTION(NULL, "setlocale", NULL, 204, &_15$$9, &locale);
    +		ZEPHIR_INIT_VAR(&_14$$8);
    +		zephir_fast_strtolower(&_14$$8, &output);
    +		ZEPHIR_CPY_WRT(&output, &_14$$8);
    +	}
    +	ZEPHIR_INIT_NVAR(&_8);
    +	ZVAL_STRING(&_8, "/[\\/_|+ -]+/");
    +	ZEPHIR_CALL_FUNCTION(&_15, "preg_replace", NULL, 23, &_8, &separator, &output);
    +	zephir_check_call_status();
    +	ZEPHIR_CPY_WRT(&output, &_15);
    +	ZEPHIR_INIT_NVAR(&_8);
    +	zephir_fast_trim(&_8, &output, &separator, ZEPHIR_TRIM_BOTH TSRMLS_CC);
    +	ZEPHIR_CPY_WRT(&output, &_8);
    +	ZEPHIR_INIT_NVAR(&_8);
    +	ZVAL_STRING(&_8, "iconv");
    +	ZEPHIR_CALL_FUNCTION(&_15, "extension_loaded", NULL, 124, &_8);
    +	zephir_check_call_status();
    +	if (zephir_is_true(&_15)) {
    +		ZVAL_LONG(&_16$$9, 6);
    +		ZEPHIR_CALL_FUNCTION(NULL, "setlocale", NULL, 204, &_16$$9, &locale);
     		zephir_check_call_status();
     	}
     	RETURN_CCTOR(&output);
    @@ -917,33 +921,33 @@ PHP_METHOD(Phalcon_Html_Tag, getTitle) {
     		if (!(ZEPHIR_IS_EMPTY(&prependTitle))) {
     			ZEPHIR_CALL_FUNCTION(&prependArray$$4, "array_reverse", NULL, 207, &prependTitle);
     			zephir_check_call_status();
    -			zephir_is_iterable(&prependArray$$4, 0, "phalcon/html/tag.zep", 462);
    +			zephir_is_iterable(&prependArray$$4, 0, "phalcon/html/tag.zep", 463);
     			ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&prependArray$$4), _3$$4)
     			{
     				ZEPHIR_INIT_NVAR(&item);
     				ZVAL_COPY(&item, _3$$4);
     				ZEPHIR_CALL_METHOD(&_4$$5, &escaper, "escapehtml", &_5, 0, &item);
     				zephir_check_call_status();
    -				zephir_array_append(&items, &_4$$5, PH_SEPARATE, "phalcon/html/tag.zep", 460);
    +				zephir_array_append(&items, &_4$$5, PH_SEPARATE, "phalcon/html/tag.zep", 461);
     			} ZEND_HASH_FOREACH_END();
     			ZEPHIR_INIT_NVAR(&item);
     		}
     	}
     	if (!(ZEPHIR_IS_EMPTY(&title))) {
    -		zephir_array_append(&items, &title, PH_SEPARATE, "phalcon/html/tag.zep", 466);
    +		zephir_array_append(&items, &title, PH_SEPARATE, "phalcon/html/tag.zep", 467);
     	}
     	if (append) {
     		ZEPHIR_OBS_VAR(&appendTitle);
     		zephir_read_property(&appendTitle, this_ptr, SL("append"), PH_NOISY_CC);
     		if (!(ZEPHIR_IS_EMPTY(&appendTitle))) {
    -			zephir_is_iterable(&appendTitle, 0, "phalcon/html/tag.zep", 476);
    +			zephir_is_iterable(&appendTitle, 0, "phalcon/html/tag.zep", 477);
     			ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&appendTitle), _6$$8)
     			{
     				ZEPHIR_INIT_NVAR(&item);
     				ZVAL_COPY(&item, _6$$8);
     				ZEPHIR_CALL_METHOD(&_7$$9, &escaper, "escapehtml", &_8, 0, &item);
     				zephir_check_call_status();
    -				zephir_array_append(&items, &_7$$9, PH_SEPARATE, "phalcon/html/tag.zep", 474);
    +				zephir_array_append(&items, &_7$$9, PH_SEPARATE, "phalcon/html/tag.zep", 475);
     			} ZEND_HASH_FOREACH_END();
     			ZEPHIR_INIT_NVAR(&item);
     		}
    @@ -1093,8 +1097,9 @@ PHP_METHOD(Phalcon_Html_Tag, hasValue) {
     PHP_METHOD(Phalcon_Html_Tag, image) {
     
     	zend_long ZEPHIR_LAST_CALL_STATUS;
    +	zephir_fcall_cache_entry *_0 = NULL;
     	zval parameters;
    -	zval *url_param = NULL, *parameters_param = NULL, local, service, src, output, _0, _1, _3, _4, _2$$3;
    +	zval *url_param = NULL, *parameters_param = NULL, local, service, src, output, _1, _2, _4, _5, _3$$3;
     	zval url;
     	zval *this_ptr = getThis();
     
    @@ -1103,11 +1108,11 @@ PHP_METHOD(Phalcon_Html_Tag, image) {
     	ZVAL_UNDEF(&service);
     	ZVAL_UNDEF(&src);
     	ZVAL_UNDEF(&output);
    -	ZVAL_UNDEF(&_0);
     	ZVAL_UNDEF(&_1);
    -	ZVAL_UNDEF(&_3);
    +	ZVAL_UNDEF(&_2);
     	ZVAL_UNDEF(&_4);
    -	ZVAL_UNDEF(&_2$$3);
    +	ZVAL_UNDEF(&_5);
    +	ZVAL_UNDEF(&_3$$3);
     	ZVAL_UNDEF(¶meters);
     
     	ZEPHIR_MM_GROW();
    @@ -1127,33 +1132,33 @@ PHP_METHOD(Phalcon_Html_Tag, image) {
     	}
     
     
    -	ZEPHIR_INIT_VAR(&_0);
    -	ZVAL_STRING(&_0, "local");
    -	ZVAL_BOOL(&_1, 1);
    -	ZEPHIR_CALL_METHOD(&local, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &_1);
    +	ZEPHIR_INIT_VAR(&_1);
    +	ZVAL_STRING(&_1, "local");
    +	ZVAL_BOOL(&_2, 1);
    +	ZEPHIR_CALL_CE_STATIC(&local, phalcon_helper_arr_ce, "get", &_0, 156, ¶meters, &_1, &_2);
     	zephir_check_call_status();
    -	ZEPHIR_INIT_NVAR(&_0);
    -	ZVAL_STRING(&_0, "src");
    -	ZEPHIR_CALL_METHOD(&src, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &url);
    +	ZEPHIR_INIT_NVAR(&_1);
    +	ZVAL_STRING(&_1, "src");
    +	ZEPHIR_CALL_CE_STATIC(&src, phalcon_helper_arr_ce, "get", &_0, 156, ¶meters, &_1, &url);
     	zephir_check_call_status();
     	if (zephir_is_true(&local)) {
    -		ZEPHIR_INIT_VAR(&_2$$3);
    -		ZVAL_STRING(&_2$$3, "url");
    -		ZEPHIR_CALL_METHOD(&service, this_ptr, "getservice", NULL, 203, &_2$$3);
    +		ZEPHIR_INIT_VAR(&_3$$3);
    +		ZVAL_STRING(&_3$$3, "url");
    +		ZEPHIR_CALL_METHOD(&service, this_ptr, "getservice", NULL, 203, &_3$$3);
     		zephir_check_call_status();
     		ZEPHIR_CALL_METHOD(&src, &service, "getstatic", NULL, 0, &url);
     		zephir_check_call_status();
     	}
     	zephir_array_unset_string(¶meters, SL("local"), PH_SEPARATE);
     	zephir_array_update_string(¶meters, SL("src"), &src, PH_COPY | PH_SEPARATE);
    -	ZEPHIR_INIT_NVAR(&_0);
    -	ZVAL_STRING(&_0, "", &_1);
    +	ZEPHIR_CONCAT_VSV(&output, &_10, ">", &_2);
     	RETURN_CCTOR(&output);
     
     }
    @@ -2377,9 +2383,10 @@ PHP_METHOD(Phalcon_Html_Tag, javascript) {
      */
     PHP_METHOD(Phalcon_Html_Tag, link) {
     
    +	zephir_fcall_cache_entry *_2 = NULL;
     	zend_long ZEPHIR_LAST_CALL_STATUS;
     	zval parameters;
    -	zval *url_param = NULL, text, *text_param = NULL, *parameters_param = NULL, local, query, output, service, _0, _1, _2, _3, _4;
    +	zval *url_param = NULL, text, *text_param = NULL, *parameters_param = NULL, local, query, output, service, _0, _1, _3, _4, _5;
     	zval url;
     	zval *this_ptr = getThis();
     
    @@ -2391,9 +2398,9 @@ PHP_METHOD(Phalcon_Html_Tag, link) {
     	ZVAL_UNDEF(&service);
     	ZVAL_UNDEF(&_0);
     	ZVAL_UNDEF(&_1);
    -	ZVAL_UNDEF(&_2);
     	ZVAL_UNDEF(&_3);
     	ZVAL_UNDEF(&_4);
    +	ZVAL_UNDEF(&_5);
     	ZVAL_UNDEF(¶meters);
     
     	ZEPHIR_MM_GROW();
    @@ -2420,37 +2427,37 @@ PHP_METHOD(Phalcon_Html_Tag, link) {
     	zephir_check_call_status();
     	ZEPHIR_INIT_NVAR(&_0);
     	ZVAL_STRING(&_0, "url");
    -	ZEPHIR_CALL_METHOD(&_1, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &url);
    +	ZEPHIR_CALL_CE_STATIC(&_1, phalcon_helper_arr_ce, "get", &_2, 156, ¶meters, &_0, &url);
     	zephir_check_call_status();
     	zephir_get_strval(&url, &_1);
     	ZEPHIR_INIT_NVAR(&_0);
     	ZVAL_STRING(&_0, "text");
    -	ZEPHIR_CALL_METHOD(&_2, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &text);
    +	ZEPHIR_CALL_CE_STATIC(&_3, phalcon_helper_arr_ce, "get", &_2, 156, ¶meters, &_0, &text);
     	zephir_check_call_status();
    -	ZEPHIR_CPY_WRT(&text, &_2);
    +	ZEPHIR_CPY_WRT(&text, &_3);
     	ZEPHIR_INIT_NVAR(&_0);
     	ZVAL_STRING(&_0, "local");
    -	ZVAL_BOOL(&_3, 1);
    -	ZEPHIR_CALL_METHOD(&local, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &_3);
    +	ZVAL_BOOL(&_4, 1);
    +	ZEPHIR_CALL_CE_STATIC(&local, phalcon_helper_arr_ce, "get", &_2, 156, ¶meters, &_0, &_4);
     	zephir_check_call_status();
     	ZEPHIR_INIT_NVAR(&_0);
     	ZVAL_STRING(&_0, "query");
    -	ZVAL_NULL(&_3);
    -	ZEPHIR_CALL_METHOD(&query, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &_3);
    +	ZVAL_NULL(&_4);
    +	ZEPHIR_CALL_CE_STATIC(&query, phalcon_helper_arr_ce, "get", &_2, 156, ¶meters, &_0, &_4);
     	zephir_check_call_status();
     	zephir_array_unset_string(¶meters, SL("url"), PH_SEPARATE);
     	zephir_array_unset_string(¶meters, SL("local"), PH_SEPARATE);
     	zephir_array_unset_string(¶meters, SL("text"), PH_SEPARATE);
     	zephir_array_unset_string(¶meters, SL("query"), PH_SEPARATE);
    -	ZEPHIR_CALL_METHOD(&_2, &service, "get", NULL, 0, &url, &query, &local);
    +	ZEPHIR_CALL_METHOD(&_3, &service, "get", NULL, 0, &url, &query, &local);
     	zephir_check_call_status();
    -	zephir_array_update_string(¶meters, SL("href"), &_2, PH_COPY | PH_SEPARATE);
    +	zephir_array_update_string(¶meters, SL("href"), &_3, PH_COPY | PH_SEPARATE);
     	ZEPHIR_INIT_NVAR(&_0);
     	ZVAL_STRING(&_0, "", &text, "");
    +	ZEPHIR_CONCAT_VSVS(&output, &_5, ">", &text, "");
     	RETURN_CCTOR(&output);
     
     }
    @@ -2598,7 +2605,7 @@ PHP_METHOD(Phalcon_Html_Tag, reset) {
     
     	ZEPHIR_INIT_VAR(&_0);
     	ZVAL_STRING(&_0, "reset");
    -	ZEPHIR_RETURN_CALL_METHOD(this_ptr, "renderinput", NULL, 200, &_0, &name, ¶meters);
    +	ZEPHIR_RETURN_CALL_METHOD(this_ptr, "renderinput", NULL, 201, &_0, &name, ¶meters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -2656,10 +2663,11 @@ PHP_METHOD(Phalcon_Html_Tag, reset) {
      */
     PHP_METHOD(Phalcon_Html_Tag, select) {
     
    -	zend_bool _3, _6$$4;
    +	zend_bool _4, _7$$4;
     	zend_long ZEPHIR_LAST_CALL_STATUS;
    +	zephir_fcall_cache_entry *_0 = NULL;
     	zval parameters;
    -	zval *name_param = NULL, *parameters_param = NULL, *data = NULL, data_sub, __$null, emptyText, emptyValue, id, output, outputEmpty, useEmpty, using, value, _0, _1, _2, _10, _4$$4, _5$$4, _7$$7, _8$$7, _9$$7, _11$$10, _12$$10, _13$$10, _14$$11, _15$$11, _16$$11;
    +	zval *name_param = NULL, *parameters_param = NULL, *data = NULL, data_sub, __$null, emptyText, emptyValue, id, output, outputEmpty, useEmpty, using, value, _1, _2, _3, _11, _5$$4, _6$$4, _8$$7, _9$$7, _10$$7, _12$$10, _13$$10, _14$$10, _15$$11, _16$$11, _17$$11;
     	zval name;
     	zval *this_ptr = getThis();
     
    @@ -2674,21 +2682,21 @@ PHP_METHOD(Phalcon_Html_Tag, select) {
     	ZVAL_UNDEF(&useEmpty);
     	ZVAL_UNDEF(&using);
     	ZVAL_UNDEF(&value);
    -	ZVAL_UNDEF(&_0);
     	ZVAL_UNDEF(&_1);
     	ZVAL_UNDEF(&_2);
    -	ZVAL_UNDEF(&_10);
    -	ZVAL_UNDEF(&_4$$4);
    +	ZVAL_UNDEF(&_3);
    +	ZVAL_UNDEF(&_11);
     	ZVAL_UNDEF(&_5$$4);
    -	ZVAL_UNDEF(&_7$$7);
    +	ZVAL_UNDEF(&_6$$4);
     	ZVAL_UNDEF(&_8$$7);
     	ZVAL_UNDEF(&_9$$7);
    -	ZVAL_UNDEF(&_11$$10);
    +	ZVAL_UNDEF(&_10$$7);
     	ZVAL_UNDEF(&_12$$10);
     	ZVAL_UNDEF(&_13$$10);
    -	ZVAL_UNDEF(&_14$$11);
    +	ZVAL_UNDEF(&_14$$10);
     	ZVAL_UNDEF(&_15$$11);
     	ZVAL_UNDEF(&_16$$11);
    +	ZVAL_UNDEF(&_17$$11);
     	ZVAL_UNDEF(¶meters);
     
     	ZEPHIR_MM_GROW();
    @@ -2716,19 +2724,19 @@ PHP_METHOD(Phalcon_Html_Tag, select) {
     	}
     
     
    -	ZEPHIR_INIT_VAR(&_0);
    -	ZVAL_STRING(&_0, "id");
    -	ZEPHIR_CALL_METHOD(&id, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &name);
    +	ZEPHIR_INIT_VAR(&_1);
    +	ZVAL_STRING(&_1, "id");
    +	ZEPHIR_CALL_CE_STATIC(&id, phalcon_helper_arr_ce, "get", &_0, 156, ¶meters, &_1, &name);
     	zephir_check_call_status();
    -	ZEPHIR_INIT_NVAR(&_0);
    -	ZVAL_STRING(&_0, "name");
    -	ZEPHIR_CALL_METHOD(&_1, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &name);
    +	ZEPHIR_INIT_NVAR(&_1);
    +	ZVAL_STRING(&_1, "name");
    +	ZEPHIR_CALL_CE_STATIC(&_2, phalcon_helper_arr_ce, "get", &_0, 156, ¶meters, &_1, &name);
     	zephir_check_call_status();
    -	zephir_get_strval(&name, &_1);
    -	ZEPHIR_INIT_NVAR(&_0);
    -	ZVAL_STRING(&_0, "useEmpty");
    -	ZVAL_BOOL(&_2, 0);
    -	ZEPHIR_CALL_METHOD(&useEmpty, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &_2);
    +	zephir_get_strval(&name, &_2);
    +	ZEPHIR_INIT_NVAR(&_1);
    +	ZVAL_STRING(&_1, "useEmpty");
    +	ZVAL_BOOL(&_3, 0);
    +	ZEPHIR_CALL_CE_STATIC(&useEmpty, phalcon_helper_arr_ce, "get", &_0, 156, ¶meters, &_1, &_3);
     	zephir_check_call_status();
     	ZEPHIR_INIT_VAR(&using);
     	array_init(&using);
    @@ -2736,50 +2744,50 @@ PHP_METHOD(Phalcon_Html_Tag, select) {
     	zephir_array_update_string(¶meters, SL("id"), &id, PH_COPY | PH_SEPARATE);
     	ZEPHIR_INIT_VAR(&outputEmpty);
     	ZVAL_STRING(&outputEmpty, "");
    -	_3 = Z_TYPE_P(data) != IS_ARRAY;
    -	if (_3) {
    -		_3 = !ZEPHIR_IS_STRING_IDENTICAL(data, "object");
    +	_4 = Z_TYPE_P(data) != IS_ARRAY;
    +	if (_4) {
    +		_4 = !ZEPHIR_IS_STRING_IDENTICAL(data, "object");
     	}
    -	if (_3) {
    -		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_html_exception_ce, "The dataset must be either an array or a ResultsetInterface", "phalcon/html/tag.zep", 1195);
    +	if (_4) {
    +		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_html_exception_ce, "The dataset must be either an array or a ResultsetInterface", "phalcon/html/tag.zep", 1196);
     		return;
     	}
     	if (Z_TYPE_P(data) == IS_OBJECT) {
    -		ZEPHIR_INIT_VAR(&_4$$4);
    -		array_init(&_4$$4);
     		ZEPHIR_INIT_VAR(&_5$$4);
    -		ZVAL_STRING(&_5$$4, "using");
    -		ZEPHIR_CALL_METHOD(&using, this_ptr, "arraygetdefault", NULL, 201, &_5$$4, ¶meters, &_4$$4);
    +		array_init(&_5$$4);
    +		ZEPHIR_INIT_VAR(&_6$$4);
    +		ZVAL_STRING(&_6$$4, "using");
    +		ZEPHIR_CALL_CE_STATIC(&using, phalcon_helper_arr_ce, "get", &_0, 156, ¶meters, &_6$$4, &_5$$4);
     		zephir_check_call_status();
    -		_6$$4 = Z_TYPE_P(&using) == IS_ARRAY;
    -		if (_6$$4) {
    -			_6$$4 = zephir_fast_count_int(&using TSRMLS_CC) == 2;
    +		_7$$4 = Z_TYPE_P(&using) == IS_ARRAY;
    +		if (_7$$4) {
    +			_7$$4 = zephir_fast_count_int(&using TSRMLS_CC) == 2;
     		}
    -		if (_6$$4) {
    +		if (_7$$4) {
     			zephir_array_unset_string(¶meters, SL("using"), PH_SEPARATE);
     		} else {
    -			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_html_exception_ce, "The 'using' parameter is not a valid array", "phalcon/html/tag.zep", 1206);
    +			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_html_exception_ce, "The 'using' parameter is not a valid array", "phalcon/html/tag.zep", 1207);
     			return;
     		}
     	}
     	if (zephir_is_true(&useEmpty)) {
    -		ZEPHIR_INIT_VAR(&_7$$7);
    -		ZVAL_STRING(&_7$$7, "emptyText");
     		ZEPHIR_INIT_VAR(&_8$$7);
    -		ZVAL_STRING(&_8$$7, "Choose...");
    -		ZEPHIR_CALL_METHOD(&emptyText, this_ptr, "arraygetdefault", NULL, 201, &_7$$7, ¶meters, &_8$$7);
    +		ZVAL_STRING(&_8$$7, "emptyText");
    +		ZEPHIR_INIT_VAR(&_9$$7);
    +		ZVAL_STRING(&_9$$7, "Choose...");
    +		ZEPHIR_CALL_CE_STATIC(&emptyText, phalcon_helper_arr_ce, "get", &_0, 156, ¶meters, &_8$$7, &_9$$7);
     		zephir_check_call_status();
    -		ZEPHIR_INIT_NVAR(&_7$$7);
    -		ZVAL_STRING(&_7$$7, "emptyValue");
     		ZEPHIR_INIT_NVAR(&_8$$7);
    -		ZVAL_STRING(&_8$$7, "");
    -		ZEPHIR_CALL_METHOD(&emptyValue, this_ptr, "arraygetdefault", NULL, 201, &_7$$7, ¶meters, &_8$$7);
    +		ZVAL_STRING(&_8$$7, "emptyValue");
    +		ZEPHIR_INIT_NVAR(&_9$$7);
    +		ZVAL_STRING(&_9$$7, "");
    +		ZEPHIR_CALL_CE_STATIC(&emptyValue, phalcon_helper_arr_ce, "get", &_0, 156, ¶meters, &_8$$7, &_9$$7);
     		zephir_check_call_status();
    -		ZEPHIR_INIT_NVAR(&_7$$7);
    -		ZEPHIR_GET_CONSTANT(&_7$$7, "PHP_EOL");
    -		ZEPHIR_INIT_VAR(&_9$$7);
    -		ZEPHIR_CONCAT_SV(&_9$$7, "\t", &_7$$7);
    -		ZEPHIR_CALL_FUNCTION(&outputEmpty, "sprintf", NULL, 140, &_9$$7, &emptyValue, &emptyText);
    +		ZEPHIR_INIT_NVAR(&_8$$7);
    +		ZEPHIR_GET_CONSTANT(&_8$$7, "PHP_EOL");
    +		ZEPHIR_INIT_VAR(&_10$$7);
    +		ZEPHIR_CONCAT_SV(&_10$$7, "\t", &_8$$7);
    +		ZEPHIR_CALL_FUNCTION(&outputEmpty, "sprintf", NULL, 140, &_10$$7, &emptyValue, &emptyText);
     		zephir_check_call_status();
     		zephir_array_unset_string(¶meters, SL("useEmpty"), PH_SEPARATE);
     		zephir_array_unset_string(¶meters, SL("emptyText"), PH_SEPARATE);
    @@ -2792,32 +2800,32 @@ PHP_METHOD(Phalcon_Html_Tag, select) {
     	} else {
     		zephir_array_unset_string(¶meters, SL("value"), PH_SEPARATE);
     	}
    -	ZEPHIR_INIT_NVAR(&_0);
    -	ZVAL_STRING(&_0, "", &_0, &outputEmpty);
    +	ZEPHIR_CONCAT_VSVV(&output, &_11, ">", &_1, &outputEmpty);
     	if (Z_TYPE_P(data) == IS_OBJECT) {
    -		ZEPHIR_INIT_VAR(&_12$$10);
    -		ZEPHIR_GET_CONSTANT(&_12$$10, "PHP_EOL");
     		ZEPHIR_INIT_VAR(&_13$$10);
    -		ZEPHIR_CONCAT_SV(&_13$$10, "", &_12$$10);
    -		ZEPHIR_CALL_METHOD(&_11$$10, this_ptr, "renderselectresultset", NULL, 210, data, &using, &value, &_13$$10);
    +		ZEPHIR_GET_CONSTANT(&_13$$10, "PHP_EOL");
    +		ZEPHIR_INIT_VAR(&_14$$10);
    +		ZEPHIR_CONCAT_SV(&_14$$10, "", &_13$$10);
    +		ZEPHIR_CALL_METHOD(&_12$$10, this_ptr, "renderselectresultset", NULL, 210, data, &using, &value, &_14$$10);
     		zephir_check_call_status();
    -		zephir_concat_self(&output, &_11$$10 TSRMLS_CC);
    +		zephir_concat_self(&output, &_12$$10 TSRMLS_CC);
     	} else if (Z_TYPE_P(data) == IS_ARRAY) {
    -		ZEPHIR_INIT_VAR(&_15$$11);
    -		ZEPHIR_GET_CONSTANT(&_15$$11, "PHP_EOL");
     		ZEPHIR_INIT_VAR(&_16$$11);
    -		ZEPHIR_CONCAT_SV(&_16$$11, "", &_15$$11);
    -		ZEPHIR_CALL_METHOD(&_14$$11, this_ptr, "renderselectarray", NULL, 211, data, &value, &_16$$11);
    +		ZEPHIR_GET_CONSTANT(&_16$$11, "PHP_EOL");
    +		ZEPHIR_INIT_VAR(&_17$$11);
    +		ZEPHIR_CONCAT_SV(&_17$$11, "", &_16$$11);
    +		ZEPHIR_CALL_METHOD(&_15$$11, this_ptr, "renderselectarray", NULL, 211, data, &value, &_17$$11);
     		zephir_check_call_status();
    -		zephir_concat_self(&output, &_14$$11 TSRMLS_CC);
    +		zephir_concat_self(&output, &_15$$11 TSRMLS_CC);
     	} else {
    -		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_html_exception_ce, "Invalid data provided to SELECT helper", "phalcon/html/tag.zep", 1247);
    +		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_html_exception_ce, "Invalid data provided to SELECT helper", "phalcon/html/tag.zep", 1248);
     		return;
     	}
     	zephir_concat_self_str(&output, SL("") TSRMLS_CC);
    @@ -2871,7 +2879,7 @@ PHP_METHOD(Phalcon_Html_Tag, setAttribute) {
     			_0$$3 = Z_TYPE_P(value) == IS_OBJECT;
     		}
     		if (_0$$3) {
    -			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_html_exception_ce, "Only scalar values can be assigned to UI components", "phalcon/html/tag.zep", 1274);
    +			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_html_exception_ce, "Only scalar values can be assigned to UI components", "phalcon/html/tag.zep", 1275);
     			return;
     		}
     	}
    @@ -3077,8 +3085,9 @@ PHP_METHOD(Phalcon_Html_Tag, stylesheet) {
     
     	zend_bool local = 0;
     	zend_long ZEPHIR_LAST_CALL_STATUS;
    +	zephir_fcall_cache_entry *_1 = NULL;
     	zval parameters;
    -	zval *url_param = NULL, *parameters_param = NULL, service, output, _0, _1, _2, _6, _7, _8, _3$$3, _4$$3, _5$$5;
    +	zval *url_param = NULL, *parameters_param = NULL, service, output, _0, _2, _3, _7, _8, _9, _4$$3, _5$$3, _6$$5;
     	zval url;
     	zval *this_ptr = getThis();
     
    @@ -3086,14 +3095,14 @@ PHP_METHOD(Phalcon_Html_Tag, stylesheet) {
     	ZVAL_UNDEF(&service);
     	ZVAL_UNDEF(&output);
     	ZVAL_UNDEF(&_0);
    -	ZVAL_UNDEF(&_1);
     	ZVAL_UNDEF(&_2);
    -	ZVAL_UNDEF(&_6);
    +	ZVAL_UNDEF(&_3);
     	ZVAL_UNDEF(&_7);
     	ZVAL_UNDEF(&_8);
    -	ZVAL_UNDEF(&_3$$3);
    +	ZVAL_UNDEF(&_9);
     	ZVAL_UNDEF(&_4$$3);
    -	ZVAL_UNDEF(&_5$$5);
    +	ZVAL_UNDEF(&_5$$3);
    +	ZVAL_UNDEF(&_6$$5);
     	ZVAL_UNDEF(¶meters);
     
     	ZEPHIR_MM_GROW();
    @@ -3108,45 +3117,45 @@ PHP_METHOD(Phalcon_Html_Tag, stylesheet) {
     	}
     
     
    -	ZEPHIR_INIT_VAR(&_1);
    -	ZVAL_STRING(&_1, "local");
    -	ZVAL_BOOL(&_2, 1);
    -	ZEPHIR_CALL_METHOD(&_0, this_ptr, "arraygetdefault", NULL, 201, &_1, ¶meters, &_2);
    +	ZEPHIR_INIT_VAR(&_2);
    +	ZVAL_STRING(&_2, "local");
    +	ZVAL_BOOL(&_3, 1);
    +	ZEPHIR_CALL_CE_STATIC(&_0, phalcon_helper_arr_ce, "get", &_1, 156, ¶meters, &_2, &_3);
     	zephir_check_call_status();
     	local = zephir_get_boolval(&_0);
     	zephir_array_unset_string(¶meters, SL("local"), PH_SEPARATE);
     	if (local == 1) {
    -		ZEPHIR_INIT_VAR(&_3$$3);
    -		ZVAL_STRING(&_3$$3, "url");
    -		ZEPHIR_CALL_METHOD(&service, this_ptr, "getservice", NULL, 203, &_3$$3);
    +		ZEPHIR_INIT_VAR(&_4$$3);
    +		ZVAL_STRING(&_4$$3, "url");
    +		ZEPHIR_CALL_METHOD(&service, this_ptr, "getservice", NULL, 203, &_4$$3);
     		zephir_check_call_status();
    -		ZEPHIR_CALL_METHOD(&_4$$3, &service, "getstatic", NULL, 0, &url);
    +		ZEPHIR_CALL_METHOD(&_5$$3, &service, "getstatic", NULL, 0, &url);
     		zephir_check_call_status();
    -		zephir_array_update_string(¶meters, SL("href"), &_4$$3, PH_COPY | PH_SEPARATE);
    +		zephir_array_update_string(¶meters, SL("href"), &_5$$3, PH_COPY | PH_SEPARATE);
     	} else {
     		zephir_array_update_string(¶meters, SL("href"), &url, PH_COPY | PH_SEPARATE);
     	}
     	if (!(zephir_array_isset_string(¶meters, SL("rel")))) {
    -		ZEPHIR_INIT_VAR(&_5$$5);
    -		ZVAL_STRING(&_5$$5, "stylesheet");
    -		zephir_array_update_string(¶meters, SL("rel"), &_5$$5, PH_COPY | PH_SEPARATE);
    +		ZEPHIR_INIT_VAR(&_6$$5);
    +		ZVAL_STRING(&_6$$5, "stylesheet");
    +		zephir_array_update_string(¶meters, SL("rel"), &_6$$5, PH_COPY | PH_SEPARATE);
     	}
    -	ZEPHIR_INIT_NVAR(&_1);
    -	ZVAL_STRING(&_1, "type");
    -	ZEPHIR_INIT_VAR(&_6);
    -	ZVAL_STRING(&_6, "text/css");
    -	ZEPHIR_CALL_METHOD(&_0, this_ptr, "arraygetdefault", NULL, 201, &_1, ¶meters, &_6);
    +	ZEPHIR_INIT_NVAR(&_2);
    +	ZVAL_STRING(&_2, "type");
    +	ZEPHIR_INIT_VAR(&_7);
    +	ZVAL_STRING(&_7, "text/css");
    +	ZEPHIR_CALL_CE_STATIC(&_0, phalcon_helper_arr_ce, "get", &_1, 156, ¶meters, &_2, &_7);
     	zephir_check_call_status();
     	zephir_array_update_string(¶meters, SL("type"), &_0, PH_COPY | PH_SEPARATE);
    -	ZEPHIR_INIT_NVAR(&_1);
    -	ZVAL_STRING(&_1, "", &_5, "");
    +	ZEPHIR_CONCAT_VSVS(&output, &_5, ">", &_6, "");
     	RETURN_CCTOR(&output);
     
     }
     
    -/**
    - * Helper method to check an array for an element. If it exists it returns it,
    - * if not, it returns the supplied default value
    - */
    -PHP_METHOD(Phalcon_Html_Tag, arrayGetDefault) {
    -
    -	zval parameters;
    -	zval *name_param = NULL, *parameters_param = NULL, *defaultValue = NULL, defaultValue_sub, __$null, value;
    -	zval name;
    -	zval *this_ptr = getThis();
    -
    -	ZVAL_UNDEF(&name);
    -	ZVAL_UNDEF(&defaultValue_sub);
    -	ZVAL_NULL(&__$null);
    -	ZVAL_UNDEF(&value);
    -	ZVAL_UNDEF(¶meters);
    -
    -	ZEPHIR_MM_GROW();
    -	zephir_fetch_params(1, 2, 1, &name_param, ¶meters_param, &defaultValue);
    -
    -	zephir_get_strval(&name, name_param);
    -	zephir_get_arrval(¶meters, parameters_param);
    -	if (!defaultValue) {
    -		defaultValue = &defaultValue_sub;
    -		defaultValue = &__$null;
    -	}
    -
    -
    -	if (EXPECTED(zephir_array_isset_fetch(&value, ¶meters, &name, 1 TSRMLS_CC))) {
    -		RETURN_CTOR(&value);
    -	}
    -	RETVAL_ZVAL(defaultValue, 1, 0);
    -	RETURN_MM();
    -
    -}
    -
     /**
      * Returns the escaper service from the DI container
      */
    @@ -3382,7 +3356,7 @@ PHP_METHOD(Phalcon_Html_Tag, getService) {
     			ZEPHIR_CONCAT_SVS(&_2$$6, "A dependency injector container is required to obtain the '", &name, "' service");
     			ZEPHIR_CALL_METHOD(NULL, &_1$$6, "__construct", NULL, 4, &_2$$6);
     			zephir_check_call_status();
    -			zephir_throw_exception_debug(&_1$$6, "phalcon/html/tag.zep", 1522 TSRMLS_CC);
    +			zephir_throw_exception_debug(&_1$$6, "phalcon/html/tag.zep", 1508 TSRMLS_CC);
     			ZEPHIR_MM_RESTORE();
     			return;
     		}
    @@ -3475,7 +3449,7 @@ PHP_METHOD(Phalcon_Html_Tag, renderAttributes) {
     	zephir_check_call_status();
     	zephir_array_unset_string(&attrs, SL("escape"), PH_SEPARATE);
     	ZEPHIR_CPY_WRT(&newCode, &code);
    -	zephir_is_iterable(&attrs, 0, "phalcon/html/tag.zep", 1580);
    +	zephir_is_iterable(&attrs, 0, "phalcon/html/tag.zep", 1566);
     	ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&attrs), _2, _3, _1)
     	{
     		ZEPHIR_INIT_NVAR(&key);
    @@ -3504,7 +3478,7 @@ PHP_METHOD(Phalcon_Html_Tag, renderAttributes) {
     				ZEPHIR_CONCAT_SVSVS(&_8$$5, "Value at index: '", &key, "' type: '", &_7$$5, "' cannot be rendered");
     				ZEPHIR_CALL_METHOD(NULL, &_6$$5, "__construct", &_9, 4, &_8$$5);
     				zephir_check_call_status();
    -				zephir_throw_exception_debug(&_6$$5, "phalcon/html/tag.zep", 1569 TSRMLS_CC);
    +				zephir_throw_exception_debug(&_6$$5, "phalcon/html/tag.zep", 1555 TSRMLS_CC);
     				ZEPHIR_MM_RESTORE();
     				return;
     			}
    @@ -3570,8 +3544,9 @@ PHP_METHOD(Phalcon_Html_Tag, renderCloseTag) {
     PHP_METHOD(Phalcon_Html_Tag, renderInput) {
     
     	zend_long ZEPHIR_LAST_CALL_STATUS;
    +	zephir_fcall_cache_entry *_0 = NULL;
     	zval parameters;
    -	zval *type_param = NULL, name, *name_param = NULL, *parameters_param = NULL, id, output, _0, _1, _2, _3;
    +	zval *type_param = NULL, name, *name_param = NULL, *parameters_param = NULL, id, output, _1, _2, _3, _4;
     	zval type;
     	zval *this_ptr = getThis();
     
    @@ -3579,10 +3554,10 @@ PHP_METHOD(Phalcon_Html_Tag, renderInput) {
     	ZVAL_UNDEF(&name);
     	ZVAL_UNDEF(&id);
     	ZVAL_UNDEF(&output);
    -	ZVAL_UNDEF(&_0);
     	ZVAL_UNDEF(&_1);
     	ZVAL_UNDEF(&_2);
     	ZVAL_UNDEF(&_3);
    +	ZVAL_UNDEF(&_4);
     	ZVAL_UNDEF(¶meters);
     
     	ZEPHIR_MM_GROW();
    @@ -3598,24 +3573,24 @@ PHP_METHOD(Phalcon_Html_Tag, renderInput) {
     	}
     
     
    -	ZEPHIR_INIT_VAR(&_0);
    -	ZVAL_STRING(&_0, "id");
    -	ZEPHIR_CALL_METHOD(&id, this_ptr, "arraygetdefault", NULL, 201, &_0, ¶meters, &name);
    +	ZEPHIR_INIT_VAR(&_1);
    +	ZVAL_STRING(&_1, "id");
    +	ZEPHIR_CALL_CE_STATIC(&id, phalcon_helper_arr_ce, "get", &_0, 156, ¶meters, &_1, &name);
     	zephir_check_call_status();
     	zephir_array_update_string(¶meters, SL("id"), &id, PH_COPY | PH_SEPARATE);
     	zephir_array_update_string(¶meters, SL("name"), &name, PH_COPY | PH_SEPARATE);
     	zephir_array_update_string(¶meters, SL("type"), &type, PH_COPY | PH_SEPARATE);
    -	ZEPHIR_CALL_METHOD(&_1, this_ptr, "getvalue", NULL, 0, &id, ¶meters);
    +	ZEPHIR_CALL_METHOD(&_2, this_ptr, "getvalue", NULL, 0, &id, ¶meters);
     	zephir_check_call_status();
    -	zephir_array_update_string(¶meters, SL("value"), &_1, PH_COPY | PH_SEPARATE);
    -	ZEPHIR_INIT_NVAR(&_0);
    -	ZVAL_STRING(&_0, "funcs->rewind(_1 TSRMLS_CC);
    @@ -3882,12 +3858,12 @@ PHP_METHOD(Phalcon_Html_Tag, renderSelectResultset) {
     				}
     			} else {
     				if (Z_TYPE_P(&option) == IS_ARRAY) {
    -					zephir_array_fetch(&_4$$10, &option, &optionValue, PH_NOISY | PH_READONLY, "phalcon/html/tag.zep", 1745 TSRMLS_CC);
    +					zephir_array_fetch(&_4$$10, &option, &optionValue, PH_NOISY | PH_READONLY, "phalcon/html/tag.zep", 1731 TSRMLS_CC);
     					ZEPHIR_CPY_WRT(&optionValue, &_4$$10);
    -					zephir_array_fetch(&_4$$10, &option, &optionText, PH_NOISY | PH_READONLY, "phalcon/html/tag.zep", 1746 TSRMLS_CC);
    +					zephir_array_fetch(&_4$$10, &option, &optionText, PH_NOISY | PH_READONLY, "phalcon/html/tag.zep", 1732 TSRMLS_CC);
     					ZEPHIR_CPY_WRT(&optionText, &_4$$10);
     				} else {
    -					ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_html_exception_ce, "Resultset returned an invalid value", "phalcon/html/tag.zep", 1748);
    +					ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_html_exception_ce, "Resultset returned an invalid value", "phalcon/html/tag.zep", 1734);
     					return;
     				}
     			}
    diff --git a/ext/phalcon/html/tag.zep.h b/ext/phalcon/html/tag.zep.h
    index ba581621fb0..1127ed74c0d 100644
    --- a/ext/phalcon/html/tag.zep.h
    +++ b/ext/phalcon/html/tag.zep.h
    @@ -53,7 +53,6 @@ PHP_METHOD(Phalcon_Html_Tag, setTitleSeparator);
     PHP_METHOD(Phalcon_Html_Tag, stylesheet);
     PHP_METHOD(Phalcon_Html_Tag, submit);
     PHP_METHOD(Phalcon_Html_Tag, textArea);
    -PHP_METHOD(Phalcon_Html_Tag, arrayGetDefault);
     PHP_METHOD(Phalcon_Html_Tag, getService);
     PHP_METHOD(Phalcon_Html_Tag, renderAttributes);
     PHP_METHOD(Phalcon_Html_Tag, renderCloseTag);
    @@ -668,16 +667,6 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_html_tag_textarea, 0, 1,
     	ZEND_ARG_ARRAY_INFO(0, parameters, 0)
     ZEND_END_ARG_INFO()
     
    -ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_html_tag_arraygetdefault, 0, 0, 2)
    -#if PHP_VERSION_ID >= 70200
    -	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
    -#else
    -	ZEND_ARG_INFO(0, name)
    -#endif
    -	ZEND_ARG_ARRAY_INFO(0, parameters, 0)
    -	ZEND_ARG_INFO(0, defaultValue)
    -ZEND_END_ARG_INFO()
    -
     ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_html_tag_getservice, 0, 0, 1)
     #if PHP_VERSION_ID >= 70200
     	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
    @@ -827,7 +816,6 @@ ZEPHIR_INIT_FUNCS(phalcon_html_tag_method_entry) {
     	PHP_ME(Phalcon_Html_Tag, stylesheet, arginfo_phalcon_html_tag_stylesheet, ZEND_ACC_PUBLIC)
     	PHP_ME(Phalcon_Html_Tag, submit, arginfo_phalcon_html_tag_submit, ZEND_ACC_PUBLIC)
     	PHP_ME(Phalcon_Html_Tag, textArea, arginfo_phalcon_html_tag_textarea, ZEND_ACC_PUBLIC)
    -	PHP_ME(Phalcon_Html_Tag, arrayGetDefault, arginfo_phalcon_html_tag_arraygetdefault, ZEND_ACC_PRIVATE)
     	PHP_ME(Phalcon_Html_Tag, getService, arginfo_phalcon_html_tag_getservice, ZEND_ACC_PRIVATE)
     	PHP_ME(Phalcon_Html_Tag, renderAttributes, arginfo_phalcon_html_tag_renderattributes, ZEND_ACC_PRIVATE)
     	PHP_ME(Phalcon_Html_Tag, renderCloseTag, arginfo_phalcon_html_tag_renderclosetag, ZEND_ACC_PRIVATE)
    diff --git a/ext/phalcon/html/taglocatorfactory.zep.c b/ext/phalcon/html/taglocatorfactory.zep.c
    index 0a075a2274b..e43387d8c00 100644
    --- a/ext/phalcon/html/taglocatorfactory.zep.c
    +++ b/ext/phalcon/html/taglocatorfactory.zep.c
    @@ -167,7 +167,7 @@ PHP_METHOD(Phalcon_Html_TagLocatorFactory, newInstance) {
     	zephir_create_closure_ex(&_0, NULL, phalcon_24__closure_ce, SL("__invoke"));
     	zephir_array_update_string(&helpers, SL("title"), &_0, PH_COPY | PH_SEPARATE);
     	object_init_ex(return_value, phalcon_service_locator_ce);
    -	ZEPHIR_CALL_METHOD(NULL, return_value, "__construct", NULL, 187, &helpers);
    +	ZEPHIR_CALL_METHOD(NULL, return_value, "__construct", NULL, 188, &helpers);
     	zephir_check_call_status();
     	RETURN_MM();
     
    diff --git a/ext/phalcon/http/request.zep.c b/ext/phalcon/http/request.zep.c
    index 7cc71a0e6e1..0cebd217455 100644
    --- a/ext/phalcon/http/request.zep.c
    +++ b/ext/phalcon/http/request.zep.c
    @@ -874,7 +874,7 @@ PHP_METHOD(Phalcon_Http_Request, getHeaders) {
     			ZVAL_STRING(&_8$$4, " ");
     			zephir_fast_str_replace(&_4$$4, &_7$$4, &_8$$4, &_6$$4 TSRMLS_CC);
     			zephir_fast_strtolower(&_3$$4, &_4$$4);
    -			ZEPHIR_CALL_FUNCTION(&name, "ucwords", &_9, 193, &_3$$4);
    +			ZEPHIR_CALL_FUNCTION(&name, "ucwords", &_9, 194, &_3$$4);
     			zephir_check_call_status();
     			ZEPHIR_INIT_NVAR(&_10$$4);
     			ZEPHIR_INIT_NVAR(&_11$$4);
    @@ -898,7 +898,7 @@ PHP_METHOD(Phalcon_Http_Request, getHeaders) {
     			ZVAL_STRING(&_17$$5, " ");
     			zephir_fast_str_replace(&_15$$5, &_16$$5, &_17$$5, &name TSRMLS_CC);
     			zephir_fast_strtolower(&_14$$5, &_15$$5);
    -			ZEPHIR_CALL_FUNCTION(&name, "ucwords", &_9, 193, &_14$$5);
    +			ZEPHIR_CALL_FUNCTION(&name, "ucwords", &_9, 194, &_14$$5);
     			zephir_check_call_status();
     			ZEPHIR_INIT_NVAR(&_18$$5);
     			ZEPHIR_INIT_NVAR(&_19$$5);
    diff --git a/ext/phalcon/image/adapter/gd.zep.c b/ext/phalcon/image/adapter/gd.zep.c
    index e9acdec944f..b258ac50d62 100644
    --- a/ext/phalcon/image/adapter/gd.zep.c
    +++ b/ext/phalcon/image/adapter/gd.zep.c
    @@ -805,7 +805,7 @@ PHP_METHOD(Phalcon_Image_Adapter_Gd, _sharpen) {
     
     	ZEPHIR_INIT_VAR(&_0);
     	ZVAL_LONG(&_1, (-18 + ((amount * 0.08))));
    -	ZEPHIR_CALL_FUNCTION(&_2, "abs", NULL, 189, &_1);
    +	ZEPHIR_CALL_FUNCTION(&_2, "abs", NULL, 190, &_1);
     	zephir_check_call_status();
     	ZVAL_LONG(&_1, 2);
     	zephir_round(&_0, &_2, &_1, NULL TSRMLS_CC);
    @@ -916,7 +916,7 @@ PHP_METHOD(Phalcon_Image_Adapter_Gd, _reflection) {
     
     	ZEPHIR_INIT_VAR(&_0);
     	ZVAL_DOUBLE(&_1, ((zephir_safe_div_long_long((opacity * 127), 100 TSRMLS_CC)) - (double) (127)));
    -	ZEPHIR_CALL_FUNCTION(&_2, "abs", NULL, 189, &_1);
    +	ZEPHIR_CALL_FUNCTION(&_2, "abs", NULL, 190, &_1);
     	zephir_check_call_status();
     	zephir_round(&_0, &_2, NULL, NULL TSRMLS_CC);
     	opacity = zephir_get_intval(&_0);
    @@ -1055,7 +1055,7 @@ PHP_METHOD(Phalcon_Image_Adapter_Gd, _watermark) {
     	if (opacity < 100) {
     		ZEPHIR_INIT_VAR(&_3$$3);
     		ZVAL_DOUBLE(&_4$$3, ((zephir_safe_div_long_long((opacity * 127), 100 TSRMLS_CC)) - (double) (127)));
    -		ZEPHIR_CALL_FUNCTION(&_5$$3, "abs", NULL, 189, &_4$$3);
    +		ZEPHIR_CALL_FUNCTION(&_5$$3, "abs", NULL, 190, &_4$$3);
     		zephir_check_call_status();
     		zephir_round(&_3$$3, &_5$$3, NULL, NULL TSRMLS_CC);
     		opacity = zephir_get_intval(&_3$$3);
    @@ -1154,7 +1154,7 @@ PHP_METHOD(Phalcon_Image_Adapter_Gd, _text) {
     	s5 = 0;
     	ZEPHIR_INIT_VAR(&_0);
     	ZVAL_DOUBLE(&_1, ((zephir_safe_div_long_long((opacity * 127), 100 TSRMLS_CC)) - (double) (127)));
    -	ZEPHIR_CALL_FUNCTION(&_2, "abs", NULL, 189, &_1);
    +	ZEPHIR_CALL_FUNCTION(&_2, "abs", NULL, 190, &_1);
     	zephir_check_call_status();
     	zephir_round(&_0, &_2, NULL, NULL TSRMLS_CC);
     	opacity = zephir_get_intval(&_0);
    @@ -1194,11 +1194,11 @@ PHP_METHOD(Phalcon_Image_Adapter_Gd, _text) {
     			return;
     		}
     		ZVAL_LONG(&_3$$3, (s4 - s0));
    -		ZEPHIR_CALL_FUNCTION(&_12$$3, "abs", NULL, 189, &_3$$3);
    +		ZEPHIR_CALL_FUNCTION(&_12$$3, "abs", NULL, 190, &_3$$3);
     		zephir_check_call_status();
     		width = (zephir_get_numberval(&_12$$3) + 10);
     		ZVAL_LONG(&_3$$3, (s5 - s1));
    -		ZEPHIR_CALL_FUNCTION(&_13$$3, "abs", NULL, 189, &_3$$3);
    +		ZEPHIR_CALL_FUNCTION(&_13$$3, "abs", NULL, 190, &_3$$3);
     		zephir_check_call_status();
     		height = (zephir_get_numberval(&_13$$3) + 10);
     		if (offsetX < 0) {
    diff --git a/ext/phalcon/mvc/model.zep.c b/ext/phalcon/mvc/model.zep.c
    index 71a9b51d15a..b6a06a3d753 100644
    --- a/ext/phalcon/mvc/model.zep.c
    +++ b/ext/phalcon/mvc/model.zep.c
    @@ -1837,16 +1837,17 @@ PHP_METHOD(Phalcon_Mvc_Model, find) {
      */
     PHP_METHOD(Phalcon_Mvc_Model, findFirst) {
     
    +	zend_bool _0;
     	zend_long ZEPHIR_LAST_CALL_STATUS;
    -	zephir_fcall_cache_entry *_0 = NULL;
    -	zval *parameters = NULL, parameters_sub, __$null, params, query, _1;
    +	zephir_fcall_cache_entry *_1 = NULL;
    +	zval *parameters = NULL, parameters_sub, __$null, params, query, _2;
     	zval *this_ptr = getThis();
     
     	ZVAL_UNDEF(¶meters_sub);
     	ZVAL_NULL(&__$null);
     	ZVAL_UNDEF(¶ms);
     	ZVAL_UNDEF(&query);
    -	ZVAL_UNDEF(&_1);
    +	ZVAL_UNDEF(&_2);
     
     	ZEPHIR_MM_GROW();
     	zephir_fetch_params(1, 0, 1, ¶meters);
    @@ -1857,20 +1858,28 @@ PHP_METHOD(Phalcon_Mvc_Model, findFirst) {
     	}
     
     
    -	if (Z_TYPE_P(parameters) != IS_ARRAY) {
    +	_0 = Z_TYPE_P(parameters) == IS_STRING;
    +	if (!(_0)) {
    +		_0 = 1 == zephir_is_numeric(parameters);
    +	}
    +	if (Z_TYPE_P(parameters) == IS_NULL) {
     		ZEPHIR_INIT_VAR(¶ms);
     		array_init(¶ms);
    -		if (Z_TYPE_P(parameters) != IS_NULL) {
    -			zephir_array_append(¶ms, parameters, PH_SEPARATE, "phalcon/mvc/model.zep", 1274);
    -		}
    -	} else {
    +	} else if (Z_TYPE_P(parameters) == IS_ARRAY) {
     		ZEPHIR_CPY_WRT(¶ms, parameters);
    +	} else if (_0) {
    +		ZEPHIR_INIT_NVAR(¶ms);
    +		array_init(¶ms);
    +		zephir_array_append(¶ms, parameters, PH_SEPARATE, "phalcon/mvc/model.zep", 1277);
    +	} else {
    +		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "Parameters passed must be of type array, string, numeric or null", "phalcon/mvc/model.zep", 1279);
    +		return;
     	}
    -	ZVAL_LONG(&_1, 1);
    -	ZEPHIR_CALL_STATIC(&query, "getpreparedquery", &_0, 320, ¶ms, &_1);
    +	ZVAL_LONG(&_2, 1);
    +	ZEPHIR_CALL_STATIC(&query, "getpreparedquery", &_1, 320, ¶ms, &_2);
     	zephir_check_call_status();
    -	ZVAL_BOOL(&_1, 1);
    -	ZEPHIR_CALL_METHOD(NULL, &query, "setuniquerow", NULL, 0, &_1);
    +	ZVAL_BOOL(&_2, 1);
    +	ZEPHIR_CALL_METHOD(NULL, &query, "setuniquerow", NULL, 0, &_2);
     	zephir_check_call_status();
     	ZEPHIR_RETURN_CALL_METHOD(&query, "execute", NULL, 0);
     	zephir_check_call_status();
    @@ -2001,7 +2010,7 @@ PHP_METHOD(Phalcon_Mvc_Model, getChangedFields) {
     	ZEPHIR_OBS_VAR(&snapshot);
     	zephir_read_property(&snapshot, this_ptr, SL("_snapshot"), PH_NOISY_CC);
     	if (Z_TYPE_P(&snapshot) != IS_ARRAY) {
    -		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "The record doesn't have a valid data snapshot", "phalcon/mvc/model.zep", 1356);
    +		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "The record doesn't have a valid data snapshot", "phalcon/mvc/model.zep", 1358);
     		return;
     	}
     	ZEPHIR_CALL_METHOD(&metaData, this_ptr, "getmodelsmetadata", NULL, 0);
    @@ -2017,7 +2026,7 @@ PHP_METHOD(Phalcon_Mvc_Model, getChangedFields) {
     	ZEPHIR_INIT_VAR(&changed);
     	array_init(&changed);
     	ZEPHIR_INIT_VAR(&_0);
    -	zephir_is_iterable(&allAttributes, 0, "phalcon/mvc/model.zep", 1409);
    +	zephir_is_iterable(&allAttributes, 0, "phalcon/mvc/model.zep", 1411);
     	ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&allAttributes), _2, _3, _1)
     	{
     		ZEPHIR_INIT_NVAR(&name);
    @@ -2029,17 +2038,17 @@ PHP_METHOD(Phalcon_Mvc_Model, getChangedFields) {
     		ZEPHIR_INIT_NVAR(&_0);
     		ZVAL_COPY(&_0, _1);
     		if (!(zephir_array_isset(&snapshot, &name))) {
    -			zephir_array_append(&changed, &name, PH_SEPARATE, "phalcon/mvc/model.zep", 1388);
    +			zephir_array_append(&changed, &name, PH_SEPARATE, "phalcon/mvc/model.zep", 1390);
     			continue;
     		}
     		ZEPHIR_OBS_NVAR(&value);
     		if (!(zephir_fetch_property_zval(&value, this_ptr, &name, PH_SILENT_CC))) {
    -			zephir_array_append(&changed, &name, PH_SEPARATE, "phalcon/mvc/model.zep", 1396);
    +			zephir_array_append(&changed, &name, PH_SEPARATE, "phalcon/mvc/model.zep", 1398);
     			continue;
     		}
    -		zephir_array_fetch(&_4$$6, &snapshot, &name, PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 1403 TSRMLS_CC);
    +		zephir_array_fetch(&_4$$6, &snapshot, &name, PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 1405 TSRMLS_CC);
     		if (!ZEPHIR_IS_IDENTICAL(&value, &_4$$6)) {
    -			zephir_array_append(&changed, &name, PH_SEPARATE, "phalcon/mvc/model.zep", 1404);
    +			zephir_array_append(&changed, &name, PH_SEPARATE, "phalcon/mvc/model.zep", 1406);
     			continue;
     		}
     	} ZEND_HASH_FOREACH_END();
    @@ -2147,7 +2156,7 @@ PHP_METHOD(Phalcon_Mvc_Model, getMessages) {
     		ZEPHIR_INIT_VAR(&filtered);
     		array_init(&filtered);
     		zephir_read_property(&_1$$3, this_ptr, SL("_errorMessages"), PH_NOISY_CC | PH_READONLY);
    -		zephir_is_iterable(&_1$$3, 0, "phalcon/mvc/model.zep", 1470);
    +		zephir_is_iterable(&_1$$3, 0, "phalcon/mvc/model.zep", 1472);
     		ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&_1$$3), _2$$3)
     		{
     			ZEPHIR_INIT_NVAR(&message);
    @@ -2155,7 +2164,7 @@ PHP_METHOD(Phalcon_Mvc_Model, getMessages) {
     			ZEPHIR_CALL_METHOD(&_3$$4, &message, "getfield", NULL, 0);
     			zephir_check_call_status();
     			if (ZEPHIR_IS_EQUAL(&_3$$4, filter)) {
    -				zephir_array_append(&filtered, &message, PH_SEPARATE, "phalcon/mvc/model.zep", 1467);
    +				zephir_array_append(&filtered, &message, PH_SEPARATE, "phalcon/mvc/model.zep", 1469);
     			}
     		} ZEND_HASH_FOREACH_END();
     		ZEPHIR_INIT_NVAR(&message);
    @@ -2205,7 +2214,7 @@ PHP_METHOD(Phalcon_Mvc_Model, getModelsMetaData) {
     		zephir_check_call_status();
     		ZEPHIR_CPY_WRT(&metaData, &_1$$3);
     		if (Z_TYPE_P(&metaData) != IS_OBJECT) {
    -			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "The injected service 'modelsMetadata' is not valid", "phalcon/mvc/model.zep", 1501);
    +			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "The injected service 'modelsMetadata' is not valid", "phalcon/mvc/model.zep", 1503);
     			return;
     		}
     		zephir_update_property_zval(this_ptr, SL("_modelsMetaData"), &metaData);
    @@ -2334,7 +2343,7 @@ PHP_METHOD(Phalcon_Mvc_Model, getRelated) {
     		ZEPHIR_CONCAT_SVSVS(&_3$$3, "There is no defined relations for the model '", &className, "' using alias '", &alias, "'");
     		ZEPHIR_CALL_METHOD(NULL, &_2$$3, "__construct", NULL, 4, &_3$$3);
     		zephir_check_call_status();
    -		zephir_throw_exception_debug(&_2$$3, "phalcon/mvc/model.zep", 1568 TSRMLS_CC);
    +		zephir_throw_exception_debug(&_2$$3, "phalcon/mvc/model.zep", 1570 TSRMLS_CC);
     		ZEPHIR_MM_RESTORE();
     		return;
     	}
    @@ -2455,21 +2464,21 @@ PHP_METHOD(Phalcon_Mvc_Model, getUpdatedFields) {
     	ZEPHIR_OBS_VAR(&oldSnapshot);
     	zephir_read_property(&oldSnapshot, this_ptr, SL("_oldSnapshot"), PH_NOISY_CC);
     	if (!(ZEPHIR_GLOBAL(orm).update_snapshot_on_save)) {
    -		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "Update snapshot on save must be enabled for this method to work properly", "phalcon/mvc/model.zep", 1632);
    +		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "Update snapshot on save must be enabled for this method to work properly", "phalcon/mvc/model.zep", 1634);
     		return;
     	}
     	if (Z_TYPE_P(&snapshot) != IS_ARRAY) {
    -		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "The record doesn't have a valid data snapshot", "phalcon/mvc/model.zep", 1636);
    +		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "The record doesn't have a valid data snapshot", "phalcon/mvc/model.zep", 1638);
     		return;
     	}
     	zephir_read_property(&_0, this_ptr, SL("_dirtyState"), PH_NOISY_CC | PH_READONLY);
     	if (!ZEPHIR_IS_LONG(&_0, 0)) {
    -		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "Change checking cannot be performed because the object has not been persisted or is deleted", "phalcon/mvc/model.zep", 1643);
    +		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "Change checking cannot be performed because the object has not been persisted or is deleted", "phalcon/mvc/model.zep", 1645);
     		return;
     	}
     	ZEPHIR_INIT_VAR(&updated);
     	array_init(&updated);
    -	zephir_is_iterable(&snapshot, 0, "phalcon/mvc/model.zep", 1663);
    +	zephir_is_iterable(&snapshot, 0, "phalcon/mvc/model.zep", 1665);
     	ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&snapshot), _2, _3, _1)
     	{
     		ZEPHIR_INIT_NVAR(&name);
    @@ -2481,12 +2490,12 @@ PHP_METHOD(Phalcon_Mvc_Model, getUpdatedFields) {
     		ZEPHIR_INIT_NVAR(&value);
     		ZVAL_COPY(&value, _1);
     		if (!(zephir_array_isset(&oldSnapshot, &name))) {
    -			zephir_array_append(&updated, &name, PH_SEPARATE, "phalcon/mvc/model.zep", 1653);
    +			zephir_array_append(&updated, &name, PH_SEPARATE, "phalcon/mvc/model.zep", 1655);
     			continue;
     		}
    -		zephir_array_fetch(&_4$$6, &oldSnapshot, &name, PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 1657 TSRMLS_CC);
    +		zephir_array_fetch(&_4$$6, &oldSnapshot, &name, PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 1659 TSRMLS_CC);
     		if (!ZEPHIR_IS_IDENTICAL(&value, &_4$$6)) {
    -			zephir_array_append(&updated, &name, PH_SEPARATE, "phalcon/mvc/model.zep", 1658);
    +			zephir_array_append(&updated, &name, PH_SEPARATE, "phalcon/mvc/model.zep", 1660);
     			continue;
     		}
     	} ZEND_HASH_FOREACH_END();
    @@ -2946,7 +2955,7 @@ PHP_METHOD(Phalcon_Mvc_Model, refresh) {
     
     	zephir_read_property(&_0, this_ptr, SL("_dirtyState"), PH_NOISY_CC | PH_READONLY);
     	if (!ZEPHIR_IS_LONG(&_0, 0)) {
    -		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "The record cannot be refreshed because it does not exist or is deleted", "phalcon/mvc/model.zep", 1900);
    +		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "The record cannot be refreshed because it does not exist or is deleted", "phalcon/mvc/model.zep", 1902);
     		return;
     	}
     	ZEPHIR_CALL_METHOD(&metaData, this_ptr, "getmodelsmetadata", NULL, 0);
    @@ -2973,7 +2982,7 @@ PHP_METHOD(Phalcon_Mvc_Model, refresh) {
     		ZEPHIR_CALL_METHOD(&_2$$6, this_ptr, "_exists", NULL, 0, &metaData, &readConnection, &table);
     		zephir_check_call_status();
     		if (!(zephir_is_true(&_2$$6))) {
    -			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "The record cannot be refreshed because it does not exist or is deleted", "phalcon/mvc/model.zep", 1923);
    +			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "The record cannot be refreshed because it does not exist or is deleted", "phalcon/mvc/model.zep", 1925);
     			return;
     		}
     		ZEPHIR_OBS_NVAR(&uniqueKey);
    @@ -2982,14 +2991,14 @@ PHP_METHOD(Phalcon_Mvc_Model, refresh) {
     	ZEPHIR_OBS_VAR(&uniqueParams);
     	zephir_read_property(&uniqueParams, this_ptr, SL("_uniqueParams"), PH_NOISY_CC);
     	if (Z_TYPE_P(&uniqueParams) != IS_ARRAY) {
    -		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "The record cannot be refreshed because it does not exist or is deleted", "phalcon/mvc/model.zep", 1931);
    +		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "The record cannot be refreshed because it does not exist or is deleted", "phalcon/mvc/model.zep", 1933);
     		return;
     	}
     	ZEPHIR_INIT_VAR(&fields);
     	array_init(&fields);
     	ZEPHIR_CALL_METHOD(&_3, &metaData, "getattributes", NULL, 0, this_ptr);
     	zephir_check_call_status();
    -	zephir_is_iterable(&_3, 0, "phalcon/mvc/model.zep", 1945);
    +	zephir_is_iterable(&_3, 0, "phalcon/mvc/model.zep", 1947);
     	ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&_3), _4)
     	{
     		ZEPHIR_INIT_NVAR(&attribute);
    @@ -2997,7 +3006,7 @@ PHP_METHOD(Phalcon_Mvc_Model, refresh) {
     		ZEPHIR_INIT_NVAR(&_5$$9);
     		zephir_create_array(&_5$$9, 1, 0 TSRMLS_CC);
     		zephir_array_fast_append(&_5$$9, &attribute);
    -		zephir_array_append(&fields, &_5$$9, PH_SEPARATE, "phalcon/mvc/model.zep", 1939);
    +		zephir_array_append(&fields, &_5$$9, PH_SEPARATE, "phalcon/mvc/model.zep", 1941);
     	} ZEND_HASH_FOREACH_END();
     	ZEPHIR_INIT_NVAR(&attribute);
     	ZEPHIR_CALL_METHOD(&dialect, &readConnection, "getdialect", NULL, 0);
    @@ -3151,7 +3160,7 @@ PHP_METHOD(Phalcon_Mvc_Model, save) {
     			zephir_check_call_status();
     			ZEPHIR_CALL_METHOD(NULL, &_6$$11, "__construct", NULL, 324, this_ptr, &_7$$11);
     			zephir_check_call_status();
    -			zephir_throw_exception_debug(&_6$$11, "phalcon/mvc/model.zep", 2073 TSRMLS_CC);
    +			zephir_throw_exception_debug(&_6$$11, "phalcon/mvc/model.zep", 2075 TSRMLS_CC);
     			ZEPHIR_MM_RESTORE();
     			return;
     		}
    @@ -3280,7 +3289,7 @@ PHP_METHOD(Phalcon_Mvc_Model, unserialize) {
     		ZEPHIR_CALL_CE_STATIC(&dependencyInjector, phalcon_di_ce, "getdefault", &_0, 0);
     		zephir_check_call_status();
     		if (Z_TYPE_P(&dependencyInjector) != IS_OBJECT) {
    -			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "A dependency injector container is required to obtain the services related to the ORM", "phalcon/mvc/model.zep", 2168);
    +			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "A dependency injector container is required to obtain the services related to the ORM", "phalcon/mvc/model.zep", 2170);
     			return;
     		}
     		zephir_update_property_zval(this_ptr, SL("_dependencyInjector"), &dependencyInjector);
    @@ -3290,7 +3299,7 @@ PHP_METHOD(Phalcon_Mvc_Model, unserialize) {
     		zephir_check_call_status();
     		ZEPHIR_CPY_WRT(&manager, &_1$$3);
     		if (Z_TYPE_P(&manager) != IS_OBJECT) {
    -			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "The injected service 'modelsManager' is not valid", "phalcon/mvc/model.zep", 2181);
    +			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "The injected service 'modelsManager' is not valid", "phalcon/mvc/model.zep", 2183);
     			return;
     		}
     		zephir_update_property_zval(this_ptr, SL("_modelsManager"), &manager);
    @@ -3301,13 +3310,13 @@ PHP_METHOD(Phalcon_Mvc_Model, unserialize) {
     		if (zephir_is_true(&_1$$3)) {
     			if (zephir_array_isset_string_fetch(&snapshot, &attributes, SL("_snapshot"), 1)) {
     				zephir_update_property_zval(this_ptr, SL("_snapshot"), &snapshot);
    -				zephir_array_fetch_string(&_3$$7, &attributes, SL("_attributes"), PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 2196 TSRMLS_CC);
    +				zephir_array_fetch_string(&_3$$7, &attributes, SL("_attributes"), PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 2198 TSRMLS_CC);
     				ZEPHIR_CPY_WRT(&attributes, &_3$$7);
     			} else {
     				zephir_update_property_zval(this_ptr, SL("_snapshot"), &attributes);
     			}
     		}
    -		zephir_is_iterable(&attributes, 0, "phalcon/mvc/model.zep", 2209);
    +		zephir_is_iterable(&attributes, 0, "phalcon/mvc/model.zep", 2211);
     		ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&attributes), _5$$3, _6$$3, _4$$3)
     		{
     			ZEPHIR_INIT_NVAR(&key);
    @@ -3504,7 +3513,7 @@ PHP_METHOD(Phalcon_Mvc_Model, setOldSnapshotData) {
     	if (Z_TYPE_P(columnMap) == IS_ARRAY) {
     		ZEPHIR_INIT_VAR(&snapshot);
     		array_init(&snapshot);
    -		zephir_is_iterable(&data, 0, "phalcon/mvc/model.zep", 2298);
    +		zephir_is_iterable(&data, 0, "phalcon/mvc/model.zep", 2300);
     		ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&data), _1$$3, _2$$3, _0$$3)
     		{
     			ZEPHIR_INIT_NVAR(&key);
    @@ -3527,7 +3536,7 @@ PHP_METHOD(Phalcon_Mvc_Model, setOldSnapshotData) {
     					ZEPHIR_CONCAT_SVS(&_4$$7, "Column '", &key, "' doesn't make part of the column map");
     					ZEPHIR_CALL_METHOD(NULL, &_3$$7, "__construct", &_5, 4, &_4$$7);
     					zephir_check_call_status();
    -					zephir_throw_exception_debug(&_3$$7, "phalcon/mvc/model.zep", 2282 TSRMLS_CC);
    +					zephir_throw_exception_debug(&_3$$7, "phalcon/mvc/model.zep", 2284 TSRMLS_CC);
     					ZEPHIR_MM_RESTORE();
     					return;
     				} else {
    @@ -3544,7 +3553,7 @@ PHP_METHOD(Phalcon_Mvc_Model, setOldSnapshotData) {
     						ZEPHIR_CONCAT_SVS(&_7$$11, "Column '", &key, "' doesn't make part of the column map");
     						ZEPHIR_CALL_METHOD(NULL, &_6$$11, "__construct", &_5, 4, &_7$$11);
     						zephir_check_call_status();
    -						zephir_throw_exception_debug(&_6$$11, "phalcon/mvc/model.zep", 2290 TSRMLS_CC);
    +						zephir_throw_exception_debug(&_6$$11, "phalcon/mvc/model.zep", 2292 TSRMLS_CC);
     						ZEPHIR_MM_RESTORE();
     						return;
     					} else {
    @@ -3607,7 +3616,7 @@ PHP_METHOD(Phalcon_Mvc_Model, setSnapshotData) {
     	if (Z_TYPE_P(columnMap) == IS_ARRAY) {
     		ZEPHIR_INIT_VAR(&snapshot);
     		array_init(&snapshot);
    -		zephir_is_iterable(&data, 0, "phalcon/mvc/model.zep", 2358);
    +		zephir_is_iterable(&data, 0, "phalcon/mvc/model.zep", 2360);
     		ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&data), _1$$3, _2$$3, _0$$3)
     		{
     			ZEPHIR_INIT_NVAR(&key);
    @@ -3639,7 +3648,7 @@ PHP_METHOD(Phalcon_Mvc_Model, setSnapshotData) {
     					ZEPHIR_CONCAT_SVS(&_7$$8, "Column '", &key, "' doesn't make part of the column map");
     					ZEPHIR_CALL_METHOD(NULL, &_6$$8, "__construct", &_8, 4, &_7$$8);
     					zephir_check_call_status();
    -					zephir_throw_exception_debug(&_6$$8, "phalcon/mvc/model.zep", 2340 TSRMLS_CC);
    +					zephir_throw_exception_debug(&_6$$8, "phalcon/mvc/model.zep", 2342 TSRMLS_CC);
     					ZEPHIR_MM_RESTORE();
     					return;
     				} else {
    @@ -3656,7 +3665,7 @@ PHP_METHOD(Phalcon_Mvc_Model, setSnapshotData) {
     						ZEPHIR_CONCAT_SVS(&_10$$12, "Column '", &key, "' doesn't make part of the column map");
     						ZEPHIR_CALL_METHOD(NULL, &_9$$12, "__construct", &_8, 4, &_10$$12);
     						zephir_check_call_status();
    -						zephir_throw_exception_debug(&_9$$12, "phalcon/mvc/model.zep", 2349 TSRMLS_CC);
    +						zephir_throw_exception_debug(&_9$$12, "phalcon/mvc/model.zep", 2351 TSRMLS_CC);
     						ZEPHIR_MM_RESTORE();
     						return;
     					} else {
    @@ -3978,7 +3987,7 @@ PHP_METHOD(Phalcon_Mvc_Model, toArray) {
     	zephir_check_call_status();
     	ZEPHIR_CALL_METHOD(&_0, &metaData, "getattributes", NULL, 0, this_ptr);
     	zephir_check_call_status();
    -	zephir_is_iterable(&_0, 0, "phalcon/mvc/model.zep", 2601);
    +	zephir_is_iterable(&_0, 0, "phalcon/mvc/model.zep", 2603);
     	ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&_0), _1)
     	{
     		ZEPHIR_INIT_NVAR(&attribute);
    @@ -4002,7 +4011,7 @@ PHP_METHOD(Phalcon_Mvc_Model, toArray) {
     					ZEPHIR_CONCAT_SVS(&_6$$7, "Column '", &attribute, "' doesn't make part of the column map");
     					ZEPHIR_CALL_METHOD(NULL, &_5$$7, "__construct", &_7, 4, &_6$$7);
     					zephir_check_call_status();
    -					zephir_throw_exception_debug(&_5$$7, "phalcon/mvc/model.zep", 2579 TSRMLS_CC);
    +					zephir_throw_exception_debug(&_5$$7, "phalcon/mvc/model.zep", 2581 TSRMLS_CC);
     					ZEPHIR_MM_RESTORE();
     					return;
     				} else {
    @@ -4179,7 +4188,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysRestrict) {
     	ZEPHIR_CALL_METHOD(&belongsTo, &manager, "getbelongsto", NULL, 0, this_ptr);
     	zephir_check_call_status();
     	error = 0;
    -	zephir_is_iterable(&belongsTo, 0, "phalcon/mvc/model.zep", 2798);
    +	zephir_is_iterable(&belongsTo, 0, "phalcon/mvc/model.zep", 2800);
     	ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&belongsTo), _1)
     	{
     		ZEPHIR_INIT_NVAR(&relation);
    @@ -4194,7 +4203,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysRestrict) {
     		if (Z_TYPE_P(&foreignKey) == IS_ARRAY) {
     			if (zephir_array_isset_string(&foreignKey, SL("action"))) {
     				ZEPHIR_OBS_NVAR(&_2$$6);
    -				zephir_array_fetch_string(&_2$$6, &foreignKey, SL("action"), PH_NOISY, "phalcon/mvc/model.zep", 2700 TSRMLS_CC);
    +				zephir_array_fetch_string(&_2$$6, &foreignKey, SL("action"), PH_NOISY, "phalcon/mvc/model.zep", 2702 TSRMLS_CC);
     				action = zephir_get_intval(&_2$$6);
     			}
     		}
    @@ -4215,7 +4224,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysRestrict) {
     		ZEPHIR_CALL_METHOD(&referencedFields, &relation, "getreferencedfields", NULL, 0);
     		zephir_check_call_status();
     		if (Z_TYPE_P(&fields) == IS_ARRAY) {
    -			zephir_is_iterable(&fields, 0, "phalcon/mvc/model.zep", 2738);
    +			zephir_is_iterable(&fields, 0, "phalcon/mvc/model.zep", 2740);
     			ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&fields), _6$$8, _7$$8, _5$$8)
     			{
     				ZEPHIR_INIT_NVAR(&position);
    @@ -4228,11 +4237,11 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysRestrict) {
     				ZVAL_COPY(&field, _5$$8);
     				ZEPHIR_OBS_NVAR(&value);
     				zephir_fetch_property_zval(&value, this_ptr, &field, PH_SILENT_CC);
    -				zephir_array_fetch(&_8$$9, &referencedFields, &position, PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 2731 TSRMLS_CC);
    +				zephir_array_fetch(&_8$$9, &referencedFields, &position, PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 2733 TSRMLS_CC);
     				ZEPHIR_INIT_LNVAR(_9$$9);
     				ZEPHIR_CONCAT_SVSV(&_9$$9, "[", &_8$$9, "] = ?", &position);
    -				zephir_array_append(&conditions, &_9$$9, PH_SEPARATE, "phalcon/mvc/model.zep", 2731);
    -				zephir_array_append(&bindParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 2732);
    +				zephir_array_append(&conditions, &_9$$9, PH_SEPARATE, "phalcon/mvc/model.zep", 2733);
    +				zephir_array_append(&bindParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 2734);
     				if (Z_TYPE_P(&value) == IS_NULL) {
     					numberNull++;
     				}
    @@ -4245,15 +4254,15 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysRestrict) {
     			zephir_fetch_property_zval(&value, this_ptr, &fields, PH_SILENT_CC);
     			ZEPHIR_INIT_LNVAR(_10$$11);
     			ZEPHIR_CONCAT_SVS(&_10$$11, "[", &referencedFields, "] = ?0");
    -			zephir_array_append(&conditions, &_10$$11, PH_SEPARATE, "phalcon/mvc/model.zep", 2743);
    -			zephir_array_append(&bindParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 2744);
    +			zephir_array_append(&conditions, &_10$$11, PH_SEPARATE, "phalcon/mvc/model.zep", 2745);
    +			zephir_array_append(&bindParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 2746);
     			if (Z_TYPE_P(&value) == IS_NULL) {
     				validateWithNulls = 1;
     			}
     		}
     		ZEPHIR_OBS_NVAR(&extraConditions);
     		if (zephir_array_isset_string_fetch(&extraConditions, &foreignKey, SL("conditions"), 0)) {
    -			zephir_array_append(&conditions, &extraConditions, PH_SEPARATE, "phalcon/mvc/model.zep", 2755);
    +			zephir_array_append(&conditions, &extraConditions, PH_SEPARATE, "phalcon/mvc/model.zep", 2757);
     		}
     		if (validateWithNulls) {
     			ZEPHIR_OBS_NVAR(&allowNulls);
    @@ -4358,7 +4367,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysReverseCascade) {
     	ZEPHIR_CPY_WRT(&manager, &_0);
     	ZEPHIR_CALL_METHOD(&relations, &manager, "gethasoneandhasmany", NULL, 0, this_ptr);
     	zephir_check_call_status();
    -	zephir_is_iterable(&relations, 0, "phalcon/mvc/model.zep", 2911);
    +	zephir_is_iterable(&relations, 0, "phalcon/mvc/model.zep", 2913);
     	ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&relations), _1)
     	{
     		ZEPHIR_INIT_NVAR(&relation);
    @@ -4372,7 +4381,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysReverseCascade) {
     		if (Z_TYPE_P(&foreignKey) == IS_ARRAY) {
     			if (zephir_array_isset_string(&foreignKey, SL("action"))) {
     				ZEPHIR_OBS_NVAR(&_2$$6);
    -				zephir_array_fetch_string(&_2$$6, &foreignKey, SL("action"), PH_NOISY, "phalcon/mvc/model.zep", 2850 TSRMLS_CC);
    +				zephir_array_fetch_string(&_2$$6, &foreignKey, SL("action"), PH_NOISY, "phalcon/mvc/model.zep", 2852 TSRMLS_CC);
     				action = zephir_get_intval(&_2$$6);
     			}
     		}
    @@ -4392,7 +4401,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysReverseCascade) {
     		ZEPHIR_INIT_NVAR(&bindParams);
     		array_init(&bindParams);
     		if (Z_TYPE_P(&fields) == IS_ARRAY) {
    -			zephir_is_iterable(&fields, 0, "phalcon/mvc/model.zep", 2880);
    +			zephir_is_iterable(&fields, 0, "phalcon/mvc/model.zep", 2882);
     			ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&fields), _6$$8, _7$$8, _5$$8)
     			{
     				ZEPHIR_INIT_NVAR(&position);
    @@ -4405,11 +4414,11 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysReverseCascade) {
     				ZVAL_COPY(&field, _5$$8);
     				ZEPHIR_OBS_NVAR(&value);
     				zephir_fetch_property_zval(&value, this_ptr, &field, PH_SILENT_CC);
    -				zephir_array_fetch(&_8$$9, &referencedFields, &position, PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 2877 TSRMLS_CC);
    +				zephir_array_fetch(&_8$$9, &referencedFields, &position, PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 2879 TSRMLS_CC);
     				ZEPHIR_INIT_LNVAR(_9$$9);
     				ZEPHIR_CONCAT_SVSV(&_9$$9, "[", &_8$$9, "] = ?", &position);
    -				zephir_array_append(&conditions, &_9$$9, PH_SEPARATE, "phalcon/mvc/model.zep", 2877);
    -				zephir_array_append(&bindParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 2878);
    +				zephir_array_append(&conditions, &_9$$9, PH_SEPARATE, "phalcon/mvc/model.zep", 2879);
    +				zephir_array_append(&bindParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 2880);
     			} ZEND_HASH_FOREACH_END();
     			ZEPHIR_INIT_NVAR(&field);
     			ZEPHIR_INIT_NVAR(&position);
    @@ -4418,12 +4427,12 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysReverseCascade) {
     			zephir_fetch_property_zval(&value, this_ptr, &fields, PH_SILENT_CC);
     			ZEPHIR_INIT_LNVAR(_10$$10);
     			ZEPHIR_CONCAT_SVS(&_10$$10, "[", &referencedFields, "] = ?0");
    -			zephir_array_append(&conditions, &_10$$10, PH_SEPARATE, "phalcon/mvc/model.zep", 2882);
    -			zephir_array_append(&bindParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 2883);
    +			zephir_array_append(&conditions, &_10$$10, PH_SEPARATE, "phalcon/mvc/model.zep", 2884);
    +			zephir_array_append(&bindParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 2885);
     		}
     		ZEPHIR_OBS_NVAR(&extraConditions);
     		if (zephir_array_isset_string_fetch(&extraConditions, &foreignKey, SL("conditions"), 0)) {
    -			zephir_array_append(&conditions, &extraConditions, PH_SEPARATE, "phalcon/mvc/model.zep", 2890);
    +			zephir_array_append(&conditions, &extraConditions, PH_SEPARATE, "phalcon/mvc/model.zep", 2892);
     		}
     		ZEPHIR_INIT_NVAR(&_11$$3);
     		zephir_create_array(&_11$$3, 2, 0 TSRMLS_CC);
    @@ -4492,7 +4501,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysReverseRestrict) {
     	ZEPHIR_CALL_METHOD(&relations, &manager, "gethasoneandhasmany", NULL, 0, this_ptr);
     	zephir_check_call_status();
     	error = 0;
    -	zephir_is_iterable(&relations, 0, "phalcon/mvc/model.zep", 3029);
    +	zephir_is_iterable(&relations, 0, "phalcon/mvc/model.zep", 3031);
     	ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&relations), _1)
     	{
     		ZEPHIR_INIT_NVAR(&relation);
    @@ -4506,7 +4515,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysReverseRestrict) {
     		if (Z_TYPE_P(&foreignKey) == IS_ARRAY) {
     			if (zephir_array_isset_string(&foreignKey, SL("action"))) {
     				ZEPHIR_OBS_NVAR(&_2$$6);
    -				zephir_array_fetch_string(&_2$$6, &foreignKey, SL("action"), PH_NOISY, "phalcon/mvc/model.zep", 2957 TSRMLS_CC);
    +				zephir_array_fetch_string(&_2$$6, &foreignKey, SL("action"), PH_NOISY, "phalcon/mvc/model.zep", 2959 TSRMLS_CC);
     				action = zephir_get_intval(&_2$$6);
     			}
     		}
    @@ -4526,7 +4535,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysReverseRestrict) {
     		ZEPHIR_INIT_NVAR(&bindParams);
     		array_init(&bindParams);
     		if (Z_TYPE_P(&fields) == IS_ARRAY) {
    -			zephir_is_iterable(&fields, 0, "phalcon/mvc/model.zep", 2991);
    +			zephir_is_iterable(&fields, 0, "phalcon/mvc/model.zep", 2993);
     			ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(&fields), _5$$8, _6$$8, _4$$8)
     			{
     				ZEPHIR_INIT_NVAR(&position);
    @@ -4539,11 +4548,11 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysReverseRestrict) {
     				ZVAL_COPY(&field, _4$$8);
     				ZEPHIR_OBS_NVAR(&value);
     				zephir_fetch_property_zval(&value, this_ptr, &field, PH_SILENT_CC);
    -				zephir_array_fetch(&_7$$9, &referencedFields, &position, PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 2987 TSRMLS_CC);
    +				zephir_array_fetch(&_7$$9, &referencedFields, &position, PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 2989 TSRMLS_CC);
     				ZEPHIR_INIT_LNVAR(_8$$9);
     				ZEPHIR_CONCAT_SVSV(&_8$$9, "[", &_7$$9, "] = ?", &position);
    -				zephir_array_append(&conditions, &_8$$9, PH_SEPARATE, "phalcon/mvc/model.zep", 2987);
    -				zephir_array_append(&bindParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 2988);
    +				zephir_array_append(&conditions, &_8$$9, PH_SEPARATE, "phalcon/mvc/model.zep", 2989);
    +				zephir_array_append(&bindParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 2990);
     			} ZEND_HASH_FOREACH_END();
     			ZEPHIR_INIT_NVAR(&field);
     			ZEPHIR_INIT_NVAR(&position);
    @@ -4552,12 +4561,12 @@ PHP_METHOD(Phalcon_Mvc_Model, _checkForeignKeysReverseRestrict) {
     			zephir_fetch_property_zval(&value, this_ptr, &fields, PH_SILENT_CC);
     			ZEPHIR_INIT_LNVAR(_9$$10);
     			ZEPHIR_CONCAT_SVS(&_9$$10, "[", &referencedFields, "] = ?0");
    -			zephir_array_append(&conditions, &_9$$10, PH_SEPARATE, "phalcon/mvc/model.zep", 2993);
    -			zephir_array_append(&bindParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 2994);
    +			zephir_array_append(&conditions, &_9$$10, PH_SEPARATE, "phalcon/mvc/model.zep", 2995);
    +			zephir_array_append(&bindParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 2996);
     		}
     		ZEPHIR_OBS_NVAR(&extraConditions);
     		if (zephir_array_isset_string_fetch(&extraConditions, &foreignKey, SL("conditions"), 0)) {
    -			zephir_array_append(&conditions, &extraConditions, PH_SEPARATE, "phalcon/mvc/model.zep", 3001);
    +			zephir_array_append(&conditions, &extraConditions, PH_SEPARATE, "phalcon/mvc/model.zep", 3003);
     		}
     		ZEPHIR_INIT_NVAR(&_11$$3);
     		zephir_create_array(&_11$$3, 2, 0 TSRMLS_CC);
    @@ -4687,7 +4696,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowInsert) {
     		ZEPHIR_INIT_NVAR(&columnMap);
     		ZVAL_NULL(&columnMap);
     	}
    -	zephir_is_iterable(&attributes, 0, "phalcon/mvc/model.zep", 3138);
    +	zephir_is_iterable(&attributes, 0, "phalcon/mvc/model.zep", 3140);
     	ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&attributes), _1)
     	{
     		ZEPHIR_INIT_NVAR(&field);
    @@ -4701,7 +4710,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowInsert) {
     				ZEPHIR_CONCAT_SVS(&_3$$7, "Column '", &field, "' isn't part of the column map");
     				ZEPHIR_CALL_METHOD(NULL, &_2$$7, "__construct", &_4, 4, &_3$$7);
     				zephir_check_call_status();
    -				zephir_throw_exception_debug(&_2$$7, "phalcon/mvc/model.zep", 3083 TSRMLS_CC);
    +				zephir_throw_exception_debug(&_2$$7, "phalcon/mvc/model.zep", 3085 TSRMLS_CC);
     				ZEPHIR_MM_RESTORE();
     				return;
     			}
    @@ -4731,25 +4740,25 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowInsert) {
     						ZEPHIR_CONCAT_SVS(&_8$$14, "Column '", &field, "' have not defined a bind data type");
     						ZEPHIR_CALL_METHOD(NULL, &_7$$14, "__construct", &_4, 4, &_8$$14);
     						zephir_check_call_status();
    -						zephir_throw_exception_debug(&_7$$14, "phalcon/mvc/model.zep", 3112 TSRMLS_CC);
    +						zephir_throw_exception_debug(&_7$$14, "phalcon/mvc/model.zep", 3114 TSRMLS_CC);
     						ZEPHIR_MM_RESTORE();
     						return;
     					}
    -					zephir_array_append(&fields, &field, PH_SEPARATE, "phalcon/mvc/model.zep", 3115);
    -					zephir_array_append(&values, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 3115);
    -					zephir_array_append(&bindTypes, &bindType, PH_SEPARATE, "phalcon/mvc/model.zep", 3115);
    +					zephir_array_append(&fields, &field, PH_SEPARATE, "phalcon/mvc/model.zep", 3117);
    +					zephir_array_append(&values, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 3117);
    +					zephir_array_append(&bindTypes, &bindType, PH_SEPARATE, "phalcon/mvc/model.zep", 3117);
     				} else {
     					if (zephir_array_isset(&defaultValues, &field)) {
     						ZEPHIR_CALL_METHOD(&_9$$16, connection, "getdefaultvalue", &_10, 0);
     						zephir_check_call_status();
    -						zephir_array_append(&values, &_9$$16, PH_SEPARATE, "phalcon/mvc/model.zep", 3119);
    +						zephir_array_append(&values, &_9$$16, PH_SEPARATE, "phalcon/mvc/model.zep", 3121);
     						zephir_array_update_zval(&snapshot, &attributeField, &__$null, PH_COPY | PH_SEPARATE);
     					} else {
    -						zephir_array_append(&values, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 3125);
    +						zephir_array_append(&values, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 3127);
     						zephir_array_update_zval(&snapshot, &attributeField, &value, PH_COPY | PH_SEPARATE);
     					}
    -					zephir_array_append(&fields, &field, PH_SEPARATE, "phalcon/mvc/model.zep", 3129);
    -					zephir_array_append(&bindTypes, &bindSkip, PH_SEPARATE, "phalcon/mvc/model.zep", 3129);
    +					zephir_array_append(&fields, &field, PH_SEPARATE, "phalcon/mvc/model.zep", 3131);
    +					zephir_array_append(&bindTypes, &bindSkip, PH_SEPARATE, "phalcon/mvc/model.zep", 3131);
     				}
     			}
     		}
    @@ -4762,7 +4771,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowInsert) {
     		zephir_check_call_status();
     		useExplicitIdentity = zephir_get_boolval(&_11$$18);
     		if (useExplicitIdentity) {
    -			zephir_array_append(&fields, identityField, PH_SEPARATE, "phalcon/mvc/model.zep", 3147);
    +			zephir_array_append(&fields, identityField, PH_SEPARATE, "phalcon/mvc/model.zep", 3149);
     		}
     		if (Z_TYPE_P(&columnMap) == IS_ARRAY) {
     			ZEPHIR_OBS_NVAR(&attributeField);
    @@ -4773,7 +4782,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowInsert) {
     				ZEPHIR_CONCAT_SVS(&_13$$21, "Identity column '", identityField, "' isn't part of the column map");
     				ZEPHIR_CALL_METHOD(NULL, &_12$$21, "__construct", &_4, 4, &_13$$21);
     				zephir_check_call_status();
    -				zephir_throw_exception_debug(&_12$$21, "phalcon/mvc/model.zep", 3155 TSRMLS_CC);
    +				zephir_throw_exception_debug(&_12$$21, "phalcon/mvc/model.zep", 3157 TSRMLS_CC);
     				ZEPHIR_MM_RESTORE();
     				return;
     			}
    @@ -4788,12 +4797,12 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowInsert) {
     			}
     			if (_14$$23) {
     				if (useExplicitIdentity) {
    -					zephir_array_append(&values, &defaultValue, PH_SEPARATE, "phalcon/mvc/model.zep", 3168);
    -					zephir_array_append(&bindTypes, &bindSkip, PH_SEPARATE, "phalcon/mvc/model.zep", 3168);
    +					zephir_array_append(&values, &defaultValue, PH_SEPARATE, "phalcon/mvc/model.zep", 3170);
    +					zephir_array_append(&bindTypes, &bindSkip, PH_SEPARATE, "phalcon/mvc/model.zep", 3170);
     				}
     			} else {
     				if (!(useExplicitIdentity)) {
    -					zephir_array_append(&fields, identityField, PH_SEPARATE, "phalcon/mvc/model.zep", 3176);
    +					zephir_array_append(&fields, identityField, PH_SEPARATE, "phalcon/mvc/model.zep", 3178);
     				}
     				ZEPHIR_OBS_NVAR(&bindType);
     				if (!(zephir_array_isset_fetch(&bindType, &bindDataTypes, identityField, 0 TSRMLS_CC))) {
    @@ -4803,17 +4812,17 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowInsert) {
     					ZEPHIR_CONCAT_SVS(&_16$$28, "Identity column '", identityField, "' isn\\'t part of the table columns");
     					ZEPHIR_CALL_METHOD(NULL, &_15$$28, "__construct", &_4, 4, &_16$$28);
     					zephir_check_call_status();
    -					zephir_throw_exception_debug(&_15$$28, "phalcon/mvc/model.zep", 3183 TSRMLS_CC);
    +					zephir_throw_exception_debug(&_15$$28, "phalcon/mvc/model.zep", 3185 TSRMLS_CC);
     					ZEPHIR_MM_RESTORE();
     					return;
     				}
    -				zephir_array_append(&values, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 3186);
    -				zephir_array_append(&bindTypes, &bindType, PH_SEPARATE, "phalcon/mvc/model.zep", 3186);
    +				zephir_array_append(&values, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 3188);
    +				zephir_array_append(&bindTypes, &bindType, PH_SEPARATE, "phalcon/mvc/model.zep", 3188);
     			}
     		} else {
     			if (useExplicitIdentity) {
    -				zephir_array_append(&values, &defaultValue, PH_SEPARATE, "phalcon/mvc/model.zep", 3190);
    -				zephir_array_append(&bindTypes, &bindSkip, PH_SEPARATE, "phalcon/mvc/model.zep", 3190);
    +				zephir_array_append(&values, &defaultValue, PH_SEPARATE, "phalcon/mvc/model.zep", 3192);
    +				zephir_array_append(&bindTypes, &bindSkip, PH_SEPARATE, "phalcon/mvc/model.zep", 3192);
     			}
     		}
     	}
    @@ -4970,7 +4979,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowUpdate) {
     		ZEPHIR_INIT_NVAR(&columnMap);
     		ZVAL_NULL(&columnMap);
     	}
    -	zephir_is_iterable(&nonPrimary, 0, "phalcon/mvc/model.zep", 3404);
    +	zephir_is_iterable(&nonPrimary, 0, "phalcon/mvc/model.zep", 3406);
     	ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&nonPrimary), _2)
     	{
     		ZEPHIR_INIT_NVAR(&field);
    @@ -4984,7 +4993,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowUpdate) {
     				ZEPHIR_CONCAT_SVS(&_4$$9, "Column '", &field, "' isn't part of the column map");
     				ZEPHIR_CALL_METHOD(NULL, &_3$$9, "__construct", &_5, 4, &_4$$9);
     				zephir_check_call_status();
    -				zephir_throw_exception_debug(&_3$$9, "phalcon/mvc/model.zep", 3297 TSRMLS_CC);
    +				zephir_throw_exception_debug(&_3$$9, "phalcon/mvc/model.zep", 3299 TSRMLS_CC);
     				ZEPHIR_MM_RESTORE();
     				return;
     			}
    @@ -5000,16 +5009,16 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowUpdate) {
     				ZEPHIR_CONCAT_SVS(&_7$$12, "Column '", &field, "' have not defined a bind data type");
     				ZEPHIR_CALL_METHOD(NULL, &_6$$12, "__construct", &_5, 4, &_7$$12);
     				zephir_check_call_status();
    -				zephir_throw_exception_debug(&_6$$12, "phalcon/mvc/model.zep", 3309 TSRMLS_CC);
    +				zephir_throw_exception_debug(&_6$$12, "phalcon/mvc/model.zep", 3311 TSRMLS_CC);
     				ZEPHIR_MM_RESTORE();
     				return;
     			}
     			ZEPHIR_OBS_NVAR(&value);
     			if (zephir_fetch_property_zval(&value, this_ptr, &attributeField, PH_SILENT_CC)) {
     				if (!(useDynamicUpdate)) {
    -					zephir_array_append(&fields, &field, PH_SEPARATE, "phalcon/mvc/model.zep", 3323);
    -					zephir_array_append(&values, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 3323);
    -					zephir_array_append(&bindTypes, &bindType, PH_SEPARATE, "phalcon/mvc/model.zep", 3324);
    +					zephir_array_append(&fields, &field, PH_SEPARATE, "phalcon/mvc/model.zep", 3325);
    +					zephir_array_append(&values, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 3325);
    +					zephir_array_append(&bindTypes, &bindType, PH_SEPARATE, "phalcon/mvc/model.zep", 3326);
     				} else {
     					ZEPHIR_OBS_NVAR(&snapshotValue);
     					if (!(zephir_array_isset_fetch(&snapshotValue, &snapshot, &attributeField, 0 TSRMLS_CC))) {
    @@ -5029,7 +5038,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowUpdate) {
     									ZEPHIR_CONCAT_SVS(&_9$$22, "Column '", &field, "' have not defined a data type");
     									ZEPHIR_CALL_METHOD(NULL, &_8$$22, "__construct", &_5, 4, &_9$$22);
     									zephir_check_call_status();
    -									zephir_throw_exception_debug(&_8$$22, "phalcon/mvc/model.zep", 3349 TSRMLS_CC);
    +									zephir_throw_exception_debug(&_8$$22, "phalcon/mvc/model.zep", 3351 TSRMLS_CC);
     									ZEPHIR_MM_RESTORE();
     									return;
     								}
    @@ -5059,17 +5068,17 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowUpdate) {
     						}
     					}
     					if (changed) {
    -						zephir_array_append(&fields, &field, PH_SEPARATE, "phalcon/mvc/model.zep", 3388);
    -						zephir_array_append(&values, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 3388);
    -						zephir_array_append(&bindTypes, &bindType, PH_SEPARATE, "phalcon/mvc/model.zep", 3389);
    +						zephir_array_append(&fields, &field, PH_SEPARATE, "phalcon/mvc/model.zep", 3390);
    +						zephir_array_append(&values, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 3390);
    +						zephir_array_append(&bindTypes, &bindType, PH_SEPARATE, "phalcon/mvc/model.zep", 3391);
     					}
     				}
     				zephir_array_update_zval(&newSnapshot, &attributeField, &value, PH_COPY | PH_SEPARATE);
     			} else {
     				zephir_array_update_zval(&newSnapshot, &attributeField, &__$null, PH_COPY | PH_SEPARATE);
    -				zephir_array_append(&fields, &field, PH_SEPARATE, "phalcon/mvc/model.zep", 3396);
    -				zephir_array_append(&values, &__$null, PH_SEPARATE, "phalcon/mvc/model.zep", 3396);
    -				zephir_array_append(&bindTypes, &bindSkip, PH_SEPARATE, "phalcon/mvc/model.zep", 3396);
    +				zephir_array_append(&fields, &field, PH_SEPARATE, "phalcon/mvc/model.zep", 3398);
    +				zephir_array_append(&values, &__$null, PH_SEPARATE, "phalcon/mvc/model.zep", 3398);
    +				zephir_array_append(&bindTypes, &bindSkip, PH_SEPARATE, "phalcon/mvc/model.zep", 3398);
     			}
     		}
     	} ZEND_HASH_FOREACH_END();
    @@ -5090,12 +5099,12 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowUpdate) {
     		ZEPHIR_CALL_METHOD(&primaryKeys, metaData, "getprimarykeyattributes", NULL, 0, this_ptr);
     		zephir_check_call_status();
     		if (!(zephir_fast_count_int(&primaryKeys TSRMLS_CC))) {
    -			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "A primary key must be defined in the model in order to perform the operation", "phalcon/mvc/model.zep", 3426);
    +			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "A primary key must be defined in the model in order to perform the operation", "phalcon/mvc/model.zep", 3428);
     			return;
     		}
     		ZEPHIR_INIT_NVAR(&uniqueParams);
     		array_init(&uniqueParams);
    -		zephir_is_iterable(&primaryKeys, 0, "phalcon/mvc/model.zep", 3451);
    +		zephir_is_iterable(&primaryKeys, 0, "phalcon/mvc/model.zep", 3453);
     		ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&primaryKeys), _15$$31)
     		{
     			ZEPHIR_INIT_NVAR(&field);
    @@ -5109,7 +5118,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowUpdate) {
     					ZEPHIR_CONCAT_SVS(&_17$$35, "Column '", &field, "' isn't part of the column map");
     					ZEPHIR_CALL_METHOD(NULL, &_16$$35, "__construct", &_5, 4, &_17$$35);
     					zephir_check_call_status();
    -					zephir_throw_exception_debug(&_16$$35, "phalcon/mvc/model.zep", 3437 TSRMLS_CC);
    +					zephir_throw_exception_debug(&_16$$35, "phalcon/mvc/model.zep", 3439 TSRMLS_CC);
     					ZEPHIR_MM_RESTORE();
     					return;
     				}
    @@ -5119,10 +5128,10 @@ PHP_METHOD(Phalcon_Mvc_Model, _doLowUpdate) {
     			ZEPHIR_OBS_NVAR(&value);
     			if (zephir_fetch_property_zval(&value, this_ptr, &attributeField, PH_SILENT_CC)) {
     				zephir_array_update_zval(&newSnapshot, &attributeField, &value, PH_COPY | PH_SEPARATE);
    -				zephir_array_append(&uniqueParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 3445);
    +				zephir_array_append(&uniqueParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 3447);
     			} else {
     				zephir_array_update_zval(&newSnapshot, &attributeField, &__$null, PH_COPY | PH_SEPARATE);
    -				zephir_array_append(&uniqueParams, &__$null, PH_SEPARATE, "phalcon/mvc/model.zep", 3448);
    +				zephir_array_append(&uniqueParams, &__$null, PH_SEPARATE, "phalcon/mvc/model.zep", 3450);
     			}
     		} ZEND_HASH_FOREACH_END();
     		ZEPHIR_INIT_NVAR(&field);
    @@ -5247,7 +5256,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _exists) {
     		array_init(&uniqueParams);
     		ZEPHIR_INIT_NVAR(&uniqueTypes);
     		array_init(&uniqueTypes);
    -		zephir_is_iterable(&primaryKeys, 0, "phalcon/mvc/model.zep", 3562);
    +		zephir_is_iterable(&primaryKeys, 0, "phalcon/mvc/model.zep", 3564);
     		ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&primaryKeys), _0$$3)
     		{
     			ZEPHIR_INIT_NVAR(&field);
    @@ -5261,7 +5270,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _exists) {
     					ZEPHIR_CONCAT_SVS(&_2$$9, "Column '", &field, "' isn't part of the column map");
     					ZEPHIR_CALL_METHOD(NULL, &_1$$9, "__construct", &_3, 4, &_2$$9);
     					zephir_check_call_status();
    -					zephir_throw_exception_debug(&_1$$9, "phalcon/mvc/model.zep", 3526 TSRMLS_CC);
    +					zephir_throw_exception_debug(&_1$$9, "phalcon/mvc/model.zep", 3528 TSRMLS_CC);
     					ZEPHIR_MM_RESTORE();
     					return;
     				}
    @@ -5279,9 +5288,9 @@ PHP_METHOD(Phalcon_Mvc_Model, _exists) {
     				if (_4$$11) {
     					numberEmpty++;
     				}
    -				zephir_array_append(&uniqueParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 3544);
    +				zephir_array_append(&uniqueParams, &value, PH_SEPARATE, "phalcon/mvc/model.zep", 3546);
     			} else {
    -				zephir_array_append(&uniqueParams, &__$null, PH_SEPARATE, "phalcon/mvc/model.zep", 3547);
    +				zephir_array_append(&uniqueParams, &__$null, PH_SEPARATE, "phalcon/mvc/model.zep", 3549);
     				numberEmpty++;
     			}
     			ZEPHIR_OBS_NVAR(&type);
    @@ -5292,16 +5301,16 @@ PHP_METHOD(Phalcon_Mvc_Model, _exists) {
     				ZEPHIR_CONCAT_SVS(&_6$$14, "Column '", &field, "' isn't part of the table columns");
     				ZEPHIR_CALL_METHOD(NULL, &_5$$14, "__construct", &_3, 4, &_6$$14);
     				zephir_check_call_status();
    -				zephir_throw_exception_debug(&_5$$14, "phalcon/mvc/model.zep", 3552 TSRMLS_CC);
    +				zephir_throw_exception_debug(&_5$$14, "phalcon/mvc/model.zep", 3554 TSRMLS_CC);
     				ZEPHIR_MM_RESTORE();
     				return;
     			}
    -			zephir_array_append(&uniqueTypes, &type, PH_SEPARATE, "phalcon/mvc/model.zep", 3555);
    +			zephir_array_append(&uniqueTypes, &type, PH_SEPARATE, "phalcon/mvc/model.zep", 3557);
     			ZEPHIR_CALL_METHOD(&_7$$7, connection, "escapeidentifier", &_8, 0, &field);
     			zephir_check_call_status();
     			ZEPHIR_INIT_LNVAR(_9$$7);
     			ZEPHIR_CONCAT_VS(&_9$$7, &_7$$7, " = ?");
    -			zephir_array_append(&wherePk, &_9$$7, PH_SEPARATE, "phalcon/mvc/model.zep", 3556);
    +			zephir_array_append(&wherePk, &_9$$7, PH_SEPARATE, "phalcon/mvc/model.zep", 3558);
     		} ZEND_HASH_FOREACH_END();
     		ZEPHIR_INIT_NVAR(&field);
     		if (numberPrimary == numberEmpty) {
    @@ -5349,7 +5358,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _exists) {
     	ZVAL_NULL(&_13);
     	ZEPHIR_CALL_METHOD(&num, connection, "fetchone", NULL, 0, &_12, &_13, &uniqueParams, &uniqueTypes);
     	zephir_check_call_status();
    -	zephir_array_fetch_string(&_14, &num, SL("rowcount"), PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 3612 TSRMLS_CC);
    +	zephir_array_fetch_string(&_14, &num, SL("rowcount"), PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 3614 TSRMLS_CC);
     	if (zephir_is_true(&_14)) {
     		ZEPHIR_INIT_ZVAL_NREF(_15$$22);
     		ZVAL_LONG(&_15$$22, 0);
    @@ -5521,7 +5530,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _groupResult) {
     		ZEPHIR_INIT_VAR(¶ms);
     		array_init(¶ms);
     		if (Z_TYPE_P(parameters) != IS_NULL) {
    -			zephir_array_append(¶ms, parameters, PH_SEPARATE, "phalcon/mvc/model.zep", 3686);
    +			zephir_array_append(¶ms, parameters, PH_SEPARATE, "phalcon/mvc/model.zep", 3688);
     		}
     	} else {
     		ZEPHIR_CPY_WRT(¶ms, parameters);
    @@ -5661,7 +5670,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _invokeFinder) {
     		ZEPHIR_CONCAT_SVS(&_4$$7, "The static method '", &method, "' requires one argument");
     		ZEPHIR_CALL_METHOD(NULL, &_3$$7, "__construct", NULL, 4, &_4$$7);
     		zephir_check_call_status();
    -		zephir_throw_exception_debug(&_3$$7, "phalcon/mvc/model.zep", 3798 TSRMLS_CC);
    +		zephir_throw_exception_debug(&_3$$7, "phalcon/mvc/model.zep", 3800 TSRMLS_CC);
     		ZEPHIR_MM_RESTORE();
     		return;
     	}
    @@ -5698,7 +5707,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _invokeFinder) {
     				ZEPHIR_CONCAT_SVS(&_8$$13, "Cannot resolve attribute '", &extraMethod, "' in the model");
     				ZEPHIR_CALL_METHOD(NULL, &_7$$13, "__construct", NULL, 4, &_8$$13);
     				zephir_check_call_status();
    -				zephir_throw_exception_debug(&_7$$13, "phalcon/mvc/model.zep", 3832 TSRMLS_CC);
    +				zephir_throw_exception_debug(&_7$$13, "phalcon/mvc/model.zep", 3834 TSRMLS_CC);
     				ZEPHIR_MM_RESTORE();
     				return;
     			}
    @@ -5872,7 +5881,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _preSave) {
     			ZEPHIR_CALL_METHOD(&emptyStringValues, metaData, "getemptystringattributes", NULL, 0, this_ptr);
     			zephir_check_call_status();
     			error = 0;
    -			zephir_is_iterable(¬Null, 0, "phalcon/mvc/model.zep", 4018);
    +			zephir_is_iterable(¬Null, 0, "phalcon/mvc/model.zep", 4020);
     			ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(¬Null), _7$$12)
     			{
     				ZEPHIR_INIT_NVAR(&field);
    @@ -5886,7 +5895,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _preSave) {
     						ZEPHIR_CONCAT_SVS(&_9$$19, "Column '", &field, "' isn't part of the column map");
     						ZEPHIR_CALL_METHOD(NULL, &_8$$19, "__construct", &_10, 4, &_9$$19);
     						zephir_check_call_status();
    -						zephir_throw_exception_debug(&_8$$19, "phalcon/mvc/model.zep", 3945 TSRMLS_CC);
    +						zephir_throw_exception_debug(&_8$$19, "phalcon/mvc/model.zep", 3947 TSRMLS_CC);
     						ZEPHIR_MM_RESTORE();
     						return;
     					}
    @@ -5910,7 +5919,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _preSave) {
     										if (_12$$27) {
     											_13$$27 = !(zephir_array_isset(&defaultValues, &field));
     											if (!(_13$$27)) {
    -												zephir_array_fetch(&_14$$27, &defaultValues, &field, PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 3976 TSRMLS_CC);
    +												zephir_array_fetch(&_14$$27, &defaultValues, &field, PH_NOISY | PH_READONLY, "phalcon/mvc/model.zep", 3978 TSRMLS_CC);
     												_13$$27 = !ZEPHIR_IS_IDENTICAL(&value, &_14$$27);
     											}
     											_12$$27 = _13$$27;
    @@ -6099,7 +6108,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _preSaveRelatedRecords) {
     	ZEPHIR_CALL_METHOD(&_1, this_ptr, "getmodelsmanager", NULL, 0);
     	zephir_check_call_status();
     	ZEPHIR_CPY_WRT(&manager, &_1);
    -	zephir_is_iterable(related, 0, "phalcon/mvc/model.zep", 4187);
    +	zephir_is_iterable(related, 0, "phalcon/mvc/model.zep", 4189);
     	ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(related), _3, _4, _2)
     	{
     		ZEPHIR_INIT_NVAR(&name);
    @@ -6125,7 +6134,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _preSaveRelatedRecords) {
     					}
     					ZEPHIR_CALL_METHOD(NULL, connection, "rollback", &_9, 0, &_8$$6);
     					zephir_check_call_status();
    -					ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "Only objects can be stored as part of belongs-to relations", "phalcon/mvc/model.zep", 4134);
    +					ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "Only objects can be stored as part of belongs-to relations", "phalcon/mvc/model.zep", 4136);
     					return;
     				}
     				ZEPHIR_CALL_METHOD(&columns, &relation, "getfields", &_10, 0);
    @@ -6142,7 +6151,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _preSaveRelatedRecords) {
     					}
     					ZEPHIR_CALL_METHOD(NULL, connection, "rollback", &_14, 0, &_13$$7);
     					zephir_check_call_status();
    -					ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "Not implemented", "phalcon/mvc/model.zep", 4143);
    +					ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "Not implemented", "phalcon/mvc/model.zep", 4145);
     					return;
     				}
     				ZEPHIR_CALL_METHOD(&_15$$5, &record, "save", NULL, 0);
    @@ -6150,7 +6159,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _preSaveRelatedRecords) {
     				if (!(zephir_is_true(&_15$$5))) {
     					ZEPHIR_CALL_METHOD(&_16$$8, &record, "getmessages", NULL, 0);
     					zephir_check_call_status();
    -					zephir_is_iterable(&_16$$8, 0, "phalcon/mvc/model.zep", 4174);
    +					zephir_is_iterable(&_16$$8, 0, "phalcon/mvc/model.zep", 4176);
     					ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&_16$$8), _17$$8)
     					{
     						ZEPHIR_INIT_NVAR(&message);
    @@ -6292,7 +6301,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _postSaveRelatedRecords) {
     	ZEPHIR_CALL_METHOD(&_0, this_ptr, "getmodelsmanager", NULL, 0);
     	zephir_check_call_status();
     	ZEPHIR_CPY_WRT(&manager, &_0);
    -	zephir_is_iterable(related, 0, "phalcon/mvc/model.zep", 4396);
    +	zephir_is_iterable(related, 0, "phalcon/mvc/model.zep", 4398);
     	ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(related), _2, _3, _1)
     	{
     		ZEPHIR_INIT_NVAR(&name);
    @@ -6324,7 +6333,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _postSaveRelatedRecords) {
     				}
     				ZEPHIR_CALL_METHOD(NULL, connection, "rollback", &_10, 0, &_9$$6);
     				zephir_check_call_status();
    -				ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "Only objects/arrays can be stored as part of has-many/has-one/has-many-to-many relations", "phalcon/mvc/model.zep", 4240);
    +				ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "Only objects/arrays can be stored as part of has-many/has-one/has-many-to-many relations", "phalcon/mvc/model.zep", 4242);
     				return;
     			}
     			ZEPHIR_CALL_METHOD(&columns, &relation, "getfields", &_11, 0);
    @@ -6341,7 +6350,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _postSaveRelatedRecords) {
     				}
     				ZEPHIR_CALL_METHOD(NULL, connection, "rollback", &_15, 0, &_14$$7);
     				zephir_check_call_status();
    -				ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "Not implemented", "phalcon/mvc/model.zep", 4249);
    +				ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_model_exception_ce, "Not implemented", "phalcon/mvc/model.zep", 4251);
     				return;
     			}
     			if (Z_TYPE_P(&record) == IS_OBJECT) {
    @@ -6366,7 +6375,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _postSaveRelatedRecords) {
     				ZEPHIR_CONCAT_SVS(&_19$$10, "The column '", &columns, "' needs to be present in the model");
     				ZEPHIR_CALL_METHOD(NULL, &_18$$10, "__construct", &_20, 4, &_19$$10);
     				zephir_check_call_status();
    -				zephir_throw_exception_debug(&_18$$10, "phalcon/mvc/model.zep", 4263 TSRMLS_CC);
    +				zephir_throw_exception_debug(&_18$$10, "phalcon/mvc/model.zep", 4265 TSRMLS_CC);
     				ZEPHIR_MM_RESTORE();
     				return;
     			}
    @@ -6381,7 +6390,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _postSaveRelatedRecords) {
     				ZEPHIR_CALL_METHOD(&intermediateReferencedFields, &relation, "getintermediatereferencedfields", &_25, 0);
     				zephir_check_call_status();
     			}
    -			zephir_is_iterable(&relatedRecords, 0, "phalcon/mvc/model.zep", 4382);
    +			zephir_is_iterable(&relatedRecords, 0, "phalcon/mvc/model.zep", 4384);
     			ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&relatedRecords), _26$$4)
     			{
     				ZEPHIR_INIT_NVAR(&recordAfter);
    @@ -6395,7 +6404,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _postSaveRelatedRecords) {
     				if (!(zephir_is_true(&_27$$12))) {
     					ZEPHIR_CALL_METHOD(&_28$$14, &recordAfter, "getmessages", NULL, 0);
     					zephir_check_call_status();
    -					zephir_is_iterable(&_28$$14, 0, "phalcon/mvc/model.zep", 4322);
    +					zephir_is_iterable(&_28$$14, 0, "phalcon/mvc/model.zep", 4324);
     					ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&_28$$14), _29$$14)
     					{
     						ZEPHIR_INIT_NVAR(&message);
    @@ -6434,7 +6443,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _postSaveRelatedRecords) {
     					if (!(zephir_is_true(&_35$$17))) {
     						ZEPHIR_CALL_METHOD(&_36$$18, &intermediateModel, "getmessages", NULL, 0);
     						zephir_check_call_status();
    -						zephir_is_iterable(&_36$$18, 0, "phalcon/mvc/model.zep", 4376);
    +						zephir_is_iterable(&_36$$18, 0, "phalcon/mvc/model.zep", 4378);
     						ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&_36$$18), _37$$18)
     						{
     							ZEPHIR_INIT_NVAR(&message);
    @@ -6477,7 +6486,7 @@ PHP_METHOD(Phalcon_Mvc_Model, _postSaveRelatedRecords) {
     				ZEPHIR_CONCAT_SVSVS(&_44$$22, "There are no defined relations for the model '", &className, "' using alias '", &name, "'");
     				ZEPHIR_CALL_METHOD(NULL, &_43$$22, "__construct", &_20, 4, &_44$$22);
     				zephir_check_call_status();
    -				zephir_throw_exception_debug(&_43$$22, "phalcon/mvc/model.zep", 4388 TSRMLS_CC);
    +				zephir_throw_exception_debug(&_43$$22, "phalcon/mvc/model.zep", 4390 TSRMLS_CC);
     				ZEPHIR_MM_RESTORE();
     				return;
     			}
    @@ -6536,7 +6545,7 @@ PHP_METHOD(Phalcon_Mvc_Model, allowEmptyStringValues) {
     
     	ZEPHIR_INIT_VAR(&keysAttributes);
     	array_init(&keysAttributes);
    -	zephir_is_iterable(&attributes, 0, "phalcon/mvc/model.zep", 4428);
    +	zephir_is_iterable(&attributes, 0, "phalcon/mvc/model.zep", 4430);
     	ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&attributes), _0)
     	{
     		ZEPHIR_INIT_NVAR(&attribute);
    @@ -7110,7 +7119,7 @@ PHP_METHOD(Phalcon_Mvc_Model, skipAttributesOnCreate) {
     
     	ZEPHIR_INIT_VAR(&keysAttributes);
     	array_init(&keysAttributes);
    -	zephir_is_iterable(&attributes, 0, "phalcon/mvc/model.zep", 4699);
    +	zephir_is_iterable(&attributes, 0, "phalcon/mvc/model.zep", 4701);
     	ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&attributes), _0)
     	{
     		ZEPHIR_INIT_NVAR(&attribute);
    @@ -7166,7 +7175,7 @@ PHP_METHOD(Phalcon_Mvc_Model, skipAttributesOnUpdate) {
     
     	ZEPHIR_INIT_VAR(&keysAttributes);
     	array_init(&keysAttributes);
    -	zephir_is_iterable(&attributes, 0, "phalcon/mvc/model.zep", 4730);
    +	zephir_is_iterable(&attributes, 0, "phalcon/mvc/model.zep", 4732);
     	ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&attributes), _0)
     	{
     		ZEPHIR_INIT_NVAR(&attribute);
    @@ -7378,7 +7387,7 @@ PHP_METHOD(Phalcon_Mvc_Model, caseInsensitiveColumnMap) {
     
     	ZEPHIR_INIT_VAR(&_0);
     	zephir_array_keys(&_0, columnMap TSRMLS_CC);
    -	zephir_is_iterable(&_0, 0, "phalcon/mvc/model.zep", 4861);
    +	zephir_is_iterable(&_0, 0, "phalcon/mvc/model.zep", 4863);
     	ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&_0), _1)
     	{
     		ZEPHIR_INIT_NVAR(&cmKey);
    diff --git a/ext/phalcon/mvc/model/criteria.zep.c b/ext/phalcon/mvc/model/criteria.zep.c
    index 8048550bc49..a97d52aa922 100644
    --- a/ext/phalcon/mvc/model/criteria.zep.c
    +++ b/ext/phalcon/mvc/model/criteria.zep.c
    @@ -1167,7 +1167,7 @@ PHP_METHOD(Phalcon_Mvc_Model_Criteria, limit) {
     
     
     	ZVAL_LONG(&_0, limit);
    -	ZEPHIR_CALL_FUNCTION(&_1, "abs", NULL, 189, &_0);
    +	ZEPHIR_CALL_FUNCTION(&_1, "abs", NULL, 190, &_0);
     	zephir_check_call_status();
     	limit = zephir_get_numberval(&_1);
     	if (UNEXPECTED(limit == 0)) {
    @@ -1175,7 +1175,7 @@ PHP_METHOD(Phalcon_Mvc_Model_Criteria, limit) {
     	}
     	if (zephir_is_numeric(offset)) {
     		ZVAL_LONG(&_2$$4, zephir_get_intval(offset));
    -		ZEPHIR_CALL_FUNCTION(offset, "abs", NULL, 189, &_2$$4);
    +		ZEPHIR_CALL_FUNCTION(offset, "abs", NULL, 190, &_2$$4);
     		zephir_check_call_status();
     		ZEPHIR_INIT_VAR(&_3$$4);
     		zephir_create_array(&_3$$4, 2, 0 TSRMLS_CC);
    diff --git a/ext/phalcon/mvc/model/query/builder.zep.c b/ext/phalcon/mvc/model/query/builder.zep.c
    index e847b933a42..010ff31676c 100644
    --- a/ext/phalcon/mvc/model/query/builder.zep.c
    +++ b/ext/phalcon/mvc/model/query/builder.zep.c
    @@ -1816,7 +1816,7 @@ PHP_METHOD(Phalcon_Mvc_Model_Query_Builder, limit) {
     
     
     	ZVAL_LONG(&_0, limit);
    -	ZEPHIR_CALL_FUNCTION(&_1, "abs", NULL, 189, &_0);
    +	ZEPHIR_CALL_FUNCTION(&_1, "abs", NULL, 190, &_0);
     	zephir_check_call_status();
     	limit = zephir_get_numberval(&_1);
     	if (UNEXPECTED(limit == 0)) {
    @@ -1827,7 +1827,7 @@ PHP_METHOD(Phalcon_Mvc_Model_Query_Builder, limit) {
     	zephir_update_property_zval(this_ptr, SL("_limit"), &_0);
     	if (zephir_is_numeric(offset)) {
     		ZVAL_LONG(&_2$$4, zephir_get_intval(offset));
    -		ZEPHIR_CALL_FUNCTION(&_3$$4, "abs", NULL, 189, &_2$$4);
    +		ZEPHIR_CALL_FUNCTION(&_3$$4, "abs", NULL, 190, &_2$$4);
     		zephir_check_call_status();
     		zephir_update_property_zval(this_ptr, SL("_offset"), &_3$$4);
     	}
    diff --git a/ext/phalcon/mvc/url.zep.h b/ext/phalcon/mvc/url.zep.h
    deleted file mode 100644
    index b029d839298..00000000000
    --- a/ext/phalcon/mvc/url.zep.h
    +++ /dev/null
    @@ -1,134 +0,0 @@
    -
    -extern zend_class_entry *phalcon_mvc_url_ce;
    -
    -ZEPHIR_INIT_CLASS(Phalcon_Mvc_Url);
    -
    -PHP_METHOD(Phalcon_Mvc_Url, get);
    -PHP_METHOD(Phalcon_Mvc_Url, getBasePath);
    -PHP_METHOD(Phalcon_Mvc_Url, getBaseUri);
    -PHP_METHOD(Phalcon_Mvc_Url, getDI);
    -PHP_METHOD(Phalcon_Mvc_Url, getStatic);
    -PHP_METHOD(Phalcon_Mvc_Url, getStaticBaseUri);
    -PHP_METHOD(Phalcon_Mvc_Url, setBasePath);
    -PHP_METHOD(Phalcon_Mvc_Url, setBaseUri);
    -PHP_METHOD(Phalcon_Mvc_Url, setDI);
    -PHP_METHOD(Phalcon_Mvc_Url, setStaticBaseUri);
    -PHP_METHOD(Phalcon_Mvc_Url, path);
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_get, 0, 0, IS_STRING, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_get, 0, 0, IS_STRING, NULL, 0)
    -#endif
    -	ZEND_ARG_INFO(0, uri)
    -	ZEND_ARG_INFO(0, args)
    -#if PHP_VERSION_ID >= 70200
    -	ZEND_ARG_TYPE_INFO(0, local, _IS_BOOL, 1)
    -#else
    -	ZEND_ARG_INFO(0, local)
    -#endif
    -	ZEND_ARG_INFO(0, baseUri)
    -ZEND_END_ARG_INFO()
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_getbasepath, 0, 0, IS_STRING, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_getbasepath, 0, 0, IS_STRING, NULL, 0)
    -#endif
    -ZEND_END_ARG_INFO()
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_getbaseuri, 0, 0, IS_STRING, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_getbaseuri, 0, 0, IS_STRING, NULL, 0)
    -#endif
    -ZEND_END_ARG_INFO()
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_mvc_url_getdi, 0, 0, Phalcon\\DiInterface, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_getdi, 0, 0, IS_OBJECT, "Phalcon\\DiInterface", 0)
    -#endif
    -ZEND_END_ARG_INFO()
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_getstatic, 0, 0, IS_STRING, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_getstatic, 0, 0, IS_STRING, NULL, 0)
    -#endif
    -	ZEND_ARG_INFO(0, uri)
    -ZEND_END_ARG_INFO()
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_getstaticbaseuri, 0, 0, IS_STRING, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_getstaticbaseuri, 0, 0, IS_STRING, NULL, 0)
    -#endif
    -ZEND_END_ARG_INFO()
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_mvc_url_setbasepath, 0, 1, Phalcon\\Mvc\\UrlInterface, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_setbasepath, 0, 1, IS_OBJECT, "Phalcon\\Mvc\\UrlInterface", 0)
    -#endif
    -#if PHP_VERSION_ID >= 70200
    -	ZEND_ARG_TYPE_INFO(0, basePath, IS_STRING, 0)
    -#else
    -	ZEND_ARG_INFO(0, basePath)
    -#endif
    -ZEND_END_ARG_INFO()
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_mvc_url_setbaseuri, 0, 1, Phalcon\\Mvc\\UrlInterface, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_setbaseuri, 0, 1, IS_OBJECT, "Phalcon\\Mvc\\UrlInterface", 0)
    -#endif
    -#if PHP_VERSION_ID >= 70200
    -	ZEND_ARG_TYPE_INFO(0, baseUri, IS_STRING, 0)
    -#else
    -	ZEND_ARG_INFO(0, baseUri)
    -#endif
    -ZEND_END_ARG_INFO()
    -
    -ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_mvc_url_setdi, 0, 0, 1)
    -	ZEND_ARG_OBJ_INFO(0, dependencyInjector, Phalcon\\DiInterface, 0)
    -ZEND_END_ARG_INFO()
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_mvc_url_setstaticbaseuri, 0, 1, Phalcon\\Mvc\\UrlInterface, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_setstaticbaseuri, 0, 1, IS_OBJECT, "Phalcon\\Mvc\\UrlInterface", 0)
    -#endif
    -#if PHP_VERSION_ID >= 70200
    -	ZEND_ARG_TYPE_INFO(0, staticBaseUri, IS_STRING, 0)
    -#else
    -	ZEND_ARG_INFO(0, staticBaseUri)
    -#endif
    -ZEND_END_ARG_INFO()
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_path, 0, 0, IS_STRING, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_url_path, 0, 0, IS_STRING, NULL, 0)
    -#endif
    -#if PHP_VERSION_ID >= 70200
    -	ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 1)
    -#else
    -	ZEND_ARG_INFO(0, path)
    -#endif
    -ZEND_END_ARG_INFO()
    -
    -ZEPHIR_INIT_FUNCS(phalcon_mvc_url_method_entry) {
    -	PHP_ME(Phalcon_Mvc_Url, get, arginfo_phalcon_mvc_url_get, ZEND_ACC_PUBLIC)
    -	PHP_ME(Phalcon_Mvc_Url, getBasePath, arginfo_phalcon_mvc_url_getbasepath, ZEND_ACC_PUBLIC)
    -	PHP_ME(Phalcon_Mvc_Url, getBaseUri, arginfo_phalcon_mvc_url_getbaseuri, ZEND_ACC_PUBLIC)
    -	PHP_ME(Phalcon_Mvc_Url, getDI, arginfo_phalcon_mvc_url_getdi, ZEND_ACC_PUBLIC)
    -	PHP_ME(Phalcon_Mvc_Url, getStatic, arginfo_phalcon_mvc_url_getstatic, ZEND_ACC_PUBLIC)
    -	PHP_ME(Phalcon_Mvc_Url, getStaticBaseUri, arginfo_phalcon_mvc_url_getstaticbaseuri, ZEND_ACC_PUBLIC)
    -	PHP_ME(Phalcon_Mvc_Url, setBasePath, arginfo_phalcon_mvc_url_setbasepath, ZEND_ACC_PUBLIC)
    -	PHP_ME(Phalcon_Mvc_Url, setBaseUri, arginfo_phalcon_mvc_url_setbaseuri, ZEND_ACC_PUBLIC)
    -	PHP_ME(Phalcon_Mvc_Url, setDI, arginfo_phalcon_mvc_url_setdi, ZEND_ACC_PUBLIC)
    -	PHP_ME(Phalcon_Mvc_Url, setStaticBaseUri, arginfo_phalcon_mvc_url_setstaticbaseuri, ZEND_ACC_PUBLIC)
    -	PHP_ME(Phalcon_Mvc_Url, path, arginfo_phalcon_mvc_url_path, ZEND_ACC_PUBLIC)
    -	PHP_FE_END
    -};
    diff --git a/ext/phalcon/mvc/url/exception.zep.h b/ext/phalcon/mvc/url/exception.zep.h
    deleted file mode 100644
    index 127c0e8eb07..00000000000
    --- a/ext/phalcon/mvc/url/exception.zep.h
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -
    -extern zend_class_entry *phalcon_mvc_url_exception_ce;
    -
    -ZEPHIR_INIT_CLASS(Phalcon_Mvc_Url_Exception);
    -
    diff --git a/ext/phalcon/mvc/url/utils.h b/ext/phalcon/mvc/url/utils.h
    deleted file mode 100644
    index 210ce6c23c2..00000000000
    --- a/ext/phalcon/mvc/url/utils.h
    +++ /dev/null
    @@ -1,30 +0,0 @@
    -
    -/*
    -  +------------------------------------------------------------------------+
    -  | Phalcon Framework                                                      |
    -  +------------------------------------------------------------------------+
    -  | Copyright (c) 2011-2014 Phalcon Team (http://www.phalconphp.com)       |
    -  +------------------------------------------------------------------------+
    -  | This source file is subject to the New BSD License that is bundled     |
    -  | with this package in the file docs/LICENSE.txt.                        |
    -  |                                                                        |
    -  | If you did not receive a copy of the license and are unable to         |
    -  | obtain it through the world-wide-web, please send an email             |
    -  | to license@phalconphp.com so we can send you a copy immediately.       |
    -  +------------------------------------------------------------------------+
    -  | Authors: Andres Gutierrez                       |
    -  |          Eduar Carvajal                          |
    -  +------------------------------------------------------------------------+
    -*/
    -
    -#ifndef PHALCON_MVC_URL_UTILS_H
    -#define PHALCON_MVC_URL_UTILS_H
    -
    -#include 
    -
    -/* Extract named parameters */
    -void phalcon_get_uri(zval *return_value, zval *path);
    -void phalcon_extract_named_params(zval *return_value, zval *str, zval *matches);
    -void phalcon_replace_paths(zval *return_value, zval *pattern, zval *paths, zval *uri TSRMLS_DC);
    -
    -#endif /* PHALCON_MVC_URL_UTILS_H */
    diff --git a/ext/phalcon/mvc/urlinterface.zep.h b/ext/phalcon/mvc/urlinterface.zep.h
    deleted file mode 100644
    index d378d163fc1..00000000000
    --- a/ext/phalcon/mvc/urlinterface.zep.h
    +++ /dev/null
    @@ -1,78 +0,0 @@
    -
    -extern zend_class_entry *phalcon_mvc_urlinterface_ce;
    -
    -ZEPHIR_INIT_CLASS(Phalcon_Mvc_UrlInterface);
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_urlinterface_get, 0, 0, IS_STRING, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_urlinterface_get, 0, 0, IS_STRING, NULL, 0)
    -#endif
    -	ZEND_ARG_INFO(0, uri)
    -	ZEND_ARG_INFO(0, args)
    -#if PHP_VERSION_ID >= 70200
    -	ZEND_ARG_TYPE_INFO(0, local, _IS_BOOL, 1)
    -#else
    -	ZEND_ARG_INFO(0, local)
    -#endif
    -ZEND_END_ARG_INFO()
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_urlinterface_getbasepath, 0, 0, IS_STRING, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_urlinterface_getbasepath, 0, 0, IS_STRING, NULL, 0)
    -#endif
    -ZEND_END_ARG_INFO()
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_urlinterface_getbaseuri, 0, 0, IS_STRING, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_urlinterface_getbaseuri, 0, 0, IS_STRING, NULL, 0)
    -#endif
    -ZEND_END_ARG_INFO()
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_mvc_urlinterface_setbasepath, 0, 1, Phalcon\\Mvc\\UrlInterface, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_urlinterface_setbasepath, 0, 1, IS_OBJECT, "Phalcon\\Mvc\\UrlInterface", 0)
    -#endif
    -#if PHP_VERSION_ID >= 70200
    -	ZEND_ARG_TYPE_INFO(0, basePath, IS_STRING, 0)
    -#else
    -	ZEND_ARG_INFO(0, basePath)
    -#endif
    -ZEND_END_ARG_INFO()
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_mvc_urlinterface_setbaseuri, 0, 1, Phalcon\\Mvc\\UrlInterface, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_urlinterface_setbaseuri, 0, 1, IS_OBJECT, "Phalcon\\Mvc\\UrlInterface", 0)
    -#endif
    -#if PHP_VERSION_ID >= 70200
    -	ZEND_ARG_TYPE_INFO(0, baseUri, IS_STRING, 0)
    -#else
    -	ZEND_ARG_INFO(0, baseUri)
    -#endif
    -ZEND_END_ARG_INFO()
    -
    -#if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_urlinterface_path, 0, 0, IS_STRING, 0)
    -#else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_mvc_urlinterface_path, 0, 0, IS_STRING, NULL, 0)
    -#endif
    -#if PHP_VERSION_ID >= 70200
    -	ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 1)
    -#else
    -	ZEND_ARG_INFO(0, path)
    -#endif
    -ZEND_END_ARG_INFO()
    -
    -ZEPHIR_INIT_FUNCS(phalcon_mvc_urlinterface_method_entry) {
    -	PHP_ABSTRACT_ME(Phalcon_Mvc_UrlInterface, get, arginfo_phalcon_mvc_urlinterface_get)
    -	PHP_ABSTRACT_ME(Phalcon_Mvc_UrlInterface, getBasePath, arginfo_phalcon_mvc_urlinterface_getbasepath)
    -	PHP_ABSTRACT_ME(Phalcon_Mvc_UrlInterface, getBaseUri, arginfo_phalcon_mvc_urlinterface_getbaseuri)
    -	PHP_ABSTRACT_ME(Phalcon_Mvc_UrlInterface, setBasePath, arginfo_phalcon_mvc_urlinterface_setbasepath)
    -	PHP_ABSTRACT_ME(Phalcon_Mvc_UrlInterface, setBaseUri, arginfo_phalcon_mvc_urlinterface_setbaseuri)
    -	PHP_ABSTRACT_ME(Phalcon_Mvc_UrlInterface, path, arginfo_phalcon_mvc_urlinterface_path)
    -	PHP_FE_END
    -};
    diff --git a/ext/phalcon/mvc/view.zep.c b/ext/phalcon/mvc/view.zep.c
    index eb42f1b22bc..765f343e971 100644
    --- a/ext/phalcon/mvc/view.zep.c
    +++ b/ext/phalcon/mvc/view.zep.c
    @@ -953,7 +953,7 @@ PHP_METHOD(Phalcon_Mvc_View, _loadTemplateEngines) {
     		if (ZEPHIR_IS_EMPTY(®isteredEngines)) {
     			ZEPHIR_INIT_VAR(&_1$$4);
     			object_init_ex(&_1$$4, phalcon_mvc_view_engine_php_ce);
    -			ZEPHIR_CALL_METHOD(NULL, &_1$$4, "__construct", NULL, 379, this_ptr, &dependencyInjector);
    +			ZEPHIR_CALL_METHOD(NULL, &_1$$4, "__construct", NULL, 378, this_ptr, &dependencyInjector);
     			zephir_check_call_status();
     			zephir_array_update_string(&engines, SL(".phtml"), &_1$$4, PH_COPY | PH_SEPARATE);
     		} else {
    @@ -1089,7 +1089,7 @@ PHP_METHOD(Phalcon_Mvc_View, _engineRender) {
     	{
     		ZEPHIR_INIT_NVAR(&viewsDir);
     		ZVAL_COPY(&viewsDir, _2);
    -		ZEPHIR_CALL_METHOD(&_3$$3, this_ptr, "_isabsolutepath", &_4, 380, &viewPath);
    +		ZEPHIR_CALL_METHOD(&_3$$3, this_ptr, "_isabsolutepath", &_4, 379, &viewPath);
     		zephir_check_call_status();
     		if (!(zephir_is_true(&_3$$3))) {
     			ZEPHIR_INIT_NVAR(&viewsDirPath);
    diff --git a/ext/phalcon/mvc/view/engine/php.zep.c b/ext/phalcon/mvc/view/engine/php.zep.c
    index d36db57aee1..d77da60afbf 100644
    --- a/ext/phalcon/mvc/view/engine/php.zep.c
    +++ b/ext/phalcon/mvc/view/engine/php.zep.c
    @@ -84,7 +84,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Php, render) {
     
     
     	if (mustClean == 1) {
    -		ZEPHIR_CALL_FUNCTION(NULL, "ob_clean", NULL, 381);
    +		ZEPHIR_CALL_FUNCTION(NULL, "ob_clean", NULL, 380);
     		zephir_check_call_status();
     	}
     	if (Z_TYPE_P(params) == IS_ARRAY) {
    diff --git a/ext/phalcon/mvc/view/engine/volt.zep.c b/ext/phalcon/mvc/view/engine/volt.zep.c
    index 0182ef2ab99..d4d98c2f6c0 100644
    --- a/ext/phalcon/mvc/view/engine/volt.zep.c
    +++ b/ext/phalcon/mvc/view/engine/volt.zep.c
    @@ -17,8 +17,8 @@
     #include "kernel/exception.h"
     #include "kernel/memory.h"
     #include "kernel/fcall.h"
    -#include "kernel/require.h"
     #include "kernel/operators.h"
    +#include "kernel/require.h"
     #include "kernel/string.h"
     #include "kernel/array.h"
     #include "kernel/concat.h"
    @@ -108,18 +108,18 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, getCompiler) {
     		ZEPHIR_INIT_NVAR(&compiler);
     		object_init_ex(&compiler, phalcon_mvc_view_engine_volt_compiler_ce);
     		zephir_read_property(&_0$$3, this_ptr, SL("_view"), PH_NOISY_CC | PH_READONLY);
    -		ZEPHIR_CALL_METHOD(NULL, &compiler, "__construct", NULL, 382, &_0$$3);
    +		ZEPHIR_CALL_METHOD(NULL, &compiler, "__construct", NULL, 381, &_0$$3);
     		zephir_check_call_status();
     		zephir_read_property(&_1$$3, this_ptr, SL("_dependencyInjector"), PH_NOISY_CC | PH_READONLY);
     		ZEPHIR_CPY_WRT(&dependencyInjector, &_1$$3);
     		if (Z_TYPE_P(&dependencyInjector) == IS_OBJECT) {
    -			ZEPHIR_CALL_METHOD(NULL, &compiler, "setdi", NULL, 383, &dependencyInjector);
    +			ZEPHIR_CALL_METHOD(NULL, &compiler, "setdi", NULL, 382, &dependencyInjector);
     			zephir_check_call_status();
     		}
     		ZEPHIR_OBS_VAR(&options);
     		zephir_read_property(&options, this_ptr, SL("_options"), PH_NOISY_CC);
     		if (Z_TYPE_P(&options) == IS_ARRAY) {
    -			ZEPHIR_CALL_METHOD(NULL, &compiler, "setoptions", NULL, 384, &options);
    +			ZEPHIR_CALL_METHOD(NULL, &compiler, "setoptions", NULL, 383, &options);
     			zephir_check_call_status();
     		}
     		zephir_update_property_zval(this_ptr, SL("_compiler"), &compiler);
    @@ -133,11 +133,11 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, getCompiler) {
      */
     PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, render) {
     
    -	zend_string *_2$$4;
    -	zend_ulong _1$$4;
    +	zend_string *_6$$8;
    +	zend_ulong _5$$8;
     	zend_long ZEPHIR_LAST_CALL_STATUS;
     	zend_bool mustClean;
    -	zval *templatePath_param = NULL, *params, params_sub, *mustClean_param = NULL, compiler, compiledTemplatePath, key, value, *_0$$4, _3$$5, _4$$6, _5$$6;
    +	zval *templatePath_param = NULL, *params, params_sub, *mustClean_param = NULL, compiler, compiledTemplatePath, eventsManager, key, value, _0$$4, _1$$4, _2$$6, _3$$6, *_4$$8, _7$$9, _8$$10, _9$$10;
     	zval templatePath;
     	zval *this_ptr = getThis();
     
    @@ -145,11 +145,16 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, render) {
     	ZVAL_UNDEF(¶ms_sub);
     	ZVAL_UNDEF(&compiler);
     	ZVAL_UNDEF(&compiledTemplatePath);
    +	ZVAL_UNDEF(&eventsManager);
     	ZVAL_UNDEF(&key);
     	ZVAL_UNDEF(&value);
    -	ZVAL_UNDEF(&_3$$5);
    -	ZVAL_UNDEF(&_4$$6);
    -	ZVAL_UNDEF(&_5$$6);
    +	ZVAL_UNDEF(&_0$$4);
    +	ZVAL_UNDEF(&_1$$4);
    +	ZVAL_UNDEF(&_2$$6);
    +	ZVAL_UNDEF(&_3$$6);
    +	ZVAL_UNDEF(&_7$$9);
    +	ZVAL_UNDEF(&_8$$10);
    +	ZVAL_UNDEF(&_9$$10);
     
     	ZEPHIR_MM_GROW();
     	zephir_fetch_params(1, 2, 1, &templatePath_param, ¶ms, &mustClean_param);
    @@ -172,29 +177,49 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, render) {
     
     
     	if (mustClean) {
    -		ZEPHIR_CALL_FUNCTION(NULL, "ob_clean", NULL, 381);
    +		ZEPHIR_CALL_FUNCTION(NULL, "ob_clean", NULL, 380);
     		zephir_check_call_status();
     	}
     	ZEPHIR_CALL_METHOD(&compiler, this_ptr, "getcompiler", NULL, 0);
     	zephir_check_call_status();
    +	ZEPHIR_OBS_VAR(&eventsManager);
    +	zephir_read_property(&eventsManager, this_ptr, SL("_eventsManager"), PH_NOISY_CC);
    +	if (Z_TYPE_P(&eventsManager) == IS_OBJECT) {
    +		ZEPHIR_INIT_VAR(&_1$$4);
    +		ZVAL_STRING(&_1$$4, "view:beforeCompile");
    +		ZEPHIR_CALL_METHOD(&_0$$4, &eventsManager, "fire", NULL, 0, &_1$$4, this_ptr);
    +		zephir_check_call_status();
    +		if (ZEPHIR_IS_FALSE_IDENTICAL(&_0$$4)) {
    +			RETURN_MM_NULL();
    +		}
    +	}
     	ZEPHIR_CALL_METHOD(NULL, &compiler, "compile", NULL, 0, &templatePath);
     	zephir_check_call_status();
    +	if (Z_TYPE_P(&eventsManager) == IS_OBJECT) {
    +		ZEPHIR_INIT_VAR(&_3$$6);
    +		ZVAL_STRING(&_3$$6, "view:afterCompile");
    +		ZEPHIR_CALL_METHOD(&_2$$6, &eventsManager, "fire", NULL, 0, &_3$$6, this_ptr);
    +		zephir_check_call_status();
    +		if (ZEPHIR_IS_FALSE_IDENTICAL(&_2$$6)) {
    +			RETURN_MM_NULL();
    +		}
    +	}
     	ZEPHIR_CALL_METHOD(&compiledTemplatePath, &compiler, "getcompiledtemplatepath", NULL, 0);
     	zephir_check_call_status();
     	if (Z_TYPE_P(params) == IS_ARRAY) {
    -		zephir_is_iterable(params, 0, "phalcon/mvc/view/engine/volt.zep", 107);
    -		ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(params), _1$$4, _2$$4, _0$$4)
    +		zephir_is_iterable(params, 0, "phalcon/mvc/view/engine/volt.zep", 120);
    +		ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(params), _5$$8, _6$$8, _4$$8)
     		{
     			ZEPHIR_INIT_NVAR(&key);
    -			if (_2$$4 != NULL) { 
    -				ZVAL_STR_COPY(&key, _2$$4);
    +			if (_6$$8 != NULL) { 
    +				ZVAL_STR_COPY(&key, _6$$8);
     			} else {
    -				ZVAL_LONG(&key, _1$$4);
    +				ZVAL_LONG(&key, _5$$8);
     			}
     			ZEPHIR_INIT_NVAR(&value);
    -			ZVAL_COPY(&value, _0$$4);
    -			ZEPHIR_CPY_WRT(&_3$$5, &value);
    -			if (zephir_set_symbol(&key, &_3$$5 TSRMLS_CC) == FAILURE) {
    +			ZVAL_COPY(&value, _4$$8);
    +			ZEPHIR_CPY_WRT(&_7$$9, &value);
    +			if (zephir_set_symbol(&key, &_7$$9 TSRMLS_CC) == FAILURE) {
     				return;
     			}
     		} ZEND_HASH_FOREACH_END();
    @@ -205,10 +230,10 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, render) {
     		RETURN_MM_NULL();
     	}
     	if (mustClean) {
    -		zephir_read_property(&_4$$6, this_ptr, SL("_view"), PH_NOISY_CC | PH_READONLY);
    -		ZEPHIR_CALL_FUNCTION(&_5$$6, "ob_get_contents", NULL, 116);
    +		zephir_read_property(&_8$$10, this_ptr, SL("_view"), PH_NOISY_CC | PH_READONLY);
    +		ZEPHIR_CALL_FUNCTION(&_9$$10, "ob_get_contents", NULL, 116);
     		zephir_check_call_status();
    -		ZEPHIR_CALL_METHOD(NULL, &_4$$6, "setcontent", NULL, 0, &_5$$6);
    +		ZEPHIR_CALL_METHOD(NULL, &_8$$10, "setcontent", NULL, 0, &_9$$10);
     		zephir_check_call_status();
     	}
     	ZEPHIR_MM_RESTORE();
    @@ -272,7 +297,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, isIncluded) {
     	}
     	if (Z_TYPE_P(haystack) == IS_STRING) {
     		if ((zephir_function_exists_ex(SL("mb_strpos") TSRMLS_CC) == SUCCESS)) {
    -			ZEPHIR_CALL_FUNCTION(&_0$$5, "mb_strpos", NULL, 385, haystack, needle);
    +			ZEPHIR_CALL_FUNCTION(&_0$$5, "mb_strpos", NULL, 384, haystack, needle);
     			zephir_check_call_status();
     			RETURN_MM_BOOL(!ZEPHIR_IS_FALSE_IDENTICAL(&_0$$5));
     		}
    @@ -280,7 +305,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, isIncluded) {
     		zephir_fast_strpos(&_1$$4, haystack, needle, 0 );
     		RETURN_MM_BOOL(!ZEPHIR_IS_FALSE_IDENTICAL(&_1$$4));
     	}
    -	ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_view_exception_ce, "Invalid haystack", "phalcon/mvc/view/engine/volt.zep", 149);
    +	ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_view_exception_ce, "Invalid haystack", "phalcon/mvc/view/engine/volt.zep", 162);
     	return;
     
     }
    @@ -331,7 +356,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, convertEncoding) {
     		_0 = ZEPHIR_IS_STRING(&to, "utf8");
     	}
     	if (_0) {
    -		ZEPHIR_RETURN_CALL_FUNCTION("utf8_encode", NULL, 386, &text);
    +		ZEPHIR_RETURN_CALL_FUNCTION("utf8_encode", NULL, 385, &text);
     		zephir_check_call_status();
     		RETURN_MM();
     	}
    @@ -340,12 +365,12 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, convertEncoding) {
     		_1 = ZEPHIR_IS_STRING(&from, "utf8");
     	}
     	if (_1) {
    -		ZEPHIR_RETURN_CALL_FUNCTION("utf8_decode", NULL, 191, &text);
    +		ZEPHIR_RETURN_CALL_FUNCTION("utf8_decode", NULL, 192, &text);
     		zephir_check_call_status();
     		RETURN_MM();
     	}
     	if ((zephir_function_exists_ex(SL("mb_convert_encoding") TSRMLS_CC) == SUCCESS)) {
    -		ZEPHIR_RETURN_CALL_FUNCTION("mb_convert_encoding", NULL, 176, &text, &from, &to);
    +		ZEPHIR_RETURN_CALL_FUNCTION("mb_convert_encoding", NULL, 177, &text, &from, &to);
     		zephir_check_call_status();
     		RETURN_MM();
     	}
    @@ -354,7 +379,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, convertEncoding) {
     		zephir_check_call_status();
     		RETURN_MM();
     	}
    -	ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_view_exception_ce, "Any of 'mbstring' or 'iconv' is required to perform the charset conversion", "phalcon/mvc/view/engine/volt.zep", 188);
    +	ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_view_exception_ce, "Any of 'mbstring' or 'iconv' is required to perform the charset conversion", "phalcon/mvc/view/engine/volt.zep", 201);
     	return;
     
     }
    @@ -422,7 +447,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, slice) {
     			if (_1$$5) {
     				ZEPHIR_CALL_METHOD(&_2$$6, value, "current", &_3, 0);
     				zephir_check_call_status();
    -				zephir_array_append(&slice, &_2$$6, PH_SEPARATE, "phalcon/mvc/view/engine/volt.zep", 214);
    +				zephir_array_append(&slice, &_2$$6, PH_SEPARATE, "phalcon/mvc/view/engine/volt.zep", 227);
     			}
     			ZEPHIR_CALL_METHOD(NULL, value, "next", &_4, 0);
     			zephir_check_call_status();
    @@ -438,7 +463,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, slice) {
     	}
     	if (Z_TYPE_P(value) == IS_ARRAY) {
     		ZVAL_LONG(&_5$$9, start);
    -		ZEPHIR_RETURN_CALL_FUNCTION("array_slice", NULL, 387, value, &_5$$9, &length);
    +		ZEPHIR_RETURN_CALL_FUNCTION("array_slice", NULL, 386, value, &_5$$9, &length);
     		zephir_check_call_status();
     		RETURN_MM();
     	}
    @@ -484,7 +509,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, sort) {
     
     
     	ZEPHIR_MAKE_REF(&value);
    -	ZEPHIR_CALL_FUNCTION(NULL, "asort", NULL, 388, &value);
    +	ZEPHIR_CALL_FUNCTION(NULL, "asort", NULL, 387, &value);
     	ZEPHIR_UNREF(&value);
     	zephir_check_call_status();
     	RETURN_CTOR(&value);
    @@ -539,7 +564,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt, callMacro) {
     		ZEPHIR_CONCAT_SVS(&_2$$3, "Macro '", &name, "' does not exist");
     		ZEPHIR_CALL_METHOD(NULL, &_1$$3, "__construct", NULL, 4, &_2$$3);
     		zephir_check_call_status();
    -		zephir_throw_exception_debug(&_1$$3, "phalcon/mvc/view/engine/volt.zep", 278 TSRMLS_CC);
    +		zephir_throw_exception_debug(&_1$$3, "phalcon/mvc/view/engine/volt.zep", 291 TSRMLS_CC);
     		ZEPHIR_MM_RESTORE();
     		return;
     	}
    diff --git a/ext/phalcon/mvc/view/engine/volt/compiler.zep.c b/ext/phalcon/mvc/view/engine/volt/compiler.zep.c
    index 4785bfb7fe9..eaa38a989ec 100644
    --- a/ext/phalcon/mvc/view/engine/volt/compiler.zep.c
    +++ b/ext/phalcon/mvc/view/engine/volt/compiler.zep.c
    @@ -629,7 +629,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, attributeReader) {
     			}
     		}
     	} else {
    -		ZEPHIR_CALL_METHOD(&leftCode, this_ptr, "expression", NULL, 389, &left);
    +		ZEPHIR_CALL_METHOD(&leftCode, this_ptr, "expression", NULL, 388, &left);
     		zephir_check_call_status();
     		ZEPHIR_OBS_VAR(&leftType);
     		zephir_array_fetch_string(&leftType, &left, SL("type"), PH_NOISY, "phalcon/mvc/view/engine/volt/compiler.zep", 316 TSRMLS_CC);
    @@ -651,7 +651,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, attributeReader) {
     		zephir_array_fetch_string(&_9$$11, &right, SL("value"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 329 TSRMLS_CC);
     		zephir_concat_self(&exprCode, &_9$$11 TSRMLS_CC);
     	} else {
    -		ZEPHIR_CALL_METHOD(&_10$$12, this_ptr, "expression", NULL, 389, &right);
    +		ZEPHIR_CALL_METHOD(&_10$$12, this_ptr, "expression", NULL, 388, &right);
     		zephir_check_call_status();
     		zephir_concat_self(&exprCode, &_10$$12 TSRMLS_CC);
     	}
    @@ -711,7 +711,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, functionCall) {
     	ZVAL_NULL(&funcArguments);
     	ZEPHIR_OBS_NVAR(&funcArguments);
     	if (zephir_array_isset_string_fetch(&funcArguments, &expr, SL("arguments"), 0)) {
    -		ZEPHIR_CALL_METHOD(&arguments, this_ptr, "expression", NULL, 389, &funcArguments);
    +		ZEPHIR_CALL_METHOD(&arguments, this_ptr, "expression", NULL, 388, &funcArguments);
     		zephir_check_call_status();
     	} else {
     		ZEPHIR_INIT_NVAR(&arguments);
    @@ -734,7 +734,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, functionCall) {
     			zephir_array_fast_append(&_0$$6, &funcArguments);
     			ZEPHIR_INIT_VAR(&_1$$6);
     			ZVAL_STRING(&_1$$6, "compileFunction");
    -			ZEPHIR_CALL_METHOD(&code, this_ptr, "fireextensionevent", NULL, 390, &_1$$6, &_0$$6);
    +			ZEPHIR_CALL_METHOD(&code, this_ptr, "fireextensionevent", NULL, 389, &_1$$6, &_0$$6);
     			zephir_check_call_status();
     			if (Z_TYPE_P(&code) == IS_STRING) {
     				RETURN_CCTOR(&code);
    @@ -766,7 +766,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, functionCall) {
     				zephir_array_fetch_string(&_5$$9, &expr, SL("line"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 406 TSRMLS_CC);
     				ZEPHIR_INIT_VAR(&_6$$9);
     				ZEPHIR_CONCAT_SVSVSV(&_6$$9, "Invalid definition for user function '", &name, "' in ", &_4$$9, " on line ", &_5$$9);
    -				ZEPHIR_CALL_METHOD(NULL, &_3$$9, "__construct", NULL, 391, &_6$$9);
    +				ZEPHIR_CALL_METHOD(NULL, &_3$$9, "__construct", NULL, 390, &_6$$9);
     				zephir_check_call_status();
     				zephir_throw_exception_debug(&_3$$9, "phalcon/mvc/view/engine/volt/compiler.zep", 406 TSRMLS_CC);
     				ZEPHIR_MM_RESTORE();
    @@ -795,7 +795,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, functionCall) {
     					ZEPHIR_OBS_VAR(&exprLevel);
     					zephir_read_property(&exprLevel, this_ptr, SL("_exprLevel"), PH_NOISY_CC);
     					if (Z_TYPE_P(&block) == IS_ARRAY) {
    -						ZEPHIR_CALL_METHOD(&code, this_ptr, "_statementlistorextends", NULL, 392, &block);
    +						ZEPHIR_CALL_METHOD(&code, this_ptr, "_statementlistorextends", NULL, 391, &block);
     						zephir_check_call_status();
     						if (ZEPHIR_IS_LONG(&exprLevel, 1)) {
     							ZEPHIR_CPY_WRT(&escapedCode, &code);
    @@ -889,7 +889,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, functionCall) {
     		ZEPHIR_CONCAT_SVSVS(return_value, "$this->callMacro('", &name, "', [", &arguments, "])");
     		RETURN_MM();
     	}
    -	ZEPHIR_CALL_METHOD(&_9, this_ptr, "expression", NULL, 389, &nameExpr);
    +	ZEPHIR_CALL_METHOD(&_9, this_ptr, "expression", NULL, 388, &nameExpr);
     	zephir_check_call_status();
     	ZEPHIR_CONCAT_VSVS(return_value, &_9, "(", &arguments, ")");
     	RETURN_MM();
    @@ -964,28 +964,28 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, resolveTest) {
     		if (zephir_array_isset_string_fetch(&name, &testName, SL("value"), 0)) {
     			if (ZEPHIR_IS_STRING(&name, "divisibleby")) {
     				zephir_array_fetch_string(&_1$$12, &test, SL("arguments"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 677 TSRMLS_CC);
    -				ZEPHIR_CALL_METHOD(&_0$$12, this_ptr, "expression", NULL, 389, &_1$$12);
    +				ZEPHIR_CALL_METHOD(&_0$$12, this_ptr, "expression", NULL, 388, &_1$$12);
     				zephir_check_call_status();
     				ZEPHIR_CONCAT_SVSVS(return_value, "(((", &left, ") % (", &_0$$12, ")) == 0)");
     				RETURN_MM();
     			}
     			if (ZEPHIR_IS_STRING(&name, "sameas")) {
     				zephir_array_fetch_string(&_3$$13, &test, SL("arguments"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 684 TSRMLS_CC);
    -				ZEPHIR_CALL_METHOD(&_2$$13, this_ptr, "expression", NULL, 389, &_3$$13);
    +				ZEPHIR_CALL_METHOD(&_2$$13, this_ptr, "expression", NULL, 388, &_3$$13);
     				zephir_check_call_status();
     				ZEPHIR_CONCAT_SVSVS(return_value, "(", &left, ") === (", &_2$$13, ")");
     				RETURN_MM();
     			}
     			if (ZEPHIR_IS_STRING(&name, "type")) {
     				zephir_array_fetch_string(&_5$$14, &test, SL("arguments"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 691 TSRMLS_CC);
    -				ZEPHIR_CALL_METHOD(&_4$$14, this_ptr, "expression", NULL, 389, &_5$$14);
    +				ZEPHIR_CALL_METHOD(&_4$$14, this_ptr, "expression", NULL, 388, &_5$$14);
     				zephir_check_call_status();
     				ZEPHIR_CONCAT_SVSVS(return_value, "gettype(", &left, ") === (", &_4$$14, ")");
     				RETURN_MM();
     			}
     		}
     	}
    -	ZEPHIR_CALL_METHOD(&_6, this_ptr, "expression", NULL, 389, &test);
    +	ZEPHIR_CALL_METHOD(&_6, this_ptr, "expression", NULL, 388, &test);
     	zephir_check_call_status();
     	ZEPHIR_CONCAT_VSV(return_value, &left, " == ", &_6);
     	RETURN_MM();
    @@ -1057,7 +1057,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, resolveFilter) {
     			zephir_array_fetch_string(&_2$$5, &filter, SL("line"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 724 TSRMLS_CC);
     			ZEPHIR_INIT_VAR(&_3$$5);
     			ZEPHIR_CONCAT_SVSV(&_3$$5, "Unknown filter type in ", &_1$$5, " on line ", &_2$$5);
    -			ZEPHIR_CALL_METHOD(NULL, &_0$$5, "__construct", NULL, 391, &_3$$5);
    +			ZEPHIR_CALL_METHOD(NULL, &_0$$5, "__construct", NULL, 390, &_3$$5);
     			zephir_check_call_status();
     			zephir_throw_exception_debug(&_0$$5, "phalcon/mvc/view/engine/volt/compiler.zep", 724 TSRMLS_CC);
     			ZEPHIR_MM_RESTORE();
    @@ -1091,11 +1091,11 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, resolveFilter) {
     			zephir_array_update_string(&_4$$7, SL("file"), &file, PH_COPY | PH_SEPARATE);
     			zephir_array_update_string(&_4$$7, SL("line"), &line, PH_COPY | PH_SEPARATE);
     			ZEPHIR_MAKE_REF(&funcArguments);
    -			ZEPHIR_CALL_FUNCTION(NULL, "array_unshift", NULL, 393, &funcArguments, &_4$$7);
    +			ZEPHIR_CALL_FUNCTION(NULL, "array_unshift", NULL, 392, &funcArguments, &_4$$7);
     			ZEPHIR_UNREF(&funcArguments);
     			zephir_check_call_status();
     		}
    -		ZEPHIR_CALL_METHOD(&arguments, this_ptr, "expression", NULL, 389, &funcArguments);
    +		ZEPHIR_CALL_METHOD(&arguments, this_ptr, "expression", NULL, 388, &funcArguments);
     		zephir_check_call_status();
     	} else {
     		ZEPHIR_CPY_WRT(&arguments, &left);
    @@ -1110,7 +1110,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, resolveFilter) {
     		zephir_array_fast_append(&_6$$9, &funcArguments);
     		ZEPHIR_INIT_VAR(&_7$$9);
     		ZVAL_STRING(&_7$$9, "compileFilter");
    -		ZEPHIR_CALL_METHOD(&code, this_ptr, "fireextensionevent", NULL, 390, &_7$$9, &_6$$9);
    +		ZEPHIR_CALL_METHOD(&code, this_ptr, "fireextensionevent", NULL, 389, &_7$$9, &_6$$9);
     		zephir_check_call_status();
     		if (Z_TYPE_P(&code) == IS_STRING) {
     			RETURN_CCTOR(&code);
    @@ -1142,7 +1142,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, resolveFilter) {
     			zephir_array_fetch_string(&_11$$12, &filter, SL("line"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 808 TSRMLS_CC);
     			ZEPHIR_INIT_VAR(&_12$$12);
     			ZEPHIR_CONCAT_SVSVSV(&_12$$12, "Invalid definition for user filter '", &name, "' in ", &_10$$12, " on line ", &_11$$12);
    -			ZEPHIR_CALL_METHOD(NULL, &_9$$12, "__construct", NULL, 391, &_12$$12);
    +			ZEPHIR_CALL_METHOD(NULL, &_9$$12, "__construct", NULL, 390, &_12$$12);
     			zephir_check_call_status();
     			zephir_throw_exception_debug(&_9$$12, "phalcon/mvc/view/engine/volt/compiler.zep", 808 TSRMLS_CC);
     			ZEPHIR_MM_RESTORE();
    @@ -1271,7 +1271,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, resolveFilter) {
     	zephir_array_fetch_string(&_18, &filter, SL("line"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 997 TSRMLS_CC);
     	ZEPHIR_INIT_VAR(&_19);
     	ZEPHIR_CONCAT_SVSVSV(&_19, "Unknown filter \"", &name, "\" in ", &_17, " on line ", &_18);
    -	ZEPHIR_CALL_METHOD(NULL, &_16, "__construct", NULL, 391, &_19);
    +	ZEPHIR_CALL_METHOD(NULL, &_16, "__construct", NULL, 390, &_19);
     	zephir_check_call_status();
     	zephir_throw_exception_debug(&_16, "phalcon/mvc/view/engine/volt/compiler.zep", 997 TSRMLS_CC);
     	ZEPHIR_MM_RESTORE();
    @@ -1342,7 +1342,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, expression) {
     			zephir_array_fast_append(&_0$$4, &expr);
     			ZEPHIR_INIT_NVAR(&_1$$4);
     			ZVAL_STRING(&_1$$4, "resolveExpression");
    -			ZEPHIR_CALL_METHOD(&exprCode, this_ptr, "fireextensionevent", &_2, 390, &_1$$4, &_0$$4);
    +			ZEPHIR_CALL_METHOD(&exprCode, this_ptr, "fireextensionevent", &_2, 389, &_1$$4, &_0$$4);
     			zephir_check_call_status();
     			if (Z_TYPE_P(&exprCode) == IS_STRING) {
     				break;
    @@ -1358,7 +1358,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, expression) {
     				ZEPHIR_INIT_NVAR(&singleExpr);
     				ZVAL_COPY(&singleExpr, _3$$6);
     				zephir_array_fetch_string(&_4$$7, &singleExpr, SL("expr"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 1031 TSRMLS_CC);
    -				ZEPHIR_CALL_METHOD(&singleExprCode, this_ptr, "expression", &_5, 389, &_4$$7);
    +				ZEPHIR_CALL_METHOD(&singleExprCode, this_ptr, "expression", &_5, 388, &_4$$7);
     				zephir_check_call_status();
     				ZEPHIR_OBS_NVAR(&name);
     				if (zephir_array_isset_string_fetch(&name, &singleExpr, SL("name"), 0)) {
    @@ -1381,7 +1381,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, expression) {
     		}
     		ZEPHIR_OBS_NVAR(&left);
     		if (zephir_array_isset_string_fetch(&left, &expr, SL("left"), 0)) {
    -			ZEPHIR_CALL_METHOD(&leftCode, this_ptr, "expression", &_5, 389, &left);
    +			ZEPHIR_CALL_METHOD(&leftCode, this_ptr, "expression", &_5, 388, &left);
     			zephir_check_call_status();
     		}
     		if (ZEPHIR_IS_LONG(&type, 311)) {
    @@ -1392,13 +1392,13 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, expression) {
     		}
     		if (ZEPHIR_IS_LONG(&type, 124)) {
     			zephir_array_fetch_string(&_10$$13, &expr, SL("right"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 1069 TSRMLS_CC);
    -			ZEPHIR_CALL_METHOD(&exprCode, this_ptr, "resolvefilter", &_11, 394, &_10$$13, &leftCode);
    +			ZEPHIR_CALL_METHOD(&exprCode, this_ptr, "resolvefilter", &_11, 393, &_10$$13, &leftCode);
     			zephir_check_call_status();
     			break;
     		}
     		ZEPHIR_OBS_NVAR(&right);
     		if (zephir_array_isset_string_fetch(&right, &expr, SL("right"), 0)) {
    -			ZEPHIR_CALL_METHOD(&rightCode, this_ptr, "expression", &_5, 389, &right);
    +			ZEPHIR_CALL_METHOD(&rightCode, this_ptr, "expression", &_5, 388, &right);
     			zephir_check_call_status();
     		}
     		ZEPHIR_INIT_NVAR(&exprCode);
    @@ -1574,7 +1574,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, expression) {
     			if (ZEPHIR_IS_LONG(&type, 365)) {
     				ZEPHIR_OBS_NVAR(&start);
     				if (zephir_array_isset_string_fetch(&start, &expr, SL("start"), 0)) {
    -					ZEPHIR_CALL_METHOD(&startCode, this_ptr, "expression", &_5, 389, &start);
    +					ZEPHIR_CALL_METHOD(&startCode, this_ptr, "expression", &_5, 388, &start);
     					zephir_check_call_status();
     				} else {
     					ZEPHIR_INIT_NVAR(&startCode);
    @@ -1582,7 +1582,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, expression) {
     				}
     				ZEPHIR_OBS_NVAR(&end);
     				if (zephir_array_isset_string_fetch(&end, &expr, SL("end"), 0)) {
    -					ZEPHIR_CALL_METHOD(&endCode, this_ptr, "expression", &_5, 389, &end);
    +					ZEPHIR_CALL_METHOD(&endCode, this_ptr, "expression", &_5, 388, &end);
     					zephir_check_call_status();
     				} else {
     					ZEPHIR_INIT_NVAR(&endCode);
    @@ -1674,7 +1674,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, expression) {
     			}
     			if (ZEPHIR_IS_LONG(&type, 366)) {
     				zephir_array_fetch_string(&_19$$69, &expr, SL("ternary"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 1299 TSRMLS_CC);
    -				ZEPHIR_CALL_METHOD(&_18$$69, this_ptr, "expression", &_5, 389, &_19$$69);
    +				ZEPHIR_CALL_METHOD(&_18$$69, this_ptr, "expression", &_5, 388, &_19$$69);
     				zephir_check_call_status();
     				ZEPHIR_INIT_NVAR(&exprCode);
     				ZEPHIR_CONCAT_SVSVSVS(&exprCode, "(", &_18$$69, " ? ", &leftCode, " : ", &rightCode, ")");
    @@ -1701,7 +1701,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, expression) {
     			zephir_array_fetch_string(&_22$$73, &expr, SL("line"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 1315 TSRMLS_CC);
     			ZEPHIR_INIT_LNVAR(_23$$73);
     			ZEPHIR_CONCAT_SVSVSV(&_23$$73, "Unknown expression ", &type, " in ", &_21$$73, " on line ", &_22$$73);
    -			ZEPHIR_CALL_METHOD(NULL, &_20$$73, "__construct", &_24, 391, &_23$$73);
    +			ZEPHIR_CALL_METHOD(NULL, &_20$$73, "__construct", &_24, 390, &_23$$73);
     			zephir_check_call_status();
     			zephir_throw_exception_debug(&_20$$73, "phalcon/mvc/view/engine/volt/compiler.zep", 1315 TSRMLS_CC);
     			ZEPHIR_MM_RESTORE();
    @@ -1755,7 +1755,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, _statementListOrExtends) {
     		ZEPHIR_INIT_NVAR(&statement);
     	}
     	if (isStatementList == 1) {
    -		ZEPHIR_RETURN_CALL_METHOD(this_ptr, "_statementlist", NULL, 395, statements);
    +		ZEPHIR_RETURN_CALL_METHOD(this_ptr, "_statementlist", NULL, 394, statements);
     		zephir_check_call_status();
     		RETURN_MM();
     	}
    @@ -1844,7 +1844,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileForeach) {
     	ZEPHIR_CONCAT_VV(&prefixLevel, &prefix, &level);
     	ZEPHIR_OBS_VAR(&expr);
     	zephir_array_fetch_string(&expr, &statement, SL("expr"), PH_NOISY, "phalcon/mvc/view/engine/volt/compiler.zep", 1401 TSRMLS_CC);
    -	ZEPHIR_CALL_METHOD(&exprCode, this_ptr, "expression", NULL, 389, &expr);
    +	ZEPHIR_CALL_METHOD(&exprCode, this_ptr, "expression", NULL, 388, &expr);
     	zephir_check_call_status();
     	ZEPHIR_OBS_VAR(&blockStatements);
     	zephir_array_fetch_string(&blockStatements, &statement, SL("block_statements"), PH_NOISY, "phalcon/mvc/view/engine/volt/compiler.zep", 1407 TSRMLS_CC);
    @@ -1879,7 +1879,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileForeach) {
     	} else {
     		ZVAL_BOOL(&_2, 0);
     	}
    -	ZEPHIR_CALL_METHOD(&code, this_ptr, "_statementlist", NULL, 395, &blockStatements, &_2);
    +	ZEPHIR_CALL_METHOD(&code, this_ptr, "_statementlist", NULL, 394, &blockStatements, &_2);
     	zephir_check_call_status();
     	ZEPHIR_OBS_VAR(&loopContext);
     	zephir_read_property(&loopContext, this_ptr, SL("_loopPointers"), PH_NOISY_CC);
    @@ -1930,7 +1930,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileForeach) {
     	}
     	ZEPHIR_OBS_VAR(&ifExpr);
     	if (zephir_array_isset_string_fetch(&ifExpr, &statement, SL("if_expr"), 0)) {
    -		ZEPHIR_CALL_METHOD(&_14$$13, this_ptr, "expression", NULL, 389, &ifExpr);
    +		ZEPHIR_CALL_METHOD(&_14$$13, this_ptr, "expression", NULL, 388, &ifExpr);
     		zephir_check_call_status();
     		ZEPHIR_INIT_VAR(&_15$$13);
     		ZEPHIR_CONCAT_SVS(&_15$$13, "if (", &_14$$13, ") { ?>");
    @@ -2054,13 +2054,13 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileIf) {
     		object_init_ex(&_0$$3, phalcon_mvc_view_engine_volt_exception_ce);
     		ZEPHIR_INIT_VAR(&_1$$3);
     		ZVAL_STRING(&_1$$3, "Corrupt statement");
    -		ZEPHIR_CALL_METHOD(NULL, &_0$$3, "__construct", NULL, 391, &_1$$3, &statement);
    +		ZEPHIR_CALL_METHOD(NULL, &_0$$3, "__construct", NULL, 390, &_1$$3, &statement);
     		zephir_check_call_status();
     		zephir_throw_exception_debug(&_0$$3, "phalcon/mvc/view/engine/volt/compiler.zep", 1554 TSRMLS_CC);
     		ZEPHIR_MM_RESTORE();
     		return;
     	}
    -	ZEPHIR_CALL_METHOD(&_2, this_ptr, "expression", NULL, 389, &expr);
    +	ZEPHIR_CALL_METHOD(&_2, this_ptr, "expression", NULL, 388, &expr);
     	zephir_check_call_status();
     	zephir_array_fetch_string(&_4, &statement, SL("true_statements"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 1560 TSRMLS_CC);
     	if (extendsMode) {
    @@ -2068,7 +2068,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileIf) {
     	} else {
     		ZVAL_BOOL(&_5, 0);
     	}
    -	ZEPHIR_CALL_METHOD(&_3, this_ptr, "_statementlist", NULL, 395, &_4, &_5);
    +	ZEPHIR_CALL_METHOD(&_3, this_ptr, "_statementlist", NULL, 394, &_4, &_5);
     	zephir_check_call_status();
     	ZEPHIR_INIT_VAR(&compilation);
     	ZEPHIR_CONCAT_SVSV(&compilation, "", &_3);
    @@ -2079,7 +2079,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileIf) {
     		} else {
     			ZVAL_BOOL(&_7$$4, 0);
     		}
    -		ZEPHIR_CALL_METHOD(&_6$$4, this_ptr, "_statementlist", NULL, 395, &blockStatements, &_7$$4);
    +		ZEPHIR_CALL_METHOD(&_6$$4, this_ptr, "_statementlist", NULL, 394, &blockStatements, &_7$$4);
     		zephir_check_call_status();
     		ZEPHIR_INIT_VAR(&_8$$4);
     		ZEPHIR_CONCAT_SV(&_8$$4, "", &_6$$4);
    @@ -2131,13 +2131,13 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileSwitch) {
     		object_init_ex(&_0$$3, phalcon_mvc_view_engine_volt_exception_ce);
     		ZEPHIR_INIT_VAR(&_1$$3);
     		ZVAL_STRING(&_1$$3, "Corrupt statement");
    -		ZEPHIR_CALL_METHOD(NULL, &_0$$3, "__construct", NULL, 391, &_1$$3, &statement);
    +		ZEPHIR_CALL_METHOD(NULL, &_0$$3, "__construct", NULL, 390, &_1$$3, &statement);
     		zephir_check_call_status();
     		zephir_throw_exception_debug(&_0$$3, "phalcon/mvc/view/engine/volt/compiler.zep", 1589 TSRMLS_CC);
     		ZEPHIR_MM_RESTORE();
     		return;
     	}
    -	ZEPHIR_CALL_METHOD(&_2, this_ptr, "expression", NULL, 389, &expr);
    +	ZEPHIR_CALL_METHOD(&_2, this_ptr, "expression", NULL, 388, &expr);
     	zephir_check_call_status();
     	ZEPHIR_INIT_VAR(&compilation);
     	ZEPHIR_CONCAT_SVS(&compilation, "");
    @@ -2148,7 +2148,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileSwitch) {
     		} else {
     			ZVAL_BOOL(&_3$$4, 0);
     		}
    -		ZEPHIR_CALL_METHOD(&lines, this_ptr, "_statementlist", NULL, 395, &caseClauses, &_3$$4);
    +		ZEPHIR_CALL_METHOD(&lines, this_ptr, "_statementlist", NULL, 394, &caseClauses, &_3$$4);
     		zephir_check_call_status();
     		if (zephir_fast_strlen_ev(&lines) != 0) {
     			ZEPHIR_INIT_VAR(&_4$$5);
    @@ -2203,13 +2203,13 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileCase) {
     		object_init_ex(&_0$$4, phalcon_mvc_view_engine_volt_exception_ce);
     		ZEPHIR_INIT_VAR(&_1$$4);
     		ZVAL_STRING(&_1$$4, "Corrupt statement");
    -		ZEPHIR_CALL_METHOD(NULL, &_0$$4, "__construct", NULL, 391, &_1$$4, &statement);
    +		ZEPHIR_CALL_METHOD(NULL, &_0$$4, "__construct", NULL, 390, &_1$$4, &statement);
     		zephir_check_call_status();
     		zephir_throw_exception_debug(&_0$$4, "phalcon/mvc/view/engine/volt/compiler.zep", 1649 TSRMLS_CC);
     		ZEPHIR_MM_RESTORE();
     		return;
     	}
    -	ZEPHIR_CALL_METHOD(&_2, this_ptr, "expression", NULL, 389, &expr);
    +	ZEPHIR_CALL_METHOD(&_2, this_ptr, "expression", NULL, 388, &expr);
     	zephir_check_call_status();
     	ZEPHIR_CONCAT_SVS(return_value, "");
     	RETURN_MM();
    @@ -2244,13 +2244,13 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileElseIf) {
     		object_init_ex(&_0$$3, phalcon_mvc_view_engine_volt_exception_ce);
     		ZEPHIR_INIT_VAR(&_1$$3);
     		ZVAL_STRING(&_1$$3, "Corrupt statement");
    -		ZEPHIR_CALL_METHOD(NULL, &_0$$3, "__construct", NULL, 391, &_1$$3, &statement);
    +		ZEPHIR_CALL_METHOD(NULL, &_0$$3, "__construct", NULL, 390, &_1$$3, &statement);
     		zephir_check_call_status();
     		zephir_throw_exception_debug(&_0$$3, "phalcon/mvc/view/engine/volt/compiler.zep", 1669 TSRMLS_CC);
     		ZEPHIR_MM_RESTORE();
     		return;
     	}
    -	ZEPHIR_CALL_METHOD(&_2, this_ptr, "expression", NULL, 389, &expr);
    +	ZEPHIR_CALL_METHOD(&_2, this_ptr, "expression", NULL, 388, &expr);
     	zephir_check_call_status();
     	ZEPHIR_CONCAT_SVS(return_value, "");
     	RETURN_MM();
    @@ -2312,15 +2312,15 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileCache) {
     		object_init_ex(&_0$$3, phalcon_mvc_view_engine_volt_exception_ce);
     		ZEPHIR_INIT_VAR(&_1$$3);
     		ZVAL_STRING(&_1$$3, "Corrupt statement");
    -		ZEPHIR_CALL_METHOD(NULL, &_0$$3, "__construct", NULL, 391, &_1$$3, &statement);
    +		ZEPHIR_CALL_METHOD(NULL, &_0$$3, "__construct", NULL, 390, &_1$$3, &statement);
     		zephir_check_call_status();
     		zephir_throw_exception_debug(&_0$$3, "phalcon/mvc/view/engine/volt/compiler.zep", 1689 TSRMLS_CC);
     		ZEPHIR_MM_RESTORE();
     		return;
     	}
    -	ZEPHIR_CALL_METHOD(&exprCode, this_ptr, "expression", NULL, 389, &expr);
    +	ZEPHIR_CALL_METHOD(&exprCode, this_ptr, "expression", NULL, 388, &expr);
     	zephir_check_call_status();
    -	ZEPHIR_CALL_METHOD(&_2, this_ptr, "expression", NULL, 389, &expr);
    +	ZEPHIR_CALL_METHOD(&_2, this_ptr, "expression", NULL, 388, &expr);
     	zephir_check_call_status();
     	ZEPHIR_INIT_VAR(&compilation);
     	ZEPHIR_CONCAT_SVS(&compilation, "di->get('viewCache'); ");
    @@ -2355,7 +2355,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileCache) {
     	} else {
     		ZVAL_BOOL(&_13, 0);
     	}
    -	ZEPHIR_CALL_METHOD(&_11, this_ptr, "_statementlist", NULL, 395, &_12, &_13);
    +	ZEPHIR_CALL_METHOD(&_11, this_ptr, "_statementlist", NULL, 394, &_12, &_13);
     	zephir_check_call_status();
     	zephir_concat_self(&compilation, &_11 TSRMLS_CC);
     	ZEPHIR_OBS_NVAR(&lifetime);
    @@ -2429,10 +2429,10 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileSet) {
     		ZEPHIR_INIT_NVAR(&assignment);
     		ZVAL_COPY(&assignment, _0);
     		zephir_array_fetch_string(&_1$$4, &assignment, SL("expr"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 1752 TSRMLS_CC);
    -		ZEPHIR_CALL_METHOD(&exprCode, this_ptr, "expression", &_2, 389, &_1$$4);
    +		ZEPHIR_CALL_METHOD(&exprCode, this_ptr, "expression", &_2, 388, &_1$$4);
     		zephir_check_call_status();
     		zephir_array_fetch_string(&_3$$4, &assignment, SL("variable"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 1757 TSRMLS_CC);
    -		ZEPHIR_CALL_METHOD(&target, this_ptr, "expression", &_2, 389, &_3$$4);
    +		ZEPHIR_CALL_METHOD(&target, this_ptr, "expression", &_2, 388, &_3$$4);
     		zephir_check_call_status();
     		zephir_array_fetch_string(&_4$$4, &assignment, SL("op"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 1763 TSRMLS_CC);
     		do {
    @@ -2498,7 +2498,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileDo) {
     		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_view_engine_volt_exception_ce, "Corrupted statement", "phalcon/mvc/view/engine/volt/compiler.zep", 1803);
     		return;
     	}
    -	ZEPHIR_CALL_METHOD(&_0, this_ptr, "expression", NULL, 389, &expr);
    +	ZEPHIR_CALL_METHOD(&_0, this_ptr, "expression", NULL, 388, &expr);
     	zephir_check_call_status();
     	ZEPHIR_CONCAT_SVS(return_value, "");
     	RETURN_MM();
    @@ -2530,7 +2530,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileReturn) {
     		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_view_engine_volt_exception_ce, "Corrupted statement", "phalcon/mvc/view/engine/volt/compiler.zep", 1823);
     		return;
     	}
    -	ZEPHIR_CALL_METHOD(&_0, this_ptr, "expression", NULL, 389, &expr);
    +	ZEPHIR_CALL_METHOD(&_0, this_ptr, "expression", NULL, 388, &expr);
     	zephir_check_call_status();
     	ZEPHIR_CONCAT_SVS(return_value, "");
     	RETURN_MM();
    @@ -2576,7 +2576,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileAutoEscape) {
     	} else {
     		ZVAL_BOOL(&_1, 0);
     	}
    -	ZEPHIR_CALL_METHOD(&compilation, this_ptr, "_statementlist", NULL, 395, &_0, &_1);
    +	ZEPHIR_CALL_METHOD(&compilation, this_ptr, "_statementlist", NULL, 394, &_0, &_1);
     	zephir_check_call_status();
     	zephir_update_property_zval(this_ptr, SL("_autoescape"), &oldAutoescape);
     	RETURN_CCTOR(&compilation);
    @@ -2616,13 +2616,13 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileEcho) {
     		object_init_ex(&_0$$3, phalcon_mvc_view_engine_volt_exception_ce);
     		ZEPHIR_INIT_VAR(&_1$$3);
     		ZVAL_STRING(&_1$$3, "Corrupt statement");
    -		ZEPHIR_CALL_METHOD(NULL, &_0$$3, "__construct", NULL, 391, &_1$$3, &statement);
    +		ZEPHIR_CALL_METHOD(NULL, &_0$$3, "__construct", NULL, 390, &_1$$3, &statement);
     		zephir_check_call_status();
     		zephir_throw_exception_debug(&_0$$3, "phalcon/mvc/view/engine/volt/compiler.zep", 1869 TSRMLS_CC);
     		ZEPHIR_MM_RESTORE();
     		return;
     	}
    -	ZEPHIR_CALL_METHOD(&exprCode, this_ptr, "expression", NULL, 389, &expr);
    +	ZEPHIR_CALL_METHOD(&exprCode, this_ptr, "expression", NULL, 388, &expr);
     	zephir_check_call_status();
     	zephir_array_fetch_string(&_2, &expr, SL("type"), PH_NOISY | PH_READONLY, "phalcon/mvc/view/engine/volt/compiler.zep", 1877 TSRMLS_CC);
     	if (ZEPHIR_IS_LONG(&_2, 350)) {
    @@ -2701,14 +2701,14 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileInclude) {
     			RETURN_CCTOR(&compilation);
     		}
     	}
    -	ZEPHIR_CALL_METHOD(&path, this_ptr, "expression", NULL, 389, &pathExpr);
    +	ZEPHIR_CALL_METHOD(&path, this_ptr, "expression", NULL, 388, &pathExpr);
     	zephir_check_call_status();
     	ZEPHIR_OBS_VAR(¶ms);
     	if (!(zephir_array_isset_string_fetch(¶ms, &statement, SL("params"), 0))) {
     		ZEPHIR_CONCAT_SVS(return_value, "partial(", &path, "); ?>");
     		RETURN_MM();
     	}
    -	ZEPHIR_CALL_METHOD(&_3, this_ptr, "expression", NULL, 389, ¶ms);
    +	ZEPHIR_CALL_METHOD(&_3, this_ptr, "expression", NULL, 388, ¶ms);
     	zephir_check_call_status();
     	ZEPHIR_CONCAT_SVSVS(return_value, "partial(", &path, ", ", &_3, "); ?>");
     	RETURN_MM();
    @@ -2774,7 +2774,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileMacro) {
     		object_init_ex(&_1$$4, phalcon_mvc_view_engine_volt_exception_ce);
     		ZEPHIR_INIT_VAR(&_2$$4);
     		ZEPHIR_CONCAT_SVS(&_2$$4, "Macro '", &name, "' is already defined");
    -		ZEPHIR_CALL_METHOD(NULL, &_1$$4, "__construct", NULL, 391, &_2$$4);
    +		ZEPHIR_CALL_METHOD(NULL, &_1$$4, "__construct", NULL, 390, &_2$$4);
     		zephir_check_call_status();
     		zephir_throw_exception_debug(&_1$$4, "phalcon/mvc/view/engine/volt/compiler.zep", 1988 TSRMLS_CC);
     		ZEPHIR_MM_RESTORE();
    @@ -2823,7 +2823,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileMacro) {
     			zephir_concat_self_str(&code, SL(" } else { ") TSRMLS_CC);
     			ZEPHIR_OBS_NVAR(&defaultValue);
     			if (zephir_array_isset_string_fetch(&defaultValue, ¶meter, SL("default"), 0)) {
    -				ZEPHIR_CALL_METHOD(&_12$$8, this_ptr, "expression", &_13, 389, &defaultValue);
    +				ZEPHIR_CALL_METHOD(&_12$$8, this_ptr, "expression", &_13, 388, &defaultValue);
     				zephir_check_call_status();
     				ZEPHIR_INIT_LNVAR(_14$$8);
     				ZEPHIR_CONCAT_SVSVS(&_14$$8, "$", &variableName, " = ", &_12$$8, ";");
    @@ -2846,7 +2846,7 @@ PHP_METHOD(Phalcon_Mvc_View_Engine_Volt_Compiler, compileMacro) {
     		} else {
     			ZVAL_BOOL(&_17$$10, 0);
     		}
    -		ZEPHIR_CALL_METHOD(&_16$$10, this_ptr, "_statementlist", NULL, 395, &blockStatements, &_17$$10);
    +		ZEPHIR_CALL_METHOD(&_16$$10, this_ptr, "_statementlist", NULL, 394, &blockStatements, &_17$$10);
     		zephir_check_call_status();
     		ZEPHIR_INIT_VAR(&_18$$10);
     		ZEPHIR_CONCAT_VS(&_18$$10, &_16$$10, "
    @@ -218,7 +218,7 @@ PHP_METHOD(Phalcon_Session_Manager, destroy) {
     	ZEPHIR_CALL_METHOD(&_0, this_ptr, "exists", NULL, 0);
     	zephir_check_call_status();
     	if (ZEPHIR_IS_TRUE_IDENTICAL(&_0)) {
    -		ZEPHIR_CALL_FUNCTION(NULL, "session_destroy", NULL, 430);
    +		ZEPHIR_CALL_FUNCTION(NULL, "session_destroy", NULL, 429);
     		zephir_check_call_status();
     		ZEPHIR_INIT_NVAR(_SESSION);
     		array_init(_SESSION);
    @@ -254,6 +254,7 @@ PHP_METHOD(Phalcon_Session_Manager, exists) {
      */
     PHP_METHOD(Phalcon_Session_Manager, get) {
     
    +	zephir_fcall_cache_entry *_1 = NULL;
     	zend_long ZEPHIR_LAST_CALL_STATUS;
     	zend_bool remove;
     	zval *key_param = NULL, *defaultValue = NULL, defaultValue_sub, *remove_param = NULL, *_SESSION, __$null, uniqueKey, value, _0;
    @@ -290,9 +291,9 @@ PHP_METHOD(Phalcon_Session_Manager, get) {
     	if (ZEPHIR_IS_FALSE_IDENTICAL(&_0)) {
     		RETURN_CCTOR(&value);
     	}
    -	ZEPHIR_CALL_METHOD(&uniqueKey, this_ptr, "getuniquekey", NULL, 431, &key);
    +	ZEPHIR_CALL_METHOD(&uniqueKey, this_ptr, "getuniquekey", NULL, 430, &key);
     	zephir_check_call_status();
    -	ZEPHIR_CALL_METHOD(&value, this_ptr, "arraygetdefault", NULL, 0, _SESSION, &uniqueKey, defaultValue);
    +	ZEPHIR_CALL_CE_STATIC(&value, phalcon_helper_arr_ce, "get", &_1, 156, _SESSION, &uniqueKey, defaultValue);
     	zephir_check_call_status();
     	if (remove == 1) {
     		zephir_array_unset(_SESSION, &uniqueKey, PH_SEPARATE);
    @@ -336,7 +337,7 @@ PHP_METHOD(Phalcon_Session_Manager, getId) {
     
     	ZEPHIR_MM_GROW();
     
    -	ZEPHIR_RETURN_CALL_FUNCTION("session_id", NULL, 432);
    +	ZEPHIR_RETURN_CALL_FUNCTION("session_id", NULL, 431);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -361,7 +362,7 @@ PHP_METHOD(Phalcon_Session_Manager, getName) {
     	ZEPHIR_SINIT_VAR(_1);
     	ZVAL_STRING(&_1, "");
     	if (!ZEPHIR_IS_IDENTICAL(&_1, &_0)) {
    -		ZEPHIR_CALL_FUNCTION(&_2$$3, "session_name", NULL, 433);
    +		ZEPHIR_CALL_FUNCTION(&_2$$3, "session_name", NULL, 432);
     		zephir_check_call_status();
     		zephir_update_property_zval(this_ptr, SL("name"), &_2$$3);
     	}
    @@ -395,7 +396,7 @@ PHP_METHOD(Phalcon_Session_Manager, has) {
     	if (ZEPHIR_IS_FALSE_IDENTICAL(&_0)) {
     		RETURN_MM_BOOL(0);
     	}
    -	ZEPHIR_CALL_METHOD(&uniqueKey, this_ptr, "getuniquekey", NULL, 431, &key);
    +	ZEPHIR_CALL_METHOD(&uniqueKey, this_ptr, "getuniquekey", NULL, 430, &key);
     	zephir_check_call_status();
     	RETURN_MM_BOOL(zephir_array_isset(_SESSION, &uniqueKey));
     
    @@ -442,7 +443,7 @@ PHP_METHOD(Phalcon_Session_Manager, regenerateId) {
     	zephir_check_call_status();
     	if (ZEPHIR_IS_TRUE_IDENTICAL(&_0)) {
     		ZVAL_BOOL(&_1$$3, (delete ? 1 : 0));
    -		ZEPHIR_CALL_FUNCTION(NULL, "session_regenerate_id", NULL, 434, &_1$$3);
    +		ZEPHIR_CALL_FUNCTION(NULL, "session_regenerate_id", NULL, 433, &_1$$3);
     		zephir_check_call_status();
     	}
     	RETURN_THIS();
    @@ -465,7 +466,7 @@ PHP_METHOD(Phalcon_Session_Manager, registerHandler) {
     
     
     
    -	ZEPHIR_RETURN_CALL_FUNCTION("session_set_save_handler", NULL, 435, handler);
    +	ZEPHIR_RETURN_CALL_FUNCTION("session_set_save_handler", NULL, 434, handler);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -497,7 +498,7 @@ PHP_METHOD(Phalcon_Session_Manager, remove) {
     	if (ZEPHIR_IS_FALSE_IDENTICAL(&_0)) {
     		RETURN_MM_NULL();
     	}
    -	ZEPHIR_CALL_METHOD(&uniqueKey, this_ptr, "getuniquekey", NULL, 431, &key);
    +	ZEPHIR_CALL_METHOD(&uniqueKey, this_ptr, "getuniquekey", NULL, 430, &key);
     	zephir_check_call_status();
     	zephir_array_unset(_SESSION, &uniqueKey, PH_SEPARATE);
     	ZEPHIR_MM_RESTORE();
    @@ -531,7 +532,7 @@ PHP_METHOD(Phalcon_Session_Manager, set) {
     	if (ZEPHIR_IS_FALSE_IDENTICAL(&_0)) {
     		RETURN_MM_NULL();
     	}
    -	ZEPHIR_CALL_METHOD(&uniqueKey, this_ptr, "getuniquekey", NULL, 431, &key);
    +	ZEPHIR_CALL_METHOD(&uniqueKey, this_ptr, "getuniquekey", NULL, 430, &key);
     	zephir_check_call_status();
     	zephir_array_update_zval(_SESSION, &uniqueKey, value, PH_COPY | PH_SEPARATE);
     	ZEPHIR_MM_RESTORE();
    @@ -603,13 +604,13 @@ PHP_METHOD(Phalcon_Session_Manager, setId) {
     		object_init_ex(&_1$$3, spl_ce_RuntimeException);
     		ZEPHIR_INIT_VAR(&_2$$3);
     		ZEPHIR_CONCAT_SS(&_2$$3, "The session has already been started. ", "To change the id, use regenerateId()");
    -		ZEPHIR_CALL_METHOD(NULL, &_1$$3, "__construct", NULL, 436, &_2$$3);
    +		ZEPHIR_CALL_METHOD(NULL, &_1$$3, "__construct", NULL, 435, &_2$$3);
     		zephir_check_call_status();
     		zephir_throw_exception_debug(&_1$$3, "phalcon/session/manager.zep", 286 TSRMLS_CC);
     		ZEPHIR_MM_RESTORE();
     		return;
     	}
    -	ZEPHIR_CALL_FUNCTION(NULL, "session_id", NULL, 432, &id);
    +	ZEPHIR_CALL_FUNCTION(NULL, "session_id", NULL, 431, &id);
     	zephir_check_call_status();
     	RETURN_THIS();
     
    @@ -663,7 +664,7 @@ PHP_METHOD(Phalcon_Session_Manager, setName) {
     		return;
     	}
     	zephir_update_property_zval(this_ptr, SL("name"), &name);
    -	ZEPHIR_CALL_FUNCTION(NULL, "session_name", NULL, 433, &name);
    +	ZEPHIR_CALL_FUNCTION(NULL, "session_name", NULL, 432, &name);
     	zephir_check_call_status();
     	RETURN_THIS();
     
    @@ -677,14 +678,15 @@ PHP_METHOD(Phalcon_Session_Manager, setName) {
     PHP_METHOD(Phalcon_Session_Manager, setOptions) {
     
     	zend_long ZEPHIR_LAST_CALL_STATUS;
    -	zval *options_param = NULL, _0, _1, _2;
    +	zephir_fcall_cache_entry *_1 = NULL;
    +	zval *options_param = NULL, _0, _2, _3;
     	zval options;
     	zval *this_ptr = getThis();
     
     	ZVAL_UNDEF(&options);
     	ZVAL_UNDEF(&_0);
    -	ZVAL_UNDEF(&_1);
     	ZVAL_UNDEF(&_2);
    +	ZVAL_UNDEF(&_3);
     
     	ZEPHIR_MM_GROW();
     	zephir_fetch_params(1, 1, 0, &options_param);
    @@ -692,11 +694,11 @@ PHP_METHOD(Phalcon_Session_Manager, setOptions) {
     	zephir_get_arrval(&options, options_param);
     
     
    -	ZEPHIR_INIT_VAR(&_1);
    -	ZVAL_STRING(&_1, "uniqueId");
     	ZEPHIR_INIT_VAR(&_2);
    -	ZVAL_STRING(&_2, "");
    -	ZEPHIR_CALL_METHOD(&_0, this_ptr, "arraygetdefault", NULL, 0, &options, &_1, &_2);
    +	ZVAL_STRING(&_2, "uniqueId");
    +	ZEPHIR_INIT_VAR(&_3);
    +	ZVAL_STRING(&_3, "");
    +	ZEPHIR_CALL_CE_STATIC(&_0, phalcon_helper_arr_ce, "get", &_1, 156, &options, &_2, &_3);
     	zephir_check_call_status();
     	zephir_update_property_zval(this_ptr, SL("uniqueId"), &_0);
     	zephir_update_property_zval(this_ptr, SL("options"), &options);
    @@ -741,7 +743,7 @@ PHP_METHOD(Phalcon_Session_Manager, start) {
     		ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_session_exception_ce, "The session handler is not valid", "phalcon/session/manager.zep", 361);
     		return;
     	}
    -	ZEPHIR_CALL_FUNCTION(NULL, "session_start", NULL, 437);
    +	ZEPHIR_CALL_FUNCTION(NULL, "session_start", NULL, 436);
     	zephir_check_call_status();
     	RETURN_MM_BOOL(1);
     
    diff --git a/ext/phalcon/tag.zep.c b/ext/phalcon/tag.zep.c
    index fdead7d95c3..0589df4d5c7 100644
    --- a/ext/phalcon/tag.zep.c
    +++ b/ext/phalcon/tag.zep.c
    @@ -1042,7 +1042,7 @@ PHP_METHOD(Phalcon_Tag, colorField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "color");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1079,7 +1079,7 @@ PHP_METHOD(Phalcon_Tag, textField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "text");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1117,7 +1117,7 @@ PHP_METHOD(Phalcon_Tag, numericField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "number");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1145,7 +1145,7 @@ PHP_METHOD(Phalcon_Tag, rangeField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "range");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1177,7 +1177,7 @@ PHP_METHOD(Phalcon_Tag, emailField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "email");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1214,7 +1214,7 @@ PHP_METHOD(Phalcon_Tag, dateField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "date");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1242,7 +1242,7 @@ PHP_METHOD(Phalcon_Tag, dateTimeField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "datetime");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1270,7 +1270,7 @@ PHP_METHOD(Phalcon_Tag, dateTimeLocalField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "datetime-local");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1298,7 +1298,7 @@ PHP_METHOD(Phalcon_Tag, monthField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "month");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1326,7 +1326,7 @@ PHP_METHOD(Phalcon_Tag, timeField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "time");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1354,7 +1354,7 @@ PHP_METHOD(Phalcon_Tag, weekField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "week");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1391,7 +1391,7 @@ PHP_METHOD(Phalcon_Tag, passwordField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "password");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1428,7 +1428,7 @@ PHP_METHOD(Phalcon_Tag, hiddenField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "hidden");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1460,7 +1460,7 @@ PHP_METHOD(Phalcon_Tag, fileField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "file");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1488,7 +1488,7 @@ PHP_METHOD(Phalcon_Tag, searchField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "search");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1516,7 +1516,7 @@ PHP_METHOD(Phalcon_Tag, telField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "tel");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1544,7 +1544,7 @@ PHP_METHOD(Phalcon_Tag, urlField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "url");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1586,7 +1586,7 @@ PHP_METHOD(Phalcon_Tag, checkField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "checkbox");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfieldchecked", &_0, 439, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfieldchecked", &_0, 438, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1628,7 +1628,7 @@ PHP_METHOD(Phalcon_Tag, radioField) {
     
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "radio");
    -	ZEPHIR_RETURN_CALL_SELF("_inputfieldchecked", &_0, 439, &_1, parameters);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfieldchecked", &_0, 438, &_1, parameters);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1671,7 +1671,7 @@ PHP_METHOD(Phalcon_Tag, imageInput) {
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "image");
     	ZVAL_BOOL(&_2, 1);
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters, &_2);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters, &_2);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1710,7 +1710,7 @@ PHP_METHOD(Phalcon_Tag, submitButton) {
     	ZEPHIR_INIT_VAR(&_1);
     	ZVAL_STRING(&_1, "submit");
     	ZVAL_BOOL(&_2, 1);
    -	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 438, &_1, parameters, &_2);
    +	ZEPHIR_RETURN_CALL_SELF("_inputfield", &_0, 437, &_1, parameters, &_2);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -1886,7 +1886,7 @@ PHP_METHOD(Phalcon_Tag, textArea) {
     	ZVAL_STRING(&_1, "", &_2, "");
    diff --git a/ext/phalcon/tag.zep.h b/ext/phalcon/tag.zep.h
    index ced3eda9ec8..0dee9315f92 100644
    --- a/ext/phalcon/tag.zep.h
    +++ b/ext/phalcon/tag.zep.h
    @@ -94,9 +94,9 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_tag_getdi, 0, 0, IS_OBJE
     ZEND_END_ARG_INFO()
     
     #if PHP_VERSION_ID >= 70200
    -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_tag_geturlservice, 0, 0, Phalcon\\Mvc\\UrlInterface, 0)
    +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_tag_geturlservice, 0, 0, Phalcon\\UrlInterface, 0)
     #else
    -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_tag_geturlservice, 0, 0, IS_OBJECT, "Phalcon\\Mvc\\UrlInterface", 0)
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_tag_geturlservice, 0, 0, IS_OBJECT, "Phalcon\\UrlInterface", 0)
     #endif
     ZEND_END_ARG_INFO()
     
    diff --git a/ext/phalcon/tag/select.zep.c b/ext/phalcon/tag/select.zep.c
    index 15d54bb356d..6ac76fd32cf 100644
    --- a/ext/phalcon/tag/select.zep.c
    +++ b/ext/phalcon/tag/select.zep.c
    @@ -184,7 +184,7 @@ PHP_METHOD(Phalcon_Tag_Select, selectField) {
     		ZEPHIR_GET_CONSTANT(&_10$$24, "PHP_EOL");
     		ZEPHIR_INIT_VAR(&_11$$24);
     		ZEPHIR_CONCAT_SV(&_11$$24, "", &_10$$24);
    -		ZEPHIR_CALL_SELF(&_8$$24, "_optionsfromresultset", &_9, 440, &options, &using, &value, &_11$$24);
    +		ZEPHIR_CALL_SELF(&_8$$24, "_optionsfromresultset", &_9, 439, &options, &using, &value, &_11$$24);
     		zephir_check_call_status();
     		zephir_concat_self(&code, &_8$$24 TSRMLS_CC);
     	} else {
    @@ -193,7 +193,7 @@ PHP_METHOD(Phalcon_Tag_Select, selectField) {
     			ZEPHIR_GET_CONSTANT(&_14$$26, "PHP_EOL");
     			ZEPHIR_INIT_VAR(&_15$$26);
     			ZEPHIR_CONCAT_SV(&_15$$26, "", &_14$$26);
    -			ZEPHIR_CALL_SELF(&_12$$26, "_optionsfromarray", &_13, 441, &options, &value, &_15$$26);
    +			ZEPHIR_CALL_SELF(&_12$$26, "_optionsfromarray", &_13, 440, &options, &value, &_15$$26);
     			zephir_check_call_status();
     			zephir_concat_self(&code, &_12$$26 TSRMLS_CC);
     		}
    @@ -398,12 +398,12 @@ PHP_METHOD(Phalcon_Tag_Select, _optionsFromArray) {
     		}
     		ZEPHIR_INIT_NVAR(&optionText);
     		ZVAL_COPY(&optionText, _0);
    -		ZEPHIR_CALL_FUNCTION(&escaped, "htmlspecialchars", &_3, 177, &optionValue);
    +		ZEPHIR_CALL_FUNCTION(&escaped, "htmlspecialchars", &_3, 178, &optionValue);
     		zephir_check_call_status();
     		if (Z_TYPE_P(&optionText) == IS_ARRAY) {
     			ZEPHIR_INIT_NVAR(&_4$$4);
     			ZEPHIR_GET_CONSTANT(&_4$$4, "PHP_EOL");
    -			ZEPHIR_CALL_SELF(&_5$$4, "_optionsfromarray", &_6, 441, &optionText, value, &closeOption);
    +			ZEPHIR_CALL_SELF(&_5$$4, "_optionsfromarray", &_6, 440, &optionText, value, &closeOption);
     			zephir_check_call_status();
     			ZEPHIR_INIT_NVAR(&_7$$4);
     			ZEPHIR_GET_CONSTANT(&_7$$4, "PHP_EOL");
    diff --git a/ext/phalcon/text.zep.c b/ext/phalcon/text.zep.c
    index e399a233ced..993c6ec5bd2 100644
    --- a/ext/phalcon/text.zep.c
    +++ b/ext/phalcon/text.zep.c
    @@ -263,13 +263,13 @@ PHP_METHOD(Phalcon_Text, random) {
     			ZVAL_STRING(&_0$$3, "a");
     			ZEPHIR_INIT_VAR(&_1$$3);
     			ZVAL_STRING(&_1$$3, "z");
    -			ZEPHIR_CALL_FUNCTION(&_2$$3, "range", NULL, 442, &_0$$3, &_1$$3);
    +			ZEPHIR_CALL_FUNCTION(&_2$$3, "range", NULL, 441, &_0$$3, &_1$$3);
     			zephir_check_call_status();
     			ZEPHIR_INIT_NVAR(&_0$$3);
     			ZVAL_STRING(&_0$$3, "A");
     			ZEPHIR_INIT_NVAR(&_1$$3);
     			ZVAL_STRING(&_1$$3, "Z");
    -			ZEPHIR_CALL_FUNCTION(&_3$$3, "range", NULL, 442, &_0$$3, &_1$$3);
    +			ZEPHIR_CALL_FUNCTION(&_3$$3, "range", NULL, 441, &_0$$3, &_1$$3);
     			zephir_check_call_status();
     			ZEPHIR_INIT_VAR(&pool);
     			zephir_fast_array_merge(&pool, &_2$$3, &_3$$3 TSRMLS_CC);
    @@ -278,13 +278,13 @@ PHP_METHOD(Phalcon_Text, random) {
     		if (type == 2) {
     			ZVAL_LONG(&_4$$4, 0);
     			ZVAL_LONG(&_5$$4, 9);
    -			ZEPHIR_CALL_FUNCTION(&_6$$4, "range", NULL, 442, &_4$$4, &_5$$4);
    +			ZEPHIR_CALL_FUNCTION(&_6$$4, "range", NULL, 441, &_4$$4, &_5$$4);
     			zephir_check_call_status();
     			ZEPHIR_INIT_VAR(&_7$$4);
     			ZVAL_STRING(&_7$$4, "a");
     			ZEPHIR_INIT_VAR(&_8$$4);
     			ZVAL_STRING(&_8$$4, "f");
    -			ZEPHIR_CALL_FUNCTION(&_9$$4, "range", NULL, 442, &_7$$4, &_8$$4);
    +			ZEPHIR_CALL_FUNCTION(&_9$$4, "range", NULL, 441, &_7$$4, &_8$$4);
     			zephir_check_call_status();
     			ZEPHIR_INIT_NVAR(&pool);
     			zephir_fast_array_merge(&pool, &_6$$4, &_9$$4 TSRMLS_CC);
    @@ -293,14 +293,14 @@ PHP_METHOD(Phalcon_Text, random) {
     		if (type == 3) {
     			ZVAL_LONG(&_10$$5, 0);
     			ZVAL_LONG(&_11$$5, 9);
    -			ZEPHIR_CALL_FUNCTION(&pool, "range", NULL, 442, &_10$$5, &_11$$5);
    +			ZEPHIR_CALL_FUNCTION(&pool, "range", NULL, 441, &_10$$5, &_11$$5);
     			zephir_check_call_status();
     			break;
     		}
     		if (type == 4) {
     			ZVAL_LONG(&_12$$6, 1);
     			ZVAL_LONG(&_13$$6, 9);
    -			ZEPHIR_CALL_FUNCTION(&pool, "range", NULL, 442, &_12$$6, &_13$$6);
    +			ZEPHIR_CALL_FUNCTION(&pool, "range", NULL, 441, &_12$$6, &_13$$6);
     			zephir_check_call_status();
     			break;
     		}
    @@ -313,21 +313,21 @@ PHP_METHOD(Phalcon_Text, random) {
     		}
     		ZVAL_LONG(&_15$$8, 0);
     		ZVAL_LONG(&_16$$8, 9);
    -		ZEPHIR_CALL_FUNCTION(&_17$$8, "range", NULL, 442, &_15$$8, &_16$$8);
    +		ZEPHIR_CALL_FUNCTION(&_17$$8, "range", NULL, 441, &_15$$8, &_16$$8);
     		zephir_check_call_status();
     		ZEPHIR_INIT_VAR(&_18$$8);
     		ZVAL_STRING(&_18$$8, "a");
     		ZEPHIR_INIT_VAR(&_19$$8);
     		ZVAL_STRING(&_19$$8, "z");
    -		ZEPHIR_CALL_FUNCTION(&_20$$8, "range", NULL, 442, &_18$$8, &_19$$8);
    +		ZEPHIR_CALL_FUNCTION(&_20$$8, "range", NULL, 441, &_18$$8, &_19$$8);
     		zephir_check_call_status();
     		ZEPHIR_INIT_NVAR(&_18$$8);
     		ZVAL_STRING(&_18$$8, "A");
     		ZEPHIR_INIT_NVAR(&_19$$8);
     		ZVAL_STRING(&_19$$8, "Z");
    -		ZEPHIR_CALL_FUNCTION(&_21$$8, "range", NULL, 442, &_18$$8, &_19$$8);
    +		ZEPHIR_CALL_FUNCTION(&_21$$8, "range", NULL, 441, &_18$$8, &_19$$8);
     		zephir_check_call_status();
    -		ZEPHIR_CALL_FUNCTION(&pool, "array_merge", NULL, 443, &_17$$8, &_20$$8, &_21$$8);
    +		ZEPHIR_CALL_FUNCTION(&pool, "array_merge", NULL, 442, &_17$$8, &_20$$8, &_21$$8);
     		zephir_check_call_status();
     		break;
     	} while(0);
    @@ -468,7 +468,7 @@ PHP_METHOD(Phalcon_Text, lower) {
     
     
     	if ((zephir_function_exists_ex(SL("mb_strtolower") TSRMLS_CC) == SUCCESS)) {
    -		ZEPHIR_RETURN_CALL_FUNCTION("mb_strtolower", NULL, 444, &str, &encoding);
    +		ZEPHIR_RETURN_CALL_FUNCTION("mb_strtolower", NULL, 443, &str, &encoding);
     		zephir_check_call_status();
     		RETURN_MM();
     	}
    @@ -525,7 +525,7 @@ PHP_METHOD(Phalcon_Text, upper) {
     
     
     	if ((zephir_function_exists_ex(SL("mb_strtoupper") TSRMLS_CC) == SUCCESS)) {
    -		ZEPHIR_RETURN_CALL_FUNCTION("mb_strtoupper", NULL, 445, &str, &encoding);
    +		ZEPHIR_RETURN_CALL_FUNCTION("mb_strtoupper", NULL, 444, &str, &encoding);
     		zephir_check_call_status();
     		RETURN_MM();
     	}
    @@ -627,7 +627,7 @@ PHP_METHOD(Phalcon_Text, concat) {
     		ZEPHIR_INIT_VAR(&_3$$3);
     		zephir_get_args(&_3$$3);
     		ZVAL_LONG(&_4$$3, 3);
    -		ZEPHIR_CALL_FUNCTION(&_5$$3, "array_slice", NULL, 387, &_3$$3, &_4$$3);
    +		ZEPHIR_CALL_FUNCTION(&_5$$3, "array_slice", NULL, 386, &_3$$3, &_4$$3);
     		zephir_check_call_status();
     		zephir_is_iterable(&_5$$3, 0, "phalcon/text.zep", 253);
     		ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(&_5$$3), _6$$3)
    @@ -763,24 +763,24 @@ PHP_METHOD(Phalcon_Text, dynamic) {
     	}
     
     
    -	ZEPHIR_CALL_FUNCTION(&_0, "substr_count", NULL, 446, &text, &leftDelimiter);
    +	ZEPHIR_CALL_FUNCTION(&_0, "substr_count", NULL, 445, &text, &leftDelimiter);
     	zephir_check_call_status();
    -	ZEPHIR_CALL_FUNCTION(&_1, "substr_count", NULL, 446, &text, &rightDelimiter);
    +	ZEPHIR_CALL_FUNCTION(&_1, "substr_count", NULL, 445, &text, &rightDelimiter);
     	zephir_check_call_status();
     	if (!ZEPHIR_IS_IDENTICAL(&_0, &_1)) {
     		ZEPHIR_INIT_VAR(&_2$$3);
     		object_init_ex(&_2$$3, spl_ce_RuntimeException);
     		ZEPHIR_INIT_VAR(&_3$$3);
     		ZEPHIR_CONCAT_SVS(&_3$$3, "Syntax error in string \"", &text, "\"");
    -		ZEPHIR_CALL_METHOD(NULL, &_2$$3, "__construct", NULL, 436, &_3$$3);
    +		ZEPHIR_CALL_METHOD(NULL, &_2$$3, "__construct", NULL, 435, &_3$$3);
     		zephir_check_call_status();
     		zephir_throw_exception_debug(&_2$$3, "phalcon/text.zep", 280 TSRMLS_CC);
     		ZEPHIR_MM_RESTORE();
     		return;
     	}
    -	ZEPHIR_CALL_FUNCTION(&ldS, "preg_quote", NULL, 447, &leftDelimiter);
    +	ZEPHIR_CALL_FUNCTION(&ldS, "preg_quote", NULL, 446, &leftDelimiter);
     	zephir_check_call_status();
    -	ZEPHIR_CALL_FUNCTION(&rdS, "preg_quote", NULL, 447, &rightDelimiter);
    +	ZEPHIR_CALL_FUNCTION(&rdS, "preg_quote", NULL, 446, &rightDelimiter);
     	zephir_check_call_status();
     	ZEPHIR_INIT_VAR(&pattern);
     	ZEPHIR_CONCAT_SVSVVSVS(&pattern, "/", &ldS, "([^", &ldS, &rdS, "]+)", &rdS, "/");
    @@ -808,11 +808,11 @@ PHP_METHOD(Phalcon_Text, dynamic) {
     			ZEPHIR_INIT_NVAR(&words);
     			zephir_fast_explode(&words, &separator, &_7$$6, LONG_MAX TSRMLS_CC);
     			ZEPHIR_OBS_NVAR(&word);
    -			ZEPHIR_CALL_FUNCTION(&_8$$6, "array_rand", &_9, 448, &words);
    +			ZEPHIR_CALL_FUNCTION(&_8$$6, "array_rand", &_9, 447, &words);
     			zephir_check_call_status();
     			zephir_array_fetch(&word, &words, &_8$$6, PH_NOISY, "phalcon/text.zep", 299 TSRMLS_CC);
     			zephir_array_fetch_long(&_10$$6, &match, 0, PH_NOISY | PH_READONLY, "phalcon/text.zep", 300 TSRMLS_CC);
    -			ZEPHIR_CALL_FUNCTION(&sub, "preg_quote", NULL, 447, &_10$$6, &separator);
    +			ZEPHIR_CALL_FUNCTION(&sub, "preg_quote", NULL, 446, &_10$$6, &separator);
     			zephir_check_call_status();
     			ZEPHIR_INIT_LNVAR(_11$$6);
     			ZEPHIR_CONCAT_SVS(&_11$$6, "/", &sub, "/");
    diff --git a/ext/phalcon/translate/adapter/csv.zep.c b/ext/phalcon/translate/adapter/csv.zep.c
    index 59956d4c75f..1bb323fbf12 100644
    --- a/ext/phalcon/translate/adapter/csv.zep.c
    +++ b/ext/phalcon/translate/adapter/csv.zep.c
    @@ -85,7 +85,7 @@ PHP_METHOD(Phalcon_Translate_Adapter_Csv, __construct) {
     	ZVAL_STRING(&_3, ";");
     	ZEPHIR_INIT_VAR(&_4);
     	ZVAL_STRING(&_4, "\"");
    -	ZEPHIR_CALL_METHOD(NULL, this_ptr, "_load", NULL, 449, &_1, &_2, &_3, &_4);
    +	ZEPHIR_CALL_METHOD(NULL, this_ptr, "_load", NULL, 448, &_1, &_2, &_3, &_4);
     	zephir_check_call_status();
     	ZEPHIR_MM_RESTORE();
     
    @@ -144,7 +144,7 @@ PHP_METHOD(Phalcon_Translate_Adapter_Csv, _load) {
     	}
     	while (1) {
     		ZVAL_LONG(&_3$$4, length);
    -		ZEPHIR_CALL_FUNCTION(&data, "fgetcsv", &_4, 450, &fileHandler, &_3$$4, &delimiter, &enclosure);
    +		ZEPHIR_CALL_FUNCTION(&data, "fgetcsv", &_4, 449, &fileHandler, &_3$$4, &delimiter, &enclosure);
     		zephir_check_call_status();
     		if (ZEPHIR_IS_FALSE_IDENTICAL(&data)) {
     			break;
    diff --git a/ext/phalcon/translate/adapter/gettext.zep.c b/ext/phalcon/translate/adapter/gettext.zep.c
    index 60f48ce30ad..f0b66eb9116 100644
    --- a/ext/phalcon/translate/adapter/gettext.zep.c
    +++ b/ext/phalcon/translate/adapter/gettext.zep.c
    @@ -193,7 +193,7 @@ PHP_METHOD(Phalcon_Translate_Adapter_Gettext, query) {
     	}
     
     
    -	ZEPHIR_CALL_FUNCTION(&translation, "gettext", NULL, 451, &index);
    +	ZEPHIR_CALL_FUNCTION(&translation, "gettext", NULL, 450, &index);
     	zephir_check_call_status();
     	ZEPHIR_RETURN_CALL_METHOD(this_ptr, "replaceplaceholders", NULL, 0, &translation, placeholders);
     	zephir_check_call_status();
    @@ -306,11 +306,11 @@ PHP_METHOD(Phalcon_Translate_Adapter_Gettext, nquery) {
     
     	if (!(!(Z_TYPE_P(&domain) == IS_UNDEF) && Z_STRLEN_P(&domain))) {
     		ZVAL_LONG(&_0$$3, count);
    -		ZEPHIR_CALL_FUNCTION(&translation, "ngettext", NULL, 452, &msgid1, &msgid2, &_0$$3);
    +		ZEPHIR_CALL_FUNCTION(&translation, "ngettext", NULL, 451, &msgid1, &msgid2, &_0$$3);
     		zephir_check_call_status();
     	} else {
     		ZVAL_LONG(&_1$$4, count);
    -		ZEPHIR_CALL_FUNCTION(&translation, "dngettext", NULL, 453, &domain, &msgid1, &msgid2, &_1$$4);
    +		ZEPHIR_CALL_FUNCTION(&translation, "dngettext", NULL, 452, &domain, &msgid1, &msgid2, &_1$$4);
     		zephir_check_call_status();
     	}
     	ZEPHIR_RETURN_CALL_METHOD(this_ptr, "replaceplaceholders", NULL, 0, &translation, placeholders);
    @@ -335,7 +335,7 @@ PHP_METHOD(Phalcon_Translate_Adapter_Gettext, setDomain) {
     
     
     
    -	ZEPHIR_RETURN_CALL_FUNCTION("textdomain", NULL, 454, domain);
    +	ZEPHIR_RETURN_CALL_FUNCTION("textdomain", NULL, 453, domain);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -356,7 +356,7 @@ PHP_METHOD(Phalcon_Translate_Adapter_Gettext, resetDomain) {
     
     	ZEPHIR_CALL_METHOD(&_0, this_ptr, "getdefaultdomain", NULL, 0);
     	zephir_check_call_status();
    -	ZEPHIR_RETURN_CALL_FUNCTION("textdomain", NULL, 454, &_0);
    +	ZEPHIR_RETURN_CALL_FUNCTION("textdomain", NULL, 453, &_0);
     	zephir_check_call_status();
     	RETURN_MM();
     
    @@ -446,7 +446,7 @@ PHP_METHOD(Phalcon_Translate_Adapter_Gettext, setDirectory) {
     			}
     			ZEPHIR_INIT_NVAR(&value);
     			ZVAL_COPY(&value, _0$$4);
    -			ZEPHIR_CALL_FUNCTION(NULL, "bindtextdomain", &_3, 455, &key, &value);
    +			ZEPHIR_CALL_FUNCTION(NULL, "bindtextdomain", &_3, 454, &key, &value);
     			zephir_check_call_status();
     		} ZEND_HASH_FOREACH_END();
     		ZEPHIR_INIT_NVAR(&value);
    @@ -454,7 +454,7 @@ PHP_METHOD(Phalcon_Translate_Adapter_Gettext, setDirectory) {
     	} else {
     		ZEPHIR_CALL_METHOD(&_4$$6, this_ptr, "getdefaultdomain", NULL, 0);
     		zephir_check_call_status();
    -		ZEPHIR_CALL_FUNCTION(NULL, "bindtextdomain", &_3, 455, &_4$$6, directory);
    +		ZEPHIR_CALL_FUNCTION(NULL, "bindtextdomain", &_3, 454, &_4$$6, directory);
     		zephir_check_call_status();
     	}
     	ZEPHIR_MM_RESTORE();
    @@ -526,17 +526,17 @@ PHP_METHOD(Phalcon_Translate_Adapter_Gettext, setLocale) {
     	zephir_read_property(&_3, this_ptr, SL("_locale"), PH_NOISY_CC | PH_READONLY);
     	ZEPHIR_INIT_VAR(&_4);
     	ZEPHIR_CONCAT_SV(&_4, "LC_ALL=", &_3);
    -	ZEPHIR_CALL_FUNCTION(NULL, "putenv", NULL, 456, &_4);
    +	ZEPHIR_CALL_FUNCTION(NULL, "putenv", NULL, 455, &_4);
     	zephir_check_call_status();
     	zephir_read_property(&_5, this_ptr, SL("_locale"), PH_NOISY_CC | PH_READONLY);
     	ZEPHIR_INIT_VAR(&_6);
     	ZEPHIR_CONCAT_SV(&_6, "LANG=", &_5);
    -	ZEPHIR_CALL_FUNCTION(NULL, "putenv", NULL, 456, &_6);
    +	ZEPHIR_CALL_FUNCTION(NULL, "putenv", NULL, 455, &_6);
     	zephir_check_call_status();
     	zephir_read_property(&_7, this_ptr, SL("_locale"), PH_NOISY_CC | PH_READONLY);
     	ZEPHIR_INIT_VAR(&_8);
     	ZEPHIR_CONCAT_SV(&_8, "LANGUAGE=", &_7);
    -	ZEPHIR_CALL_FUNCTION(NULL, "putenv", NULL, 456, &_8);
    +	ZEPHIR_CALL_FUNCTION(NULL, "putenv", NULL, 455, &_8);
     	zephir_check_call_status();
     	zephir_read_property(&_9, this_ptr, SL("_locale"), PH_NOISY_CC | PH_READONLY);
     	ZVAL_LONG(&_10, 6);
    diff --git a/ext/phalcon/translate/interpolator/indexedarray.zep.c b/ext/phalcon/translate/interpolator/indexedarray.zep.c
    index b631409d845..4f27b1ebf60 100644
    --- a/ext/phalcon/translate/interpolator/indexedarray.zep.c
    +++ b/ext/phalcon/translate/interpolator/indexedarray.zep.c
    @@ -77,7 +77,7 @@ PHP_METHOD(Phalcon_Translate_Interpolator_IndexedArray, replacePlaceholders) {
     	}
     	if (_0) {
     		ZEPHIR_MAKE_REF(placeholders);
    -		ZEPHIR_CALL_FUNCTION(NULL, "array_unshift", NULL, 393, placeholders, &translation);
    +		ZEPHIR_CALL_FUNCTION(NULL, "array_unshift", NULL, 392, placeholders, &translation);
     		ZEPHIR_UNREF(placeholders);
     		zephir_check_call_status();
     		ZEPHIR_INIT_VAR(&_1$$3);
    diff --git a/ext/phalcon/mvc/url.zep.c b/ext/phalcon/url.zep.c
    similarity index 87%
    rename from ext/phalcon/mvc/url.zep.c
    rename to ext/phalcon/url.zep.c
    index 5637756b36f..00cc24d3cdd 100644
    --- a/ext/phalcon/mvc/url.zep.c
    +++ b/ext/phalcon/url.zep.c
    @@ -1,11 +1,11 @@
     
     #ifdef HAVE_CONFIG_H
    -#include "../../ext_config.h"
    +#include "../ext_config.h"
     #endif
     
     #include 
    -#include "../../php_ext.h"
    -#include "../../ext.h"
    +#include "../php_ext.h"
    +#include "../ext.h"
     
     #include 
     #include 
    @@ -21,7 +21,7 @@
     #include "kernel/object.h"
     #include "kernel/concat.h"
     #include "ext/spl/spl_exceptions.h"
    -#include "phalcon/mvc/url/utils.h"
    +#include "phalcon/url/utils.h"
     
     
     /**
    @@ -33,7 +33,7 @@
      * file that was distributed with this source code.
      */
     /**
    - * Phalcon\Mvc\Url
    + * Phalcon\Url
      *
      * This components helps in the generation of: URIs, URLs and Paths
      *
    @@ -51,34 +51,34 @@
      * );
      *
      */
    -ZEPHIR_INIT_CLASS(Phalcon_Mvc_Url) {
    +ZEPHIR_INIT_CLASS(Phalcon_Url) {
     
    -	ZEPHIR_REGISTER_CLASS(Phalcon\\Mvc, Url, phalcon, mvc_url, phalcon_mvc_url_method_entry, 0);
    +	ZEPHIR_REGISTER_CLASS(Phalcon, Url, phalcon, url, phalcon_url_method_entry, 0);
     
     	/**
     	 * @var null | string
     	 */
    -	zend_declare_property_null(phalcon_mvc_url_ce, SL("baseUri"), ZEND_ACC_PROTECTED TSRMLS_CC);
    +	zend_declare_property_null(phalcon_url_ce, SL("baseUri"), ZEND_ACC_PROTECTED TSRMLS_CC);
     
     	/**
     	 * @var null | string
     	 */
    -	zend_declare_property_null(phalcon_mvc_url_ce, SL("basePath"), ZEND_ACC_PROTECTED TSRMLS_CC);
    +	zend_declare_property_null(phalcon_url_ce, SL("basePath"), ZEND_ACC_PROTECTED TSRMLS_CC);
     
     	/**
     	 * @var 
     	 */
    -	zend_declare_property_null(phalcon_mvc_url_ce, SL("container"), ZEND_ACC_PROTECTED TSRMLS_CC);
    +	zend_declare_property_null(phalcon_url_ce, SL("container"), ZEND_ACC_PROTECTED TSRMLS_CC);
     
    -	zend_declare_property_null(phalcon_mvc_url_ce, SL("router"), ZEND_ACC_PROTECTED TSRMLS_CC);
    +	zend_declare_property_null(phalcon_url_ce, SL("router"), ZEND_ACC_PROTECTED TSRMLS_CC);
     
     	/**
     	 * @var null | string
     	 */
    -	zend_declare_property_null(phalcon_mvc_url_ce, SL("staticBaseUri"), ZEND_ACC_PROTECTED TSRMLS_CC);
    +	zend_declare_property_null(phalcon_url_ce, SL("staticBaseUri"), ZEND_ACC_PROTECTED TSRMLS_CC);
     
    -	zend_class_implements(phalcon_mvc_url_ce TSRMLS_CC, 1, phalcon_mvc_urlinterface_ce);
    -	zend_class_implements(phalcon_mvc_url_ce TSRMLS_CC, 1, phalcon_di_injectionawareinterface_ce);
    +	zend_class_implements(phalcon_url_ce TSRMLS_CC, 1, phalcon_urlinterface_ce);
    +	zend_class_implements(phalcon_url_ce TSRMLS_CC, 1, phalcon_di_injectionawareinterface_ce);
     	return SUCCESS;
     
     }
    @@ -116,7 +116,7 @@ ZEPHIR_INIT_CLASS(Phalcon_Mvc_Url) {
      * );
      *
      */
    -PHP_METHOD(Phalcon_Mvc_Url, get) {
    +PHP_METHOD(Phalcon_Url, get) {
     
     	unsigned char _20$$14, _22$$14, _27$$16;
     	zval strUri, _15$$14;
    @@ -187,9 +187,9 @@ PHP_METHOD(Phalcon_Mvc_Url, get) {
     	if (local == 0) {
     		_0$$3 = Z_TYPE_P(uri) == IS_STRING;
     		if (_0$$3) {
    -			_1$$3 = zephir_memnstr_str(uri, SL("//"), "phalcon/mvc/url.zep", 103);
    +			_1$$3 = zephir_memnstr_str(uri, SL("//"), "phalcon/url.zep", 103);
     			if (!(_1$$3)) {
    -				_1$$3 = zephir_memnstr_str(uri, SL(":"), "phalcon/mvc/url.zep", 103);
    +				_1$$3 = zephir_memnstr_str(uri, SL(":"), "phalcon/url.zep", 103);
     			}
     			_0$$3 = _1$$3;
     		}
    @@ -217,7 +217,7 @@ PHP_METHOD(Phalcon_Mvc_Url, get) {
     	if (Z_TYPE_P(uri) == IS_ARRAY) {
     		ZEPHIR_OBS_VAR(&routeName);
     		if (!(zephir_array_isset_string_fetch(&routeName, uri, SL("for"), 0))) {
    -			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_url_exception_ce, "It's necessary to define the route name with the parameter 'for'", "phalcon/mvc/url.zep", 121);
    +			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_url_exception_ce, "It's necessary to define the route name with the parameter 'for'", "phalcon/url.zep", 121);
     			return;
     		}
     		zephir_read_property(&_6$$9, this_ptr, SL("router"), PH_NOISY_CC | PH_READONLY);
    @@ -226,7 +226,7 @@ PHP_METHOD(Phalcon_Mvc_Url, get) {
     			zephir_read_property(&_7$$11, this_ptr, SL("container"), PH_NOISY_CC | PH_READONLY);
     			ZEPHIR_CPY_WRT(&dependencyInjector, &_7$$11);
     			if (Z_TYPE_P(&dependencyInjector) != IS_OBJECT) {
    -				ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_mvc_url_exception_ce, "A dependency injector container is required to obtain the 'router' service", "phalcon/mvc/url.zep", 133);
    +				ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_url_exception_ce, "A dependency injector container is required to obtain the 'router' service", "phalcon/url.zep", 133);
     				return;
     			}
     			ZEPHIR_INIT_VAR(&_9$$11);
    @@ -241,12 +241,12 @@ PHP_METHOD(Phalcon_Mvc_Url, get) {
     		ZEPHIR_CPY_WRT(&route, &_10$$9);
     		if (Z_TYPE_P(&route) != IS_OBJECT) {
     			ZEPHIR_INIT_VAR(&_11$$13);
    -			object_init_ex(&_11$$13, phalcon_mvc_url_exception_ce);
    +			object_init_ex(&_11$$13, phalcon_url_exception_ce);
     			ZEPHIR_INIT_VAR(&_12$$13);
     			ZEPHIR_CONCAT_SVS(&_12$$13, "Cannot obtain a route using the name '", &routeName, "'");
     			ZEPHIR_CALL_METHOD(NULL, &_11$$13, "__construct", NULL, 4, &_12$$13);
     			zephir_check_call_status();
    -			zephir_throw_exception_debug(&_11$$13, "phalcon/mvc/url.zep", 145 TSRMLS_CC);
    +			zephir_throw_exception_debug(&_11$$13, "phalcon/url.zep", 145 TSRMLS_CC);
     			ZEPHIR_MM_RESTORE();
     			return;
     		}
    @@ -303,7 +303,7 @@ PHP_METHOD(Phalcon_Mvc_Url, get) {
     		}
     	}
     	if (zephir_is_true(args)) {
    -		ZEPHIR_CALL_FUNCTION(&queryString, "http_build_query", NULL, 378, args);
    +		ZEPHIR_CALL_FUNCTION(&queryString, "http_build_query", NULL, 456, args);
     		zephir_check_call_status();
     		_28$$19 = Z_TYPE_P(&queryString) == IS_STRING;
     		if (_28$$19) {
    @@ -333,7 +333,7 @@ PHP_METHOD(Phalcon_Mvc_Url, get) {
     /**
      * Returns the base path
      */
    -PHP_METHOD(Phalcon_Mvc_Url, getBasePath) {
    +PHP_METHOD(Phalcon_Url, getBasePath) {
     
     	zval *this_ptr = getThis();
     
    @@ -345,7 +345,7 @@ PHP_METHOD(Phalcon_Mvc_Url, getBasePath) {
     /**
      * Returns the prefix for all the generated urls. By default /
      */
    -PHP_METHOD(Phalcon_Mvc_Url, getBaseUri) {
    +PHP_METHOD(Phalcon_Url, getBaseUri) {
     
     	zval *_SERVER, baseUri, phpSelf, uri, _0;
     	zval *this_ptr = getThis();
    @@ -384,7 +384,7 @@ PHP_METHOD(Phalcon_Mvc_Url, getBaseUri) {
     /**
      * Returns the DependencyInjector container
      */
    -PHP_METHOD(Phalcon_Mvc_Url, getDI) {
    +PHP_METHOD(Phalcon_Url, getDI) {
     
     	zval *this_ptr = getThis();
     
    @@ -408,7 +408,7 @@ PHP_METHOD(Phalcon_Mvc_Url, getDI) {
      * );
      *
      */
    -PHP_METHOD(Phalcon_Mvc_Url, getStatic) {
    +PHP_METHOD(Phalcon_Url, getStatic) {
     
     	zend_long ZEPHIR_LAST_CALL_STATUS;
     	zval *uri = NULL, uri_sub, __$null, _0, _1, _2;
    @@ -442,7 +442,7 @@ PHP_METHOD(Phalcon_Mvc_Url, getStatic) {
     /**
      * Returns the prefix for all the generated static urls. By default /
      */
    -PHP_METHOD(Phalcon_Mvc_Url, getStaticBaseUri) {
    +PHP_METHOD(Phalcon_Url, getStaticBaseUri) {
     
     	zval staticBaseUri, _0;
     	zend_long ZEPHIR_LAST_CALL_STATUS;
    @@ -471,7 +471,7 @@ PHP_METHOD(Phalcon_Mvc_Url, getStaticBaseUri) {
      * $url->setBasePath("/var/www/htdocs/");
      *
      */
    -PHP_METHOD(Phalcon_Mvc_Url, setBasePath) {
    +PHP_METHOD(Phalcon_Url, setBasePath) {
     
     	zval *basePath_param = NULL;
     	zval basePath;
    @@ -508,7 +508,7 @@ PHP_METHOD(Phalcon_Mvc_Url, setBasePath) {
      * $url->setBaseUri("/invo/index.php/");
      *
      */
    -PHP_METHOD(Phalcon_Mvc_Url, setBaseUri) {
    +PHP_METHOD(Phalcon_Url, setBaseUri) {
     
     	zval *baseUri_param = NULL, _0;
     	zval baseUri;
    @@ -544,7 +544,7 @@ PHP_METHOD(Phalcon_Mvc_Url, setBaseUri) {
     /**
      * Sets the DependencyInjector container
      */
    -PHP_METHOD(Phalcon_Mvc_Url, setDI) {
    +PHP_METHOD(Phalcon_Url, setDI) {
     
     	zval *dependencyInjector, dependencyInjector_sub;
     	zval *this_ptr = getThis();
    @@ -566,7 +566,7 @@ PHP_METHOD(Phalcon_Mvc_Url, setDI) {
      * $url->setStaticBaseUri("/invo/");
      *
      */
    -PHP_METHOD(Phalcon_Mvc_Url, setStaticBaseUri) {
    +PHP_METHOD(Phalcon_Url, setStaticBaseUri) {
     
     	zval *staticBaseUri_param = NULL;
     	zval staticBaseUri;
    @@ -597,7 +597,7 @@ PHP_METHOD(Phalcon_Mvc_Url, setStaticBaseUri) {
     /**
      * Generates a local path
      */
    -PHP_METHOD(Phalcon_Mvc_Url, path) {
    +PHP_METHOD(Phalcon_Url, path) {
     
     	zval *path_param = NULL, _0;
     	zval path;
    diff --git a/ext/phalcon/url.zep.h b/ext/phalcon/url.zep.h
    new file mode 100644
    index 00000000000..111f0b8fe97
    --- /dev/null
    +++ b/ext/phalcon/url.zep.h
    @@ -0,0 +1,134 @@
    +
    +extern zend_class_entry *phalcon_url_ce;
    +
    +ZEPHIR_INIT_CLASS(Phalcon_Url);
    +
    +PHP_METHOD(Phalcon_Url, get);
    +PHP_METHOD(Phalcon_Url, getBasePath);
    +PHP_METHOD(Phalcon_Url, getBaseUri);
    +PHP_METHOD(Phalcon_Url, getDI);
    +PHP_METHOD(Phalcon_Url, getStatic);
    +PHP_METHOD(Phalcon_Url, getStaticBaseUri);
    +PHP_METHOD(Phalcon_Url, setBasePath);
    +PHP_METHOD(Phalcon_Url, setBaseUri);
    +PHP_METHOD(Phalcon_Url, setDI);
    +PHP_METHOD(Phalcon_Url, setStaticBaseUri);
    +PHP_METHOD(Phalcon_Url, path);
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_get, 0, 0, IS_STRING, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_get, 0, 0, IS_STRING, NULL, 0)
    +#endif
    +	ZEND_ARG_INFO(0, uri)
    +	ZEND_ARG_INFO(0, args)
    +#if PHP_VERSION_ID >= 70200
    +	ZEND_ARG_TYPE_INFO(0, local, _IS_BOOL, 1)
    +#else
    +	ZEND_ARG_INFO(0, local)
    +#endif
    +	ZEND_ARG_INFO(0, baseUri)
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_getbasepath, 0, 0, IS_STRING, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_getbasepath, 0, 0, IS_STRING, NULL, 0)
    +#endif
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_getbaseuri, 0, 0, IS_STRING, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_getbaseuri, 0, 0, IS_STRING, NULL, 0)
    +#endif
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_url_getdi, 0, 0, Phalcon\\DiInterface, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_getdi, 0, 0, IS_OBJECT, "Phalcon\\DiInterface", 0)
    +#endif
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_getstatic, 0, 0, IS_STRING, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_getstatic, 0, 0, IS_STRING, NULL, 0)
    +#endif
    +	ZEND_ARG_INFO(0, uri)
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_getstaticbaseuri, 0, 0, IS_STRING, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_getstaticbaseuri, 0, 0, IS_STRING, NULL, 0)
    +#endif
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_url_setbasepath, 0, 1, Phalcon\\UrlInterface, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_setbasepath, 0, 1, IS_OBJECT, "Phalcon\\UrlInterface", 0)
    +#endif
    +#if PHP_VERSION_ID >= 70200
    +	ZEND_ARG_TYPE_INFO(0, basePath, IS_STRING, 0)
    +#else
    +	ZEND_ARG_INFO(0, basePath)
    +#endif
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_url_setbaseuri, 0, 1, Phalcon\\UrlInterface, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_setbaseuri, 0, 1, IS_OBJECT, "Phalcon\\UrlInterface", 0)
    +#endif
    +#if PHP_VERSION_ID >= 70200
    +	ZEND_ARG_TYPE_INFO(0, baseUri, IS_STRING, 0)
    +#else
    +	ZEND_ARG_INFO(0, baseUri)
    +#endif
    +ZEND_END_ARG_INFO()
    +
    +ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_url_setdi, 0, 0, 1)
    +	ZEND_ARG_OBJ_INFO(0, dependencyInjector, Phalcon\\DiInterface, 0)
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_url_setstaticbaseuri, 0, 1, Phalcon\\UrlInterface, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_setstaticbaseuri, 0, 1, IS_OBJECT, "Phalcon\\UrlInterface", 0)
    +#endif
    +#if PHP_VERSION_ID >= 70200
    +	ZEND_ARG_TYPE_INFO(0, staticBaseUri, IS_STRING, 0)
    +#else
    +	ZEND_ARG_INFO(0, staticBaseUri)
    +#endif
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_path, 0, 0, IS_STRING, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_url_path, 0, 0, IS_STRING, NULL, 0)
    +#endif
    +#if PHP_VERSION_ID >= 70200
    +	ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 1)
    +#else
    +	ZEND_ARG_INFO(0, path)
    +#endif
    +ZEND_END_ARG_INFO()
    +
    +ZEPHIR_INIT_FUNCS(phalcon_url_method_entry) {
    +	PHP_ME(Phalcon_Url, get, arginfo_phalcon_url_get, ZEND_ACC_PUBLIC)
    +	PHP_ME(Phalcon_Url, getBasePath, arginfo_phalcon_url_getbasepath, ZEND_ACC_PUBLIC)
    +	PHP_ME(Phalcon_Url, getBaseUri, arginfo_phalcon_url_getbaseuri, ZEND_ACC_PUBLIC)
    +	PHP_ME(Phalcon_Url, getDI, arginfo_phalcon_url_getdi, ZEND_ACC_PUBLIC)
    +	PHP_ME(Phalcon_Url, getStatic, arginfo_phalcon_url_getstatic, ZEND_ACC_PUBLIC)
    +	PHP_ME(Phalcon_Url, getStaticBaseUri, arginfo_phalcon_url_getstaticbaseuri, ZEND_ACC_PUBLIC)
    +	PHP_ME(Phalcon_Url, setBasePath, arginfo_phalcon_url_setbasepath, ZEND_ACC_PUBLIC)
    +	PHP_ME(Phalcon_Url, setBaseUri, arginfo_phalcon_url_setbaseuri, ZEND_ACC_PUBLIC)
    +	PHP_ME(Phalcon_Url, setDI, arginfo_phalcon_url_setdi, ZEND_ACC_PUBLIC)
    +	PHP_ME(Phalcon_Url, setStaticBaseUri, arginfo_phalcon_url_setstaticbaseuri, ZEND_ACC_PUBLIC)
    +	PHP_ME(Phalcon_Url, path, arginfo_phalcon_url_path, ZEND_ACC_PUBLIC)
    +	PHP_FE_END
    +};
    diff --git a/ext/phalcon/url/exception.zep.c b/ext/phalcon/url/exception.zep.c
    new file mode 100644
    index 00000000000..68ab3c74860
    --- /dev/null
    +++ b/ext/phalcon/url/exception.zep.c
    @@ -0,0 +1,37 @@
    +
    +#ifdef HAVE_CONFIG_H
    +#include "../../ext_config.h"
    +#endif
    +
    +#include 
    +#include "../../php_ext.h"
    +#include "../../ext.h"
    +
    +#include 
    +#include 
    +#include 
    +
    +#include "kernel/main.h"
    +
    +
    +/**
    + * This file is part of the Phalcon Framework.
    + *
    + * (c) Phalcon Team 
    + *
    + * For the full copyright and license information, please view the LICENSE.txt
    + * file that was distributed with this source code.
    + */
    +/**
    + * Phalcon\Url\Exception
    + *
    + * Exceptions thrown in Phalcon\Url will use this class
    + */
    +ZEPHIR_INIT_CLASS(Phalcon_Url_Exception) {
    +
    +	ZEPHIR_REGISTER_CLASS_EX(Phalcon\\Url, Exception, phalcon, url_exception, phalcon_exception_ce, NULL, 0);
    +
    +	return SUCCESS;
    +
    +}
    +
    diff --git a/ext/phalcon/url/exception.zep.h b/ext/phalcon/url/exception.zep.h
    new file mode 100644
    index 00000000000..37fc57d55b5
    --- /dev/null
    +++ b/ext/phalcon/url/exception.zep.h
    @@ -0,0 +1,5 @@
    +
    +extern zend_class_entry *phalcon_url_exception_ce;
    +
    +ZEPHIR_INIT_CLASS(Phalcon_Url_Exception);
    +
    diff --git a/ext/phalcon/mvc/url/utils.c b/ext/phalcon/url/utils.c
    similarity index 70%
    rename from ext/phalcon/mvc/url/utils.c
    rename to ext/phalcon/url/utils.c
    index 7fddf120f7a..306a6fc81cf 100644
    --- a/ext/phalcon/mvc/url/utils.c
    +++ b/ext/phalcon/url/utils.c
    @@ -1,21 +1,12 @@
     
    -/*
    - +------------------------------------------------------------------------+
    - | Phalcon Framework                                                      |
    - +------------------------------------------------------------------------+
    - | Copyright (c) 2011-2016 Phalcon Team (https://phalconphp.com)          |
    - +------------------------------------------------------------------------+
    - | This source file is subject to the New BSD License that is bundled     |
    - | with this package in the file docs/LICENSE.txt.                        |
    - |                                                                        |
    - | If you did not receive a copy of the license and are unable to         |
    - | obtain it through the world-wide-web, please send an email             |
    - | to license@phalconphp.com so we can send you a copy immediately.       |
    - +------------------------------------------------------------------------+
    - | Authors: Andres Gutierrez                       |
    - |          Eduar Carvajal                          |
    - +------------------------------------------------------------------------+
    -*/
    +/**
    + * This file is part of the Phalcon.
    + *
    + * (c) Phalcon Team 
    + *
    + * For the full copyright and license information, please view the LICENSE
    + * file that was distributed with this source code.
    + */
     
     #ifdef HAVE_CONFIG_H
     #include "config.h"
    @@ -30,12 +21,8 @@
     #include "kernel/fcall.h"
     #include "kernel/exception.h"
     
    -#if PHP_VERSION_ID < 70000
    -#include 
    -#else
     #include 
     #include 
    -#endif
     
     #include 
     
    @@ -60,11 +47,7 @@ void phalcon_get_uri(zval *return_value, zval *path)
     					str = emalloc(mark - i + 1);
     					memcpy(str, Z_STRVAL_P(path) + i, mark - i);
     					str[mark - i] = '\0';
    -#if PHP_VERSION_ID < 70000
    -					ZVAL_STRINGL(return_value, str, mark - i, 0);
    -#else
     					ZVAL_STRINGL(return_value, str, mark - i);
    -#endif
     					return;
     				}
     			}
    @@ -80,12 +63,7 @@ zval *phalcon_replace_marker(int named, zval *paths, zval *replacements, unsigne
     	unsigned int length = 0, variable_length, ch, j;
     	char *item = NULL, *cursor_var, *variable = NULL;
     	int not_valid = 0;
    -#if PHP_VERSION_ID < 70000
    -	int result = FAILURE;
    -	zval **zv, **tmp;
    -#else
     	zval *zv, *tmp;
    -#endif
     
     	if (named) {
     		length = cursor - marker - 1;
    @@ -125,15 +103,6 @@ zval *phalcon_replace_marker(int named, zval *paths, zval *replacements, unsigne
     					item = variable;
     					length = variable_length;
     				}
    -#if PHP_VERSION_ID < 70000
    -				if (zend_hash_exists(Z_ARRVAL_P(replacements), item, length + 1)) {
    -					if ((result = zend_hash_find(Z_ARRVAL_P(replacements), item, length + 1, (void**) &zv)) == SUCCESS) {
    -						efree(item);
    -						(*position)++;
    -						return *zv;
    -					}
    -				}
    -#else
     				if (zend_hash_str_exists(Z_ARRVAL_P(replacements), item, length)) {
     					if ((zv = zend_hash_str_find(Z_ARRVAL_P(replacements), item, length)) != NULL) {
     						efree(item);
    @@ -141,20 +110,7 @@ zval *phalcon_replace_marker(int named, zval *paths, zval *replacements, unsigne
     						return zv;
     					}
     				}
    -#endif
     			} else {
    -#if PHP_VERSION_ID < 70000
    -				if ((result = zend_hash_index_find(Z_ARRVAL_P(paths), *position, (void**) &zv)) == SUCCESS) {
    -					if (Z_TYPE_PP(zv) == IS_STRING) {
    -						if (zend_hash_exists(Z_ARRVAL_P(replacements), Z_STRVAL_PP(zv), Z_STRLEN_PP(zv) + 1)) {
    -							if ((result = zend_hash_find(Z_ARRVAL_P(replacements), Z_STRVAL_PP(zv), Z_STRLEN_PP(zv) + 1, (void**) &tmp)) == SUCCESS) {
    -								(*position)++;
    -								return *tmp;
    -							}
    -						}
    -					}
    -				}
    -#else
     				if ((zv = zend_hash_index_find(Z_ARRVAL_P(paths), *position)) != NULL) {
     					if (Z_TYPE_P(zv) == IS_STRING) {
     						if (zend_hash_str_exists(Z_ARRVAL_P(replacements), Z_STRVAL_P(zv), Z_STRLEN_P(zv))) {
    @@ -165,7 +121,6 @@ zval *phalcon_replace_marker(int named, zval *paths, zval *replacements, unsigne
     						}
     					}
     				}
    -#endif
     			}
     		}
     
    @@ -215,11 +170,7 @@ void phalcon_replace_paths(zval *return_value, zval *pattern, zval *paths, zval
     	}
     
     	if (!zend_hash_num_elements(Z_ARRVAL_P(paths))) {
    -#if PHP_VERSION_ID < 70000
    -		ZVAL_STRINGL(return_value, Z_STRVAL_P(pattern) + i, Z_STRLEN_P(pattern) - i, 1);
    -#else
     		ZVAL_STRINGL(return_value, Z_STRVAL_P(pattern) + i, Z_STRLEN_P(pattern) - i);
    -#endif
     		return;
     	}
     
    @@ -246,11 +197,7 @@ void phalcon_replace_paths(zval *return_value, zval *pattern, zval *paths, zval
     							if (replace) {
     								use_copy = 0;
     								if (Z_TYPE_P(replace) != IS_STRING) {
    -#if PHP_VERSION_ID < 70000
    -									zend_make_printable_zval(replace, &replace_copy, &use_copy);
    -#else
     									use_copy = zend_make_printable_zval(replace, &replace_copy);
    -#endif
     									if (use_copy) {
     										replace = &replace_copy;
     									}
    @@ -284,11 +231,7 @@ void phalcon_replace_paths(zval *return_value, zval *pattern, zval *paths, zval
     							if (replace) {
     								use_copy = 0;
     								if (Z_TYPE_P(replace) != IS_STRING) {
    -#if PHP_VERSION_ID < 70000
    -									zend_make_printable_zval(replace, &replace_copy, &use_copy);
    -#else
     									use_copy = zend_make_printable_zval(replace, &replace_copy);
    -#endif
     									if (use_copy) {
     										replace = &replace_copy;
     									}
    @@ -314,11 +257,7 @@ void phalcon_replace_paths(zval *return_value, zval *pattern, zval *paths, zval
     						if (replace) {
     							use_copy = 0;
     							if (Z_TYPE_P(replace) != IS_STRING) {
    -#if PHP_VERSION_ID < 70000
    -								zend_make_printable_zval(replace, &replace_copy, &use_copy);
    -#else
     								use_copy = zend_make_printable_zval(replace, &replace_copy);
    -#endif
     								if (use_copy) {
     									replace = &replace_copy;
     								}
    @@ -351,19 +290,10 @@ void phalcon_replace_paths(zval *return_value, zval *pattern, zval *paths, zval
     	}
     	smart_str_0(&route_str);
     
    -#if PHP_VERSION_ID < 70000
    -	if (route_str.len) {
    -		RETURN_STRINGL(route_str.c, route_str.len, 0);
    -	} else {
    -		smart_str_free(&route_str);
    -		RETURN_EMPTY_STRING();
    -	}
    -#else
     	if (route_str.s) {
     		RETURN_STR(route_str.s);
     	} else {
     		smart_str_free(&route_str);
     		RETURN_EMPTY_STRING();
     	}
    -#endif
     }
    diff --git a/ext/phalcon/url/utils.h b/ext/phalcon/url/utils.h
    new file mode 100644
    index 00000000000..61cab5fd6e1
    --- /dev/null
    +++ b/ext/phalcon/url/utils.h
    @@ -0,0 +1,21 @@
    +
    +/**
    + * This file is part of the Phalcon.
    + *
    + * (c) Phalcon Team 
    + *
    + * For the full copyright and license information, please view the LICENSE
    + * file that was distributed with this source code.
    + */
    +
    +#ifndef PHALCON_URL_UTILS_H
    +#define PHALCON_URL_UTILS_H
    +
    +#include 
    +
    +/* Extract named parameters */
    +void phalcon_get_uri(zval *return_value, zval *path);
    +void phalcon_extract_named_params(zval *return_value, zval *str, zval *matches);
    +void phalcon_replace_paths(zval *return_value, zval *pattern, zval *paths, zval *uri TSRMLS_DC);
    +
    +#endif /* PHALCON_URL_UTILS_H */
    diff --git a/ext/phalcon/mvc/urlinterface.zep.c b/ext/phalcon/urlinterface.zep.c
    similarity index 54%
    rename from ext/phalcon/mvc/urlinterface.zep.c
    rename to ext/phalcon/urlinterface.zep.c
    index 2a66fdf35b6..7d108e68049 100644
    --- a/ext/phalcon/mvc/urlinterface.zep.c
    +++ b/ext/phalcon/urlinterface.zep.c
    @@ -1,11 +1,11 @@
     
     #ifdef HAVE_CONFIG_H
    -#include "../../ext_config.h"
    +#include "../ext_config.h"
     #endif
     
     #include 
    -#include "../../php_ext.h"
    -#include "../../ext.h"
    +#include "../php_ext.h"
    +#include "../ext.h"
     
     #include 
     
    @@ -21,13 +21,13 @@
      * file that was distributed with this source code.
      */
     /**
    - * Phalcon\Mvc\UrlInterface
    + * Phalcon\UrlInterface
      *
    - * Interface for Phalcon\Mvc\UrlInterface
    + * Interface for Phalcon\UrlInterface
      */
    -ZEPHIR_INIT_CLASS(Phalcon_Mvc_UrlInterface) {
    +ZEPHIR_INIT_CLASS(Phalcon_UrlInterface) {
     
    -	ZEPHIR_REGISTER_INTERFACE(Phalcon\\Mvc, UrlInterface, phalcon, mvc_urlinterface, phalcon_mvc_urlinterface_method_entry);
    +	ZEPHIR_REGISTER_INTERFACE(Phalcon, UrlInterface, phalcon, urlinterface, phalcon_urlinterface_method_entry);
     
     	return SUCCESS;
     
    @@ -39,30 +39,30 @@ ZEPHIR_INIT_CLASS(Phalcon_Mvc_UrlInterface) {
      * @param string|array uri
      * @param array|object args Optional arguments to be appended to the query string
      */
    -ZEPHIR_DOC_METHOD(Phalcon_Mvc_UrlInterface, get);
    +ZEPHIR_DOC_METHOD(Phalcon_UrlInterface, get);
     
     /**
      * Returns a base path
      */
    -ZEPHIR_DOC_METHOD(Phalcon_Mvc_UrlInterface, getBasePath);
    +ZEPHIR_DOC_METHOD(Phalcon_UrlInterface, getBasePath);
     
     /**
      * Returns the prefix for all the generated urls. By default /
      */
    -ZEPHIR_DOC_METHOD(Phalcon_Mvc_UrlInterface, getBaseUri);
    +ZEPHIR_DOC_METHOD(Phalcon_UrlInterface, getBaseUri);
     
     /**
      * Sets a base paths for all the generated paths
      */
    -ZEPHIR_DOC_METHOD(Phalcon_Mvc_UrlInterface, setBasePath);
    +ZEPHIR_DOC_METHOD(Phalcon_UrlInterface, setBasePath);
     
     /**
      * Sets a prefix to all the urls generated
      */
    -ZEPHIR_DOC_METHOD(Phalcon_Mvc_UrlInterface, setBaseUri);
    +ZEPHIR_DOC_METHOD(Phalcon_UrlInterface, setBaseUri);
     
     /**
      * Generates a local path
      */
    -ZEPHIR_DOC_METHOD(Phalcon_Mvc_UrlInterface, path);
    +ZEPHIR_DOC_METHOD(Phalcon_UrlInterface, path);
     
    diff --git a/ext/phalcon/urlinterface.zep.h b/ext/phalcon/urlinterface.zep.h
    new file mode 100644
    index 00000000000..e8b4f599b38
    --- /dev/null
    +++ b/ext/phalcon/urlinterface.zep.h
    @@ -0,0 +1,78 @@
    +
    +extern zend_class_entry *phalcon_urlinterface_ce;
    +
    +ZEPHIR_INIT_CLASS(Phalcon_UrlInterface);
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_urlinterface_get, 0, 0, IS_STRING, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_urlinterface_get, 0, 0, IS_STRING, NULL, 0)
    +#endif
    +	ZEND_ARG_INFO(0, uri)
    +	ZEND_ARG_INFO(0, args)
    +#if PHP_VERSION_ID >= 70200
    +	ZEND_ARG_TYPE_INFO(0, local, _IS_BOOL, 1)
    +#else
    +	ZEND_ARG_INFO(0, local)
    +#endif
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_urlinterface_getbasepath, 0, 0, IS_STRING, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_urlinterface_getbasepath, 0, 0, IS_STRING, NULL, 0)
    +#endif
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_urlinterface_getbaseuri, 0, 0, IS_STRING, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_urlinterface_getbaseuri, 0, 0, IS_STRING, NULL, 0)
    +#endif
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_urlinterface_setbasepath, 0, 1, Phalcon\\UrlInterface, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_urlinterface_setbasepath, 0, 1, IS_OBJECT, "Phalcon\\UrlInterface", 0)
    +#endif
    +#if PHP_VERSION_ID >= 70200
    +	ZEND_ARG_TYPE_INFO(0, basePath, IS_STRING, 0)
    +#else
    +	ZEND_ARG_INFO(0, basePath)
    +#endif
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_phalcon_urlinterface_setbaseuri, 0, 1, Phalcon\\UrlInterface, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_urlinterface_setbaseuri, 0, 1, IS_OBJECT, "Phalcon\\UrlInterface", 0)
    +#endif
    +#if PHP_VERSION_ID >= 70200
    +	ZEND_ARG_TYPE_INFO(0, baseUri, IS_STRING, 0)
    +#else
    +	ZEND_ARG_INFO(0, baseUri)
    +#endif
    +ZEND_END_ARG_INFO()
    +
    +#if PHP_VERSION_ID >= 70200
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_urlinterface_path, 0, 0, IS_STRING, 0)
    +#else
    +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phalcon_urlinterface_path, 0, 0, IS_STRING, NULL, 0)
    +#endif
    +#if PHP_VERSION_ID >= 70200
    +	ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 1)
    +#else
    +	ZEND_ARG_INFO(0, path)
    +#endif
    +ZEND_END_ARG_INFO()
    +
    +ZEPHIR_INIT_FUNCS(phalcon_urlinterface_method_entry) {
    +	PHP_ABSTRACT_ME(Phalcon_UrlInterface, get, arginfo_phalcon_urlinterface_get)
    +	PHP_ABSTRACT_ME(Phalcon_UrlInterface, getBasePath, arginfo_phalcon_urlinterface_getbasepath)
    +	PHP_ABSTRACT_ME(Phalcon_UrlInterface, getBaseUri, arginfo_phalcon_urlinterface_getbaseuri)
    +	PHP_ABSTRACT_ME(Phalcon_UrlInterface, setBasePath, arginfo_phalcon_urlinterface_setbasepath)
    +	PHP_ABSTRACT_ME(Phalcon_UrlInterface, setBaseUri, arginfo_phalcon_urlinterface_setbaseuri)
    +	PHP_ABSTRACT_ME(Phalcon_UrlInterface, path, arginfo_phalcon_urlinterface_path)
    +	PHP_FE_END
    +};
    diff --git a/ext/phalcon/validation/validator/confirmation.zep.c b/ext/phalcon/validation/validator/confirmation.zep.c
    index 69bfd2af788..711d147b683 100644
    --- a/ext/phalcon/validation/validator/confirmation.zep.c
    +++ b/ext/phalcon/validation/validator/confirmation.zep.c
    @@ -202,12 +202,12 @@ PHP_METHOD(Phalcon_Validation_Validator_Confirmation, compare) {
     		}
     		ZEPHIR_INIT_VAR(&_3$$3);
     		ZVAL_STRING(&_3$$3, "utf-8");
    -		ZEPHIR_CALL_FUNCTION(&_4$$3, "mb_strtolower", NULL, 444, &a, &_3$$3);
    +		ZEPHIR_CALL_FUNCTION(&_4$$3, "mb_strtolower", NULL, 443, &a, &_3$$3);
     		zephir_check_call_status();
     		zephir_get_strval(&a, &_4$$3);
     		ZEPHIR_INIT_NVAR(&_3$$3);
     		ZVAL_STRING(&_3$$3, "utf-8");
    -		ZEPHIR_CALL_FUNCTION(&_5$$3, "mb_strtolower", NULL, 444, &b, &_3$$3);
    +		ZEPHIR_CALL_FUNCTION(&_5$$3, "mb_strtolower", NULL, 443, &b, &_3$$3);
     		zephir_check_call_status();
     		zephir_get_strval(&b, &_5$$3);
     	}
    diff --git a/ext/phalcon/validation/validator/email.zep.c b/ext/phalcon/validation/validator/email.zep.c
    index 39caea77fbe..d457187d771 100644
    --- a/ext/phalcon/validation/validator/email.zep.c
    +++ b/ext/phalcon/validation/validator/email.zep.c
    @@ -100,7 +100,7 @@ PHP_METHOD(Phalcon_Validation_Validator_Email, validate) {
     	ZEPHIR_CALL_METHOD(&value, validation, "getvalue", NULL, 0, field);
     	zephir_check_call_status();
     	ZVAL_LONG(&_0, 274);
    -	ZEPHIR_CALL_FUNCTION(&_1, "filter_var", NULL, 188, &value, &_0);
    +	ZEPHIR_CALL_FUNCTION(&_1, "filter_var", NULL, 189, &value, &_0);
     	zephir_check_call_status();
     	if (!(zephir_is_true(&_1))) {
     		ZEPHIR_CALL_METHOD(&label, this_ptr, "preparelabel", NULL, 0, validation, field);
    diff --git a/ext/phalcon/validation/validator/ip.zep.c b/ext/phalcon/validation/validator/ip.zep.c
    index 41ba41b03b1..45ec16db5d9 100644
    --- a/ext/phalcon/validation/validator/ip.zep.c
    +++ b/ext/phalcon/validation/validator/ip.zep.c
    @@ -240,7 +240,7 @@ PHP_METHOD(Phalcon_Validation_Validator_Ip, validate) {
     	zephir_bitwise_or_function(&_14, &_13, &allowReserved TSRMLS_CC);
     	zephir_array_update_string(&options, SL("flags"), &_14, PH_COPY | PH_SEPARATE);
     	ZVAL_LONG(&_4, 275);
    -	ZEPHIR_CALL_FUNCTION(&_15, "filter_var", NULL, 188, &value, &_4, &options);
    +	ZEPHIR_CALL_FUNCTION(&_15, "filter_var", NULL, 189, &value, &_4, &options);
     	zephir_check_call_status();
     	if (!(zephir_is_true(&_15))) {
     		ZEPHIR_INIT_VAR(&replacePairs);
    diff --git a/ext/phalcon/validation/validator/uniqueness.zep.c b/ext/phalcon/validation/validator/uniqueness.zep.c
    index 9c61d99a00e..818bbb27c15 100644
    --- a/ext/phalcon/validation/validator/uniqueness.zep.c
    +++ b/ext/phalcon/validation/validator/uniqueness.zep.c
    @@ -487,7 +487,7 @@ PHP_METHOD(Phalcon_Validation_Validator_Uniqueness, isUniquenessModel) {
     				zephir_array_keys(&_9$$6, &except TSRMLS_CC);
     				ZVAL_LONG(&_10$$6, 0);
     				ZVAL_LONG(&_11$$6, (zephir_fast_count_int(&except TSRMLS_CC) - 1));
    -				ZEPHIR_CALL_FUNCTION(&_12$$6, "range", &_13, 442, &_10$$6, &_11$$6);
    +				ZEPHIR_CALL_FUNCTION(&_12$$6, "range", &_13, 441, &_10$$6, &_11$$6);
     				zephir_check_call_status();
     				_8$$6 = !ZEPHIR_IS_IDENTICAL(&_9$$6, &_12$$6);
     			}
    diff --git a/ext/phalcon/validation/validator/url.zep.c b/ext/phalcon/validation/validator/url.zep.c
    index d742b1fd64b..70ac04433d3 100644
    --- a/ext/phalcon/validation/validator/url.zep.c
    +++ b/ext/phalcon/validation/validator/url.zep.c
    @@ -100,7 +100,7 @@ PHP_METHOD(Phalcon_Validation_Validator_Url, validate) {
     	ZEPHIR_CALL_METHOD(&value, validation, "getvalue", NULL, 0, field);
     	zephir_check_call_status();
     	ZVAL_LONG(&_0, 273);
    -	ZEPHIR_CALL_FUNCTION(&_1, "filter_var", NULL, 188, &value, &_0);
    +	ZEPHIR_CALL_FUNCTION(&_1, "filter_var", NULL, 189, &value, &_0);
     	zephir_check_call_status();
     	if (!(zephir_is_true(&_1))) {
     		ZEPHIR_CALL_METHOD(&label, this_ptr, "preparelabel", NULL, 0, validation, field);
    diff --git a/optimizers/PhalconGetUriOptimizer.php b/optimizers/PhalconGetUriOptimizer.php
    index fb27e4a79a4..8a50b91ec01 100644
    --- a/optimizers/PhalconGetUriOptimizer.php
    +++ b/optimizers/PhalconGetUriOptimizer.php
    @@ -55,7 +55,7 @@ public function optimize(array $expression, Call $call, CompilationContext $cont
                 $symbolVariable->initVariant($context);
             }
     
    -        $context->headersManager->add('phalcon/mvc/url/utils', HeadersManager::POSITION_LAST);
    +        $context->headersManager->add('phalcon/url/utils', HeadersManager::POSITION_LAST);
     
             $resolvedParams = $call->getResolvedParams($expression['parameters'], $context, $expression);
     
    diff --git a/optimizers/PhalconReplacePathsOptimizer.php b/optimizers/PhalconReplacePathsOptimizer.php
    index c56cab76afc..14df09552ce 100644
    --- a/optimizers/PhalconReplacePathsOptimizer.php
    +++ b/optimizers/PhalconReplacePathsOptimizer.php
    @@ -55,7 +55,7 @@ public function optimize(array $expression, Call $call, CompilationContext $cont
                 $symbolVariable->initVariant($context);
             }
     
    -        $context->headersManager->add('phalcon/mvc/url/utils', HeadersManager::POSITION_LAST);
    +        $context->headersManager->add('phalcon/url/utils', HeadersManager::POSITION_LAST);
     
             $resolvedParams = $call->getResolvedParams($expression['parameters'], $context, $expression);
     
    diff --git a/phalcon/debug.zep b/phalcon/debug.zep
    index 65a8b9a90f4..cd6a027201e 100644
    --- a/phalcon/debug.zep
    +++ b/phalcon/debug.zep
    @@ -10,6 +10,8 @@
     
     namespace Phalcon;
     
    +use Phalcon\Helper\Arr;
    +
     /**
      * Phalcon\Debug
      *
    @@ -49,6 +51,11 @@ class Debug
     	*/
     	protected uri = "https://assets.phalconphp.com/debug/4.0.x/";
     
    +	/**
    +	 * @var array
    +	*/
    +	protected blacklist = ["request" : [], "server" : []];
    +
     	/**
     	 * Clears are variables added previously
     	 */
    @@ -75,9 +82,9 @@ class Debug
     		var uri, sources;
     
     		let uri = this->uri;
    -		let sources  = "";
    -		let sources .= "";
    -		let sources .= "";
    +		let sources  = "";
    +		let sources .= "";
    +		let sources .= "";
     		return sources;
     	}
     
    @@ -89,11 +96,11 @@ class Debug
     		var uri, sources;
     
     		let uri = this->uri;
    -		let sources  = "";
    -		let sources .= "";
    -		let sources .= "";
    -		let sources .= "";
    -		let sources .= "";
    +		let sources  = "";
    +		let sources .= "";
    +		let sources .= "";
    +		let sources .= "";
    +		let sources .= "";
     		return sources;
     	}
     
    @@ -160,8 +167,9 @@ class Debug
     	 */
     	public function onUncaughtException(<\Exception> exception) -> bool
     	{
    -		var obLevel, className, escapedMessage, html, showBackTrace,
    -		dataVars, n, traceItem, keyRequest, value, keyServer, keyFile, keyVar, dataVar;
    +		var blacklist, className, dataVar, dataVars, escapedMessage, html,
    +			keyFile, keyRequest, keyServer, keyVar, n, showBackTrace, traceItem,
    +			obLevel, value;
     
     		let obLevel = ob_get_level();
     
    @@ -207,9 +215,9 @@ class Debug
     		/**
     		 * Main exception info
     		 */
    -		let html .= "
    "; + let html .= "
    "; let html .= "

    " . className . ": " . escapedMessage . "

    "; - let html .= "" . exception->getFile() . " (" . exception->getLine() . ")"; + let html .= "" . exception->getFile() . " (" . exception->getLine() . ")"; let html .= "
    "; let showBackTrace = this->showBackTrace; @@ -224,21 +232,21 @@ class Debug /** * Create the tabs in the page */ - let html .= "
      "; - let html .= "
    • Backtrace
    • "; - let html .= "
    • Request
    • "; - let html .= "
    • Server
    • "; - let html .= "
    • Included Files
    • "; - let html .= "
    • Memory
    • "; + let html .= "
      "; /** * Print backtrace */ - let html .= "
      "; + let html .= "
      "; for n, traceItem in exception->getTrace() { /** * Every line in the trace is rendered using "showTraceItem" @@ -250,13 +258,16 @@ class Debug /** * Print _REQUEST superglobal */ - let html .= "
      "; + let html .= "
      "; let html .= ""; + let blacklist = Arr::get(this->blacklist, "request", []); for keyRequest, value in _REQUEST { - if typeof value != "array" { - let html .= ""; - } else { - let html .= ""; + if true !== isset(blacklist[strtolower(keyRequest)]) { + if typeof value != "array" { + let html .= ""; + } else { + let html .= ""; + } } } let html .= "
      KeyValue
      " . keyRequest . "" . value . "
      " . keyRequest . "" . print_r(value, true) . "
      " . keyRequest . "" . value . "
      " . keyRequest . "" . print_r(value, true) . "
      "; @@ -264,17 +275,20 @@ class Debug /** * Print _SERVER superglobal */ - let html .= "
      "; + let html .= "
      "; let html .= ""; + let blacklist = Arr::get(this->blacklist, "server", []); for keyServer, value in _SERVER { - let html .= ""; + if true !== isset(blacklist[strtolower(keyServer)]) { + let html .= ""; + } } let html .= "
      KeyValue
      " . keyServer . "" . this->getVarDump(value) . "
      " . keyServer . "" . this->getVarDump(value) . "
      "; /** * Show included files */ - let html .= "
      "; + let html .= "
      "; let html .= ""; for keyFile, value in get_included_files() { let html .= ""; @@ -284,18 +298,18 @@ class Debug /** * Memory usage */ - let html .= "
      #Path
      " . keyFile . "" . value . "
      "; - let html .= ""; + let html .= "
      Memory
      Usage" . memory_get_usage(true) . "
      "; + let html .= ""; let html .= "
      Memory
      Usage" . memory_get_usage(true) . "
      "; /** * Print extra variables passed to the component */ if typeof dataVars == "array" { - let html .= "
      "; + let html .= "
      "; let html .= ""; for keyVar, dataVar in dataVars { - let html .= ""; + let html .= ""; } let html .= "
      KeyValue
      " . keyVar . "" . this->getVarDump(dataVar[0]) . "
      " . keyVar . "" . this->getVarDump(dataVar[0]) . "
      "; } @@ -331,6 +345,37 @@ class Debug } } + /** + * Sets if files the exception's backtrace must be showed + */ + public function setBlacklist(array blacklist) -> + { + var area, result, subArray, value; + + let area = Arr::get(blacklist, "request", []), + subArray = [], + result = []; + + for value in area { + let value = strtolower(value), + subArray[value] = 1; + } + + let result["request"] = subArray, + area = Arr::get(blacklist, "server", []), + subArray = []; + + for value in area { + let value = strtolower(value), + subArray[value] = 1; + } + + let result["server"] = subArray, + this->blacklist = result; + + return this; + } + /** * Sets if files the exception's backtrace must be showed */ @@ -368,15 +413,6 @@ class Debug return this; } - - - - - - - - - /** * Escapes a string with htmlentities */ @@ -521,7 +557,7 @@ class Debug /** * Every trace in the backtrace have a unique number */ - let html = "
    #" . n . ""; + let html = "
    #" . n . ""; if fetch className, trace["class"] { @@ -533,12 +569,12 @@ class Debug /** * Prepare the class name according to the Phalcon's conventions */ - let prepareUriClass = str_replace("\\", "/", className); + let prepareUriClass = str_replace("\\", "_", className); /** * Generate a link to the official docs */ - let classNameWithLink = "" . className . ""; + let classNameWithLink = "" . className . ""; } else { let classReflection = new \ReflectionClass(className); @@ -553,13 +589,13 @@ class Debug /** * Generate a link to the official docs */ - let classNameWithLink = "" . className . ""; + let classNameWithLink = "" . className . ""; } else { let classNameWithLink = className; } } - let html .= "" . classNameWithLink . ""; + let html .= "" . classNameWithLink . ""; /** * Object access operator: static/instance @@ -590,7 +626,7 @@ class Debug * Prepare function's name according to the conventions in the docs */ let preparedFunctionName = str_replace("_", "-", functionName); - let functionNameWithLink = "" . functionName . ""; + let functionNameWithLink = "" . functionName . ""; } else { let functionNameWithLink = functionName; } @@ -599,7 +635,7 @@ class Debug } } - let html .= "" . functionNameWithLink . ""; + let html .= "" . functionNameWithLink . ""; /** * Check for arguments in the function @@ -613,7 +649,7 @@ class Debug * Every argument is generated using getVarDump * Append the HTML generated to the argument's list */ - let arguments[] = "" . this->getVarDump(argument) . ""; + let arguments[] = "" . this->getVarDump(argument) . ""; } /** @@ -632,7 +668,7 @@ class Debug /** * Realpath to the file and its line using a special header */ - let html .= "
    " . filez . " (" . line . ")
    "; + let html .= "
    " . filez . " (" . line . ")
    "; let showFiles = this->showFiles; @@ -681,11 +717,11 @@ class Debug let lastLine = afterLine; } - let html .= "
    ";
    +					let html .= "
    ";
     				} else {
     					let firstLine = 1;
     					let lastLine = numberLines;
    -					let html .= "
    ";
    +					let html .= "
    ";
     				}
     
     				let i = firstLine;
    diff --git a/phalcon/helper/arr.zep b/phalcon/helper/arr.zep
    new file mode 100644
    index 00000000000..64ca39a6166
    --- /dev/null
    +++ b/phalcon/helper/arr.zep
    @@ -0,0 +1,57 @@
    +
    +/**
    + * This file is part of the Phalcon.
    + *
    + * (c) Phalcon Team 
    + *
    + * For the full copyright and license information, please view the LICENSE
    + * file that was distributed with this source code.
    + */
    +
    +namespace Phalcon\Helper;
    +
    +use Phalcon\Helper\Exception;
    +
    +/**
    + * Phalcon\Helper\Arr
    + *
    + * This class offers quick array functions throught the framework
    + */
    +class Arr
    +{
    +    /**
    +     * Helper method to get an array element or a default
    +     */
    +    final public static function get(array! collection, var index, var defaultValue) -> var
    +    {
    +        var value;
    +
    +        if likely fetch value, collection[index] {
    +            return value;
    +        }
    +
    +        return defaultValue;
    +    }
    +
    +    /**
    +     * Helper method to get an array element or a default
    +     */
    +    final public static function has(array! collection, var index) -> bool
    +    {
    +        return isset(collection[index]);
    +    }
    +
    +    /**
    +     * Helper method to set an array element
    +     */
    +    final public static function set(array! collection, var value, var index = null) -> array
    +    {
    +		if null === index {
    +			let collection[] = value;
    +		} else {
    +			let collection[index] = value;
    +		}
    +
    +		return collection;
    +    }
    +}
    diff --git a/phalcon/helper/exception.zep b/phalcon/helper/exception.zep
    new file mode 100644
    index 00000000000..c4c60dd7ca4
    --- /dev/null
    +++ b/phalcon/helper/exception.zep
    @@ -0,0 +1,22 @@
    +
    +/**
    + * This file is part of the Phalcon Framework.
    + *
    + * (c) Phalcon Team 
    + *
    + * For the full copyright and license information, please view the LICENSE.txt
    + * file that was distributed with this source code.
    + */
    +
    +namespace Phalcon\Helper;
    +
    +/**
    + * Phalcon\Helper\Exception
    + *
    + * Exceptions thrown in Phalcon\Helper will use this class
    + *
    + */
    +class Exception extends \Phalcon\Exception
    +{
    +
    +}
    diff --git a/phalcon/html/tag.zep b/phalcon/html/tag.zep
    index 2d02262775b..1500ce8dfa4 100644
    --- a/phalcon/html/tag.zep
    +++ b/phalcon/html/tag.zep
    @@ -14,6 +14,7 @@ use Phalcon\DiInterface;
     use Phalcon\Di\InjectionAwareInterface;
     use Phalcon\Escaper;
     use Phalcon\EscaperInterface;
    +use Phalcon\Helper\Arr;
     use Phalcon\Html\Exception;
     use Phalcon\UrlInterface;
     
    @@ -143,9 +144,9 @@ class Tag implements InjectionAwareInterface
     	{
     		var onlyStart, output, selfClose, useEol;
     
    -		let useEol    = this->arrayGetDefault("useEol", parameters, false),
    -			onlyStart = this->arrayGetDefault("onlyStart", parameters, false),
    -			selfClose = this->arrayGetDefault("selfClose", parameters, false);
    +		let useEol    = Arr::get(parameters, "useEol", false),
    +			onlyStart = Arr::get(parameters, "onlyStart", false),
    +			selfClose = Arr::get(parameters, "selfClose", false);
     
     		/**
     		 * Unset options for this control
    @@ -207,7 +208,7 @@ class Tag implements InjectionAwareInterface
     	{
     		var useEol = false;
     
    -		let useEol = this->arrayGetDefault("useEol", parameters, false);
    +		let useEol = Arr::get(parameters, "useEol", false);
     
     		if useEol {
     			return "" . PHP_EOL;
    @@ -258,7 +259,7 @@ class Tag implements InjectionAwareInterface
     
     		let service = this->getService("url");
     
    -		let parameters["method"] = this->arrayGetDefault("method", parameters, "post"),
    +		let parameters["method"] = Arr::get(parameters, "method", "post"),
     			parameters["action"] = service->get(action);
     
     		/**
    @@ -314,9 +315,9 @@ class Tag implements InjectionAwareInterface
     				text   = iconv("UTF-8", "ASCII//TRANSLIT", text);
     		}
     
    -		let lowercase = this->arrayGetDefault("lowercase", parameters, true),
    -			replace   = this->arrayGetDefault("replace", parameters, []),
    -			separator = this->arrayGetDefault("separator", parameters, "-");
    +		let lowercase = Arr::get(parameters, "lowercase", true),
    +			replace   = Arr::get(parameters, "replace", []),
    +			separator = Arr::get(parameters, "separator", "-");
     
     		if !empty replace {
     			if typeof replace !== "array" && typeof replace !== "string"{
    @@ -580,8 +581,8 @@ class Tag implements InjectionAwareInterface
     	{
     		var local, service, src, output;
     
    -		let local = this->arrayGetDefault("local", parameters, true),
    -			src   = this->arrayGetDefault("src", parameters, url);
    +		let local = Arr::get(parameters, "local", true),
    +			src   = Arr::get(parameters, "src", url);
     
     		/**
     		 * Use the "url" service if the URI is local
    @@ -978,7 +979,7 @@ class Tag implements InjectionAwareInterface
     	{
     		var local, service, output;
     
    -		let local = (bool) this->arrayGetDefault("local", parameters, true);
    +		let local = (bool) Arr::get(parameters, "local", true);
     
     		/**
     		 * URLs are generated through the "url" service
    @@ -992,7 +993,7 @@ class Tag implements InjectionAwareInterface
     
     		unset parameters["local"];
     
    -		let parameters["type"] = this->arrayGetDefault("type", parameters, "text/javascript");
    +		let parameters["type"] = Arr::get(parameters, "type", "text/javascript");
     
     		if this->docType >= self::HTML5 && "text/javascript" == parameters["type"] {
     			unset(parameters["type"]);
    @@ -1049,10 +1050,10 @@ class Tag implements InjectionAwareInterface
     		var local, query, output, service, text;
     
     		let service = this->getService("url"),
    -			url     = this->arrayGetDefault("url", parameters, url),
    -			text    = this->arrayGetDefault("text", parameters, text),
    -			local   = this->arrayGetDefault("local", parameters, true),
    -			query   = this->arrayGetDefault("query", parameters, null);
    +			url     = Arr::get(parameters, "url", url),
    +			text    = Arr::get(parameters, "text", text),
    +			local   = Arr::get(parameters, "local", true),
    +			query   = Arr::get(parameters, "query", null);
     
     		unset parameters["url"];
     		unset parameters["local"];
    @@ -1180,9 +1181,9 @@ class Tag implements InjectionAwareInterface
     	{
     		var emptyText, emptyValue, id, output, outputEmpty, useEmpty, using, value;
     
    -		let id                 = this->arrayGetDefault("id", parameters, name),
    -			name               = this->arrayGetDefault("name", parameters, name),
    -			useEmpty           = this->arrayGetDefault("useEmpty", parameters, false),
    +		let id                 = Arr::get(parameters, "id", name),
    +			name               = Arr::get(parameters, "name", name),
    +			useEmpty           = Arr::get(parameters, "useEmpty", false),
     			using              = [],
     			parameters["name"] = name,
     			parameters["id"]   = id,
    @@ -1199,7 +1200,7 @@ class Tag implements InjectionAwareInterface
     		 * For the ResultsetInterface we need the 'using' parameter
     		 */
     		if typeof data === "object" {
    -			let using = this->arrayGetDefault("using", parameters, []);
    +			let using = Arr::get(parameters, "using", []);
     			if typeof using === "array" && count(using) === 2 {
     				unset parameters["using"];
     			} else {
    @@ -1211,8 +1212,8 @@ class Tag implements InjectionAwareInterface
     		 * Check if `useEmpty` has been passed
     		 */
     		if useEmpty {
    -			let emptyText   = this->arrayGetDefault("emptyText", parameters, "Choose..."),
    -				emptyValue  = this->arrayGetDefault("emptyValue", parameters, ""),
    +			let emptyText   = Arr::get(parameters, "emptyText", "Choose..."),
    +				emptyValue  = Arr::get(parameters, "emptyValue", ""),
     				outputEmpty = sprintf(
     					"\t" . PHP_EOL,
     					emptyValue,
    @@ -1399,7 +1400,7 @@ class Tag implements InjectionAwareInterface
     	{
     		var local, service, output;
     
    -		let local = (bool) this->arrayGetDefault("local", parameters, true);
    +		let local = (bool) Arr::get(parameters, "local", true);
     
     		unset parameters["local"];
     
    @@ -1417,7 +1418,7 @@ class Tag implements InjectionAwareInterface
     			let parameters["rel"] = "stylesheet";
     		}
     
    -		let parameters["type"] = this->arrayGetDefault("type", parameters, "text/css"),
    +		let parameters["type"] = Arr::get(parameters, "type", "text/css"),
     			output             = this->renderAttributes("renderCloseTag(true);
     
     		return output;
    @@ -1470,8 +1471,8 @@ class Tag implements InjectionAwareInterface
     	{
     		var content, output;
     
    -		let parameters["id"]   = this->arrayGetDefault("id", parameters, name),
    -			parameters["name"] = this->arrayGetDefault("name", parameters, name);
    +		let parameters["id"]   = Arr::get(parameters, "id", name),
    +			parameters["name"] = Arr::get(parameters, "name", name);
     
     		if isset parameters["value"] {
     			let content = parameters["value"];
    @@ -1487,21 +1488,6 @@ class Tag implements InjectionAwareInterface
     		return output;
     	}
     
    -	/**
    -	 * Helper method to check an array for an element. If it exists it returns it,
    -	 * if not, it returns the supplied default value
    -	 */
    -	private function arrayGetDefault(string name, array parameters, var defaultValue = null) -> var
    -	{
    -		var value;
    -
    -		if likely fetch value, parameters[name] {
    -			return value;
    -		}
    -
    -		return defaultValue;
    -	}
    -
     	/**
     	 * Returns the escaper service from the DI container
     	 */
    @@ -1608,7 +1594,7 @@ class Tag implements InjectionAwareInterface
     	{
     		var name, id, output;
     
    -		let id = this->arrayGetDefault("id", parameters, name);
    +		let id = Arr::get(parameters, "id", name);
     
     		let parameters["id"]    = id,
     			parameters["name"]  = name,
    @@ -1626,7 +1612,7 @@ class Tag implements InjectionAwareInterface
     	{
     		var currentValue, id, name, output, value;
     
    -		let id = this->arrayGetDefault("id", parameters, name);
    +		let id = Arr::get(parameters, "id", name);
     
     		/**
     		 * Automatically check inputs
    diff --git a/phalcon/session/adapter/libmemcached.zep b/phalcon/session/adapter/libmemcached.zep
    index 0b6ec35dbae..0083d1b517e 100644
    --- a/phalcon/session/adapter/libmemcached.zep
    +++ b/phalcon/session/adapter/libmemcached.zep
    @@ -12,6 +12,7 @@ namespace Phalcon\Session\Adapter;
     
     use Phalcon\Cache\Backend\Libmemcached as CacheLibmemcached;
     use Phalcon\Cache\Frontend\Data as FrontendData;
    +use Phalcon\Helper\Arr;
     use Phalcon\Session\Exception;
     
     /**
    @@ -62,10 +63,10 @@ class Libmemcached extends Noop
     			throw new Exception("No 'servers' specified in the options");
     		}
     
    -		let client       = this->arrayGetDefault(options, "client", []),
    -			ttl          = this->arrayGetDefault(options, "ttl", this->ttl),
    -			statsKey     = this->arrayGetDefault(options, "statsKey", ""),
    -			persistentId = this->arrayGetDefault(options, "persistent_id", "phalcon-session");
    +		let client       = Arr::get(options, "client", []),
    +			ttl          = Arr::get(options, "ttl", this->ttl),
    +			statsKey     = Arr::get(options, "statsKey", ""),
    +			persistentId = Arr::get(options, "persistent_id", "phalcon-session");
     
     
     		// Memcached has an internal max lifetime of 30 days
    diff --git a/phalcon/session/adapter/noop.zep b/phalcon/session/adapter/noop.zep
    index 9741e8e08a9..7c81d49065b 100644
    --- a/phalcon/session/adapter/noop.zep
    +++ b/phalcon/session/adapter/noop.zep
    @@ -11,7 +11,6 @@
     namespace Phalcon\Session\Adapter;
     
     use SessionHandlerInterface;
    -use Phalcon\Utility;
     
     /**
      * Phalcon\Session\Adapter\Noop
    @@ -29,7 +28,7 @@ use Phalcon\Utility;
      * $session->setHandler(new Noop());
      * 
      */
    -class Noop extends Utility implements SessionHandlerInterface
    +class Noop implements SessionHandlerInterface
     {
         /**
          * The connection of some adapters
    diff --git a/phalcon/session/adapter/redis.zep b/phalcon/session/adapter/redis.zep
    index 85eb75f71be..02c26e02161 100644
    --- a/phalcon/session/adapter/redis.zep
    +++ b/phalcon/session/adapter/redis.zep
    @@ -12,6 +12,7 @@ namespace Phalcon\Session\Adapter;
     
     use Phalcon\Cache\Backend\Redis as CacheRedis;
     use Phalcon\Cache\Frontend\None as FrontendNone;
    +use Phalcon\Helper\Arr;
     
     /**
      * Phalcon\Session\Adapter\Noop
    @@ -49,11 +50,11 @@ use Phalcon\Cache\Frontend\None as FrontendNone;
     
     	    let options              = this->options,
     	        params               = [],
    -	        params["host"]       = this->arrayGetDefault(options, "host", "127.0.0.1"),
    -		    params["port"]       = this->arrayGetDefault(options, "port", 6379),
    -		    params["index"]      = this->arrayGetDefault(options, "index", 0),
    -		    params["persistent"] = this->arrayGetDefault(options, "persistent", false),
    -		    this->ttl            = this->arrayGetDefault(options, "ttl", this->ttl);
    +	        params["host"]       = Arr::get(options, "host", "127.0.0.1"),
    +		    params["port"]       = Arr::get(options, "port", 6379),
    +		    params["index"]      = Arr::get(options, "index", 0),
    +		    params["persistent"] = Arr::get(options, "persistent", false),
    +		    this->ttl            = Arr::get(options, "ttl", this->ttl);
     
     		let this->connection = new CacheRedis(
     			new FrontendNone(
    diff --git a/phalcon/session/manager.zep b/phalcon/session/manager.zep
    index 6d9aa835acb..cc1e06b73c3 100644
    --- a/phalcon/session/manager.zep
    +++ b/phalcon/session/manager.zep
    @@ -15,15 +15,15 @@ use RuntimeException;
     use SessionHandlerInterface;
     use Phalcon\DiInterface;
     use Phalcon\DI\InjectionAwareInterface;
    +use Phalcon\Helper\Arr;
     use Phalcon\Session\ManagerInterface;
    -use Phalcon\Utility;
     
     /**
      * Phalcon\Session\Manager
      *
      * Session manager class
      */
    -class Manager extends Utility implements ManagerInterface, InjectionAwareInterface
    +class Manager implements ManagerInterface, InjectionAwareInterface
     {
         /**
          * @var 
    @@ -129,7 +129,7 @@ class Manager extends Utility implements ManagerInterface, InjectionAwareInterfa
     		}
     
     		let uniqueKey = this->getUniqueKey(key),
    -			value     = this->arrayGetDefault(_SESSION, uniqueKey, defaultValue);
    +			value     = Arr::get(_SESSION, uniqueKey, defaultValue);
     
     		if (remove === true) {
     			unset(_SESSION[uniqueKey]);
    @@ -328,7 +328,7 @@ class Manager extends Utility implements ManagerInterface, InjectionAwareInterfa
     	 */
     	public function setOptions(array options) -> void
     	{
    -		let this->uniqueId = this->arrayGetDefault(options, "uniqueId", ""),
    +		let this->uniqueId = Arr::get(options, "uniqueId", ""),
     		    this->options  = options;
     	}
     
    diff --git a/phalcon/utility.zep b/phalcon/utility.zep
    deleted file mode 100644
    index 0086065804e..00000000000
    --- a/phalcon/utility.zep
    +++ /dev/null
    @@ -1,33 +0,0 @@
    -
    -/**
    - * This file is part of the Phalcon.
    - *
    - * (c) Phalcon Team 
    - *
    - * For the full copyright and license information, please view the LICENSE
    - * file that was distributed with this source code.
    - */
    -
    -namespace Phalcon;
    -
    -/**
    - * Phalcon\Utility
    - *
    - * This class contains protected methods used throughout the framework
    - */
    -class Utility
    -{
    -    /**
    -     * Helper method to get an array element or a default
    -     */
    -    protected function arrayGetDefault(array parameters, string name, var defaultValue) -> var
    -    {
    -        var value;
    -
    -        if likely fetch value, parameters[name] {
    -            return value;
    -        }
    -
    -        return defaultValue;
    -    }
    -}
    diff --git a/tests/testbed/index.php b/tests/testbed/index.php
    new file mode 100644
    index 00000000000..135452bed69
    --- /dev/null
    +++ b/tests/testbed/index.php
    @@ -0,0 +1,31 @@
    +setBlacklist(
    +    [
    +        'request' => ['some'],
    +        'server'  => ['hostname'],
    +    ]
    +);
    +$debug->listen();
    +
    +$container = new FactoryDefault();
    +
    +$x = new C();
    +$x->rump();
    +
    +
    +class C
    +{
    +    function rump()
    +    {
    +        $return = \Phalcon\Tag::displayTo(false, true);
    +    }
    +}
    +
    diff --git a/tests/unit/Debug/GetCssSourcesCest.php b/tests/unit/Debug/GetCssSourcesCest.php
    index 31f3b012ae9..448fd52c705 100644
    --- a/tests/unit/Debug/GetCssSourcesCest.php
    +++ b/tests/unit/Debug/GetCssSourcesCest.php
    @@ -36,12 +36,12 @@ public function debugGetCssSources(UnitTester $I)
             $uri   = 'https://assets.phalconphp.com/debug/4.0.x/';
     
             $expected = sprintf(
    -            '' .
    -            '' .
    -            '',
    +            "' .
    +            "' .
    +            "',
                 $uri
             );
     
    diff --git a/tests/unit/Debug/GetJsSourcesCest.php b/tests/unit/Debug/GetJsSourcesCest.php
    index 10513d5b9e2..46625c309f6 100644
    --- a/tests/unit/Debug/GetJsSourcesCest.php
    +++ b/tests/unit/Debug/GetJsSourcesCest.php
    @@ -36,11 +36,11 @@ public function debugGetJsSources(UnitTester $I)
             $uri   = 'https://assets.phalconphp.com/debug/4.0.x/';
     
             $expected = sprintf(
    -            '' .
    -            '' .
    -            '' .
    -            '' .
    -            '',
    +            '' .
    +            '' .
    +            '' .
    +            '' .
    +            '',
                 $uri
             );
     
    diff --git a/tests/unit/Debug/SetUriCest.php b/tests/unit/Debug/SetUriCest.php
    index 95970377c61..63e3c1118d0 100644
    --- a/tests/unit/Debug/SetUriCest.php
    +++ b/tests/unit/Debug/SetUriCest.php
    @@ -35,12 +35,12 @@ public function debugSetUri(UnitTester $I)
             $uri   = 'https://something.com/test/';
     
             $expected = sprintf(
    -            '' .
    -            '' .
    -            '',
    +            "' .
    +            "' .
    +            "',
                 $uri
             );
     
    diff --git a/tests/unit/Helper/Arr/GetCest.php b/tests/unit/Helper/Arr/GetCest.php
    new file mode 100644
    index 00000000000..89a17c5de6b
    --- /dev/null
    +++ b/tests/unit/Helper/Arr/GetCest.php
    @@ -0,0 +1,89 @@
    +
    + *
    + * For the full copyright and license information, please view the LICENSE.txt
    + * file that was distributed with this source code.
    + */
    +
    +namespace Phalcon\Test\Unit\Helper\Arr;
    +
    +use Phalcon\Helper\Arr;
    +use Phalcon\Helper\Exception;
    +use UnitTester;
    +
    +/**
    + * Class GetCest
    + */
    +class GetCest
    +{
    +    /**
    +     * Tests Phalcon\Helper\Arr :: get() - numeric
    +     *
    +     * @param UnitTester $I
    +     *
    +     * @author Phalcon Team 
    +     * @since  2019-02-17
    +     */
    +    public function helperArrGetNumeric(UnitTester $I)
    +    {
    +        $I->wantToTest('Helper\Arr - get() - numeric');
    +
    +        $collection = [
    +            1        => 'Phalcon',
    +            'suffix' => 'Framework',
    +        ];
    +
    +        $expected = 'Phalcon';
    +        $actual   = Arr::get($collection, 1, 'Error');
    +        $I->assertEquals($expected, $actual);
    +    }
    +
    +    /**
    +     * Tests Phalcon\Helper\Arr :: get() - string
    +     *
    +     * @param UnitTester $I
    +     *
    +     * @author Phalcon Team 
    +     * @since  2019-02-17
    +     */
    +    public function helperArrGetString(UnitTester $I)
    +    {
    +        $I->wantToTest('Helper\Arr - get() - string');
    +
    +        $collection = [
    +            1        => 'Phalcon',
    +            'suffix' => 'Framework',
    +        ];
    +
    +        $expected = 'Framework';
    +        $actual   = Arr::get($collection, 'suffix', 'Error');
    +        $I->assertEquals($expected, $actual);
    +    }
    +
    +    /**
    +     * Tests Phalcon\Helper\Arr :: get() - default
    +     *
    +     * @param UnitTester $I
    +     *
    +     * @author Phalcon Team 
    +     * @since  2019-02-17
    +     */
    +    public function helperArrGetDefault(UnitTester $I)
    +    {
    +        $I->wantToTest('Helper\Arr - get() - default');
    +
    +        $collection = [
    +            1        => 'Phalcon',
    +            'suffix' => 'Framework',
    +        ];
    +
    +        $expected = 'Error';
    +        $actual   = Arr::get($collection, 'unknown', 'Error');
    +        $I->assertEquals($expected, $actual);
    +    }
    +}
    diff --git a/tests/unit/Helper/Arr/HasCest.php b/tests/unit/Helper/Arr/HasCest.php
    new file mode 100644
    index 00000000000..3c7736e3807
    --- /dev/null
    +++ b/tests/unit/Helper/Arr/HasCest.php
    @@ -0,0 +1,48 @@
    +
    + *
    + * For the full copyright and license information, please view the LICENSE.txt
    + * file that was distributed with this source code.
    + */
    +
    +namespace Phalcon\Test\Unit\Helper\Arr;
    +
    +use Phalcon\Helper\Arr;
    +use UnitTester;
    +
    +/**
    + * Class HasCest
    + */
    +class HasCest
    +{
    +    /**
    +     * Tests Phalcon\Helper\Arr :: has()
    +     *
    +     * @param UnitTester $I
    +     *
    +     * @author Phalcon Team 
    +     * @since  2018-11-13
    +     */
    +    public function helperArrHas(UnitTester $I)
    +    {
    +        $I->wantToTest('Helper\Arr - has()');
    +        $collection = [
    +            1        => 'Phalcon',
    +            'suffix' => 'Framework',
    +        ];
    +
    +        $actual   = Arr::has($collection, 1);
    +        $I->assertTrue($actual);
    +
    +        $actual   = Arr::has($collection, 'suffix');
    +        $I->assertTrue($actual);
    +
    +        $actual   = Arr::has($collection, 'unknown');
    +        $I->assertFalse($actual);
    +    }
    +}
    diff --git a/tests/unit/Helper/Arr/SetCest.php b/tests/unit/Helper/Arr/SetCest.php
    new file mode 100644
    index 00000000000..985a9d9983e
    --- /dev/null
    +++ b/tests/unit/Helper/Arr/SetCest.php
    @@ -0,0 +1,100 @@
    +
    + *
    + * For the full copyright and license information, please view the LICENSE.txt
    + * file that was distributed with this source code.
    + */
    +
    +namespace Phalcon\Test\Unit\Helper\Arr;
    +
    +use Phalcon\Helper\Arr;
    +use UnitTester;
    +
    +/**
    + * Class SetCest
    + */
    +class SetCest
    +{
    +    /**
    +     * Tests Phalcon\Helper\Arr :: set() - numeric
    +     *
    +     * @param UnitTester $I
    +     *
    +     * @author Phalcon Team 
    +     * @since  2018-11-13
    +     */
    +    public function helperArrSetNumeric(UnitTester $I)
    +    {
    +        $I->wantToTest('Helper\Arr - set() - numeric');
    +        $collection = [];
    +        $expected   = [
    +            1 => 'Phalcon',
    +        ];
    +        $actual     = Arr::set($collection, 'Phalcon', 1);
    +        $I->assertEquals($expected, $actual);
    +    }
    +
    +    /**
    +     * Tests Phalcon\Helper\Arr :: set() - string
    +     *
    +     * @param UnitTester $I
    +     *
    +     * @author Phalcon Team 
    +     * @since  2018-11-13
    +     */
    +    public function helperArrSetString(UnitTester $I)
    +    {
    +        $I->wantToTest('Helper\Arr - set() - string');
    +        $collection = [];
    +        $expected   = [
    +            'suffix' => 'Framework',
    +        ];
    +        $actual     = Arr::set($collection, 'Framework', 'suffix');
    +        $I->assertEquals($expected, $actual);
    +    }
    +
    +    /**
    +     * Tests Phalcon\Helper\Arr :: set() - no index
    +     *
    +     * @param UnitTester $I
    +     *
    +     * @author Phalcon Team 
    +     * @since  2018-11-13
    +     */
    +    public function helperArrSetNoIndex(UnitTester $I)
    +    {
    +        $I->wantToTest('Helper\Arr - set() - no index');
    +        $collection = [];
    +        $expected   = [
    +            0 => 'Phalcon',
    +        ];
    +        $actual     = Arr::set($collection, 'Phalcon');
    +        $I->assertEquals($expected, $actual);
    +    }
    +
    +    /**
    +     * Tests Phalcon\Helper\Arr :: set() - overwrite
    +     *
    +     * @param UnitTester $I
    +     *
    +     * @author Phalcon Team 
    +     * @since  2018-11-13
    +     */
    +    public function helperArrSetOverwride(UnitTester $I)
    +    {
    +        $I->wantToTest('Helper\Arr - set() - overwrite');
    +        $collection = [
    +            1 => 'Phalcon'
    +        ];
    +        $expected   = [
    +            1 => 'Framework',
    +        ];
    +        $actual     = Arr::set($collection, 'Framework', 1);
    +        $I->assertEquals($expected, $actual);
    +    }
    +}