Javier Eguíluz [Fri, 23 Dec 2011 09:26:49 +0000]
Added a notice in the `nl2br` filter documentation about the proper Twig version to use it
Fabien Potencier [Fri, 23 Dec 2011 07:58:23 +0000]
Revert "merged branch arnaud-lb/hash-key-expr (PR #514)"
This reverts commit
8665c6463461ccd0afec1ff943b45b56ad01a06e, reversing
changes made to
4aba337cda03b0170cbf30b43cd82cb83146f2b4.
Fabien Potencier [Thu, 22 Dec 2011 21:48:48 +0000]
updated doc
Fabien Potencier [Thu, 22 Dec 2011 21:42:44 +0000]
updated CHANGELOG
Fabien Potencier [Thu, 22 Dec 2011 21:41:37 +0000]
merged branch arnaud-lb/hash-key-expr (PR #514)
Commits
-------
542e9e7 added getKeyValuePairs() on Twig_Node_Expression_Array
3f64f1d added test for hash keys
4bdb3a9 fixed tests
3b1f269 support any expression as hash key
Discussion
----------
Allow hash keys to be any expression
This allows hash keys to be any expression
---------------------------------------------------------------------------
by fabpot at 2011/12/07 02:08:19 -0800
I had not implemented this feature back then because I'm not sure it makes sense to support it in the context of a templating system. I'm still not convinced that this is useful.
Fabien Potencier [Thu, 22 Dec 2011 21:32:27 +0000]
added a do tag (closes #446)
Fabien Potencier [Thu, 22 Dec 2011 18:32:51 +0000]
added doc for the flush tag
Fabien Potencier [Thu, 22 Dec 2011 18:25:03 +0000]
added IDE support for Coda in the doc (closes #566)
Fabien Potencier [Thu, 22 Dec 2011 13:20:20 +0000]
tweaked doc (closes #567)
Fabien Potencier [Thu, 22 Dec 2011 13:17:52 +0000]
replaced zend_error_noreturn calls to zend_error as zend_error_noreturn is not exported (closes #554)
Fabien Potencier [Wed, 21 Dec 2011 19:27:52 +0000]
merged branch arnaud-lb/ext-fix (PR #565)
Commits
-------
b26d69a removed bogus TSRMLS_CCs
Discussion
----------
Fix strict mode in extension when building in ZTS mode
This removes a few misplaced TSRMLS_CCs causing if() expressions to always evaluate to true. This caused twig_template_get_attributes to always behave as if strict mode were disabled.
Fabien Potencier [Wed, 21 Dec 2011 19:17:43 +0000]
fixed typo
Arnaud Le Blanc [Wed, 21 Dec 2011 18:48:50 +0000]
removed bogus TSRMLS_CCs
Fabien Potencier [Wed, 21 Dec 2011 18:34:14 +0000]
added a flush tag
Fabien Potencier [Wed, 21 Dec 2011 10:25:50 +0000]
merged branch nikic/fixLoopIncrement (PR #563)
Commits
-------
8255b8b Fix test for previous commit
834ce4c Fix loop increment on some for loops (fix #562)
Discussion
----------
Fix loop increment
PR for #562.
nikic [Wed, 21 Dec 2011 10:05:19 +0000]
Fix test for previous commit
nikic [Wed, 21 Dec 2011 10:00:04 +0000]
Fix loop increment on some for loops (fix #562)
The inner loop incrementing code was not added on for loops where the body was not a Twig_Node (but e.g. a Twig_Node_If)
Fabien Potencier [Sun, 18 Dec 2011 19:54:12 +0000]
fixed dump when xdebug.overload_var_dump is not defined in php.ini
Fabien Potencier [Sun, 20 Nov 2011 08:00:09 +0000]
added support for dynamically named filters and functions
Fabien Potencier [Sun, 18 Dec 2011 19:20:13 +0000]
made the dump function registration explicit and disable its output when debug is off
Fabien Potencier [Sun, 18 Dec 2011 19:11:39 +0000]
fixed dump function when the context contains Twig_Template instances
Fabien Potencier [Sun, 18 Dec 2011 17:08:58 +0000]
added a dump function to help debugging templates
Fabien Potencier [Sun, 18 Dec 2011 14:08:12 +0000]
fixed the random function
Fabien Potencier [Sun, 18 Dec 2011 11:28:42 +0000]
added a nl2br filter
Fabien Potencier [Sun, 18 Dec 2011 11:16:35 +0000]
added missing documentation for the random function
Fabien Potencier [Sun, 18 Dec 2011 10:24:52 +0000]
added a random function
Fabien Potencier [Sun, 18 Dec 2011 10:12:38 +0000]
added a way to change the default format for the date filter
Fabien Potencier [Sat, 17 Dec 2011 07:58:24 +0000]
merged branch arnaud-lb/ext-crash2 (PR #560)
Commits
-------
9e6f285 fixed crash in twig_template_get_attributes when input is not an array or object
Discussion
----------
Fix crash in twig_template_get_attributes when input is not an array or object
This fixes a crash when the input of twig_template_get_attributes() is not an array or object, and strict mode is enabled.
---------------------------------------------------------------------------
by nikic at 2011/12/16 12:03:21 -0800
Could you maybe place the exception tests in a different method?
---------------------------------------------------------------------------
by arnaud-lb at 2011/12/16 12:13:35 -0800
This method already expects many of its inputs to cause an exception to be thrown (it tests getAttribute() in strict mode, and in many cases the attribute isn't defined). I don't see a real benefit from moving these tests in a separate method in this case.
Arnaud Le Blanc [Thu, 15 Dec 2011 19:54:24 +0000]
fixed crash in twig_template_get_attributes when input is not an array or object
Fabien Potencier [Fri, 16 Dec 2011 15:05:09 +0000]
updated NetBeans plugin URL
Fabien Potencier [Sun, 11 Dec 2011 15:53:52 +0000]
merged branch arnaud-lb/ext-crash (PR #558)
Commits
-------
c920344 code style
50da1a2 don't modify function name
Discussion
----------
Fix crash in extension
This fixes a crash caused by `php_strtolower()` modifying its input. (Crashes on amd64, but not on x86 for me.)
Arnaud Le Blanc [Sat, 10 Dec 2011 13:49:52 +0000]
code style
Arnaud Le Blanc [Sat, 10 Dec 2011 13:48:20 +0000]
don't modify function name
Fabien Potencier [Fri, 9 Dec 2011 09:27:23 +0000]
merged branch JEDIBC/master (PR #556)
Commits
-------
3bb822e . misspell function _twig_convert_encoding -> twig_convert_encoding
Discussion
----------
misspell function _twig_convert_encoding -> twig_convert_encoding
Located in _twig_escape_js_callback, the function call was misspelled and raised a PHP Fatal error: Call to undefined function _twig_convert_encoding() in ~/www/project/vendors/Twig/Extension/Core.php on line 585
JEDIBC [Fri, 9 Dec 2011 09:08:13 +0000]
. misspell function _twig_convert_encoding -> twig_convert_encoding
Fabien Potencier [Thu, 8 Dec 2011 18:14:07 +0000]
moved some common compiled code to Twig_Template
Fabien Potencier [Thu, 8 Dec 2011 08:29:20 +0000]
fixed the lexer when an operator ending with a letter ends a line
Fabien Potencier [Wed, 7 Dec 2011 11:18:20 +0000]
added Twig C extension version in phpinfo
Fabien Potencier [Wed, 7 Dec 2011 10:05:06 +0000]
moved regexes in the lexer to their own array
Fabien Potencier [Wed, 7 Dec 2011 10:01:05 +0000]
added documentation for the new string interpolation feature
Fabien Potencier [Wed, 7 Dec 2011 09:09:34 +0000]
merged branch arnaud-lb/str-interpolation (PR #515)
Commits
-------
d41d10c simplification
2dbb420 moved hard-coded regexes
61986c1 shortcut for non-interpolated double quoted strings
062ed5c regex optimization
0e63abb integration tests for interpolated strings
773fff5 parser tests for interpolated strings
098634e parser support for interpolated strings
c8bba24 lexer tests for interpolated strings
a203686 lexer support for interpolated strings
0bd63dd stack lexer states
Discussion
----------
String interpolation syntax
This adds support for string interpolation:
```
{{ "foo #{ any expression here } bar" }}
```
I find string interpolation to be often more readable than concatenation, and doesn't have the precedence ambiguity of the concatenation operator:
```
Interpolation:
{{ "foo #{bar} baz" }}
{{ "foo #{1+2} baz" }}
{{ "foo #{1+2} baz"|escape }}
Concatenation:
{{ "foo "~bar~" baz" }}
{{ "foo "~(1+2)~" baz" }} extra parentheses
{{ ("foo "~(1+2)~" baz")|escape }} more extra parentheses
```
---------------------------------------------------------------------------
by nikic at 2011/11/12 12:41:54 -0800
Really nice idea. We should discuss the exact syntax though :) Dart for example uses `${expr}` for interpolation or `$name` if the expression is just a name. I think it makes sense to have a special short syntax for the name case, because it is the most common one.
---------------------------------------------------------------------------
by stof at 2011/11/12 13:06:51 -0800
@nikic could you comment on the PR instead of commenting on each commit individually ? it would make it easier to see what is concerned in the PR.
---------------------------------------------------------------------------
by arnaud-lb at 2011/11/12 14:22:14 -0800
@nikic Thanks for your review, I'll take care of your remarks.
For the syntax, I have no preference. I've taken this one because it has the same semantics. In Ruby and Coffeescript the `#{...}` allows any expression between the brackets. In PHP the expression in the `${...}` must start with a variable name. As you mentioned Dart's `${...}` seems to allow any expression.
---------------------------------------------------------------------------
by nikic at 2011/11/12 15:03:48 -0800
@arnaud-lb If Ruby and Coffeescript use this, the #{...} syntax should be okay. Especially as ${...} might be confusing for PHP developers as it has the semantics of variable variables in PHP.
@stof Thanks, will do so next time.
---------------------------------------------------------------------------
by damianb at 2011/11/12 15:38:31 -0800
@stof he doesn't need to - this is something github handles already. in the PR view, beside the "@nikic commented" bits, there's a set of links that shows where exactly the comment was in the format of commit sha, filename, and line inside the diff.
You can see for yourself right here, upper left:
![pr snapshot](http://i42.tinypic.com/zl6s82.png)
---------------------------------------------------------------------------
by stof at 2011/11/13 01:20:38 -0800
@damianb The comment appears, but not the context in which the comment was. We have to follow each link to see it whereas comments done on the PR appear directly with their context. This is why I said it is easier when comments are on the PR.
---------------------------------------------------------------------------
by nikic at 2011/12/02 15:13:30 -0800
So what about this now?
Btw, `REGEX_STRING` and `REGEX_DQ_STRING_PART` still are hardcoded and do not depend on the specified `interpolation` tags. But this looks hard to change, at least the regexes are quite complicated.
---------------------------------------------------------------------------
by arnaud-lb at 2011/12/02 15:22:45 -0800
I think I've addressed all issues (except hardcoding of `#{` and `}` in `REGEX_STRING` and `REGEX_DQ_STRING_PART`.)
Can this be merged after v1.4 is release if the syntax is accepted ?
---------------------------------------------------------------------------
by nikic at 2011/12/03 01:53:41 -0800
This would be my go for `STRING` and `DQ_STRING_PART` (isn't tested):
```php
<?php
$interpolChar = preg_quote(substr($options['interpolation'][0], 0, 1), '/');
$interpolPart = '[^' . $interpolChar . '"\\\\]*';
if (strlen($options['interpolation'][0]) > 1) {
$interpolRest = preg_quote(substr($options['interpolation'][0], 1), '/');
$interpolRegex = $interpolPart . '(?:(?:\\\\.|' . $interpolChar . '(?!' . $interpolRest . '))' . $interpolPart . ')*';
} else {
$interpolRegex = $interpolPart . '(?:\\\\.' . $interpolPart . ')*';
}
$this->options['dq_string_part_regex'] = '/' . $interpolRegex . '/As';
$this->options['string_regex'] = '/"' . $interpolRegex . '"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'/As';
```
It should allow both a single char interpolation syntax (like `{`) and multichar ones (like `#{`).
By the way, could we maybe move the compiled regexes out of `$this->options` into `$this->regexes`?
Fabien Potencier [Wed, 7 Dec 2011 08:58:16 +0000]
added the CHANGELOG to the PEAR package
Fabien Potencier [Wed, 7 Dec 2011 07:51:22 +0000]
enhanced exceptions for unknown filters, functions, tests, and tags
Fabien Potencier [Wed, 7 Dec 2011 08:31:08 +0000]
removed dead code
Fabien Potencier [Wed, 7 Dec 2011 08:23:10 +0000]
added a way to get all registered tags
Jonathan Ingram [Mon, 5 Dec 2011 01:43:41 +0000]
Removed trailing white spaces
Jonathan Ingram [Mon, 5 Dec 2011 00:47:40 +0000]
Help the developer when they specify an invalid function by providing some alternatives
Fabien Potencier [Wed, 7 Dec 2011 07:19:37 +0000]
merged branch jonathaningram/patch-1 (PR #549)
Commits
-------
989bb22 Removed trailing white spaces
f880bab Help the developer when they specify an invalid filter by providing some alternatives
Discussion
----------
Help the developer when they specify an invalid filter by providing some...
... alternatives.
Bug fix: no
Feature addition: yes
Backwards compatibility break: no
Uses a simple `strpos` search (no fancy diff to determine what the filter could be). There is no impact to runtime performance because this is all happening during template compilation.
Examples:
```jinja
{{ my_entity|json }}
```
Shows exception:
`The filter "json" does not exist. Did you mean "json_encode"?`
```jinja
{{ my_date|dat }}
```
Shows:
`The filter "dat" does not exist. Did you mean "date"?`
```jinja
{{ my_var|f }}
```
Shows:
`The filter "f" does not exist. Did you mean "format", "default", "_default", "format_args", "format_args_as_text", "file_excerpt", "format_file", "format_file_from_text", "file_link"?`
Also good for custom filters created in your own domain `st_`:
```jinja
{{ my_var|st_ }}
```
Shows:
`The filter "st_" does not exist. Did you mean "st_friendly_date", "st_site_test_url"?`
---------------------------------------------------------------------------
by stof at 2011/12/04 16:34:27 -0800
I like the idea to provide help to the developer in case of error. You should probably do the same for functions
---------------------------------------------------------------------------
by Tobion at 2011/12/05 05:56:29 -0800
+1 for a combination of string starts with (suggesting domain specific filters, e.g. st_*) and levenshtein for typos
---------------------------------------------------------------------------
by chucktrukk at 2011/12/05 08:13:10 -0800
+1. This would be really helpful.
Fabien Potencier [Wed, 7 Dec 2011 07:11:23 +0000]
bumped version to 1.5.0-DEV
Fabien Potencier [Wed, 7 Dec 2011 07:09:57 +0000]
prepared the 1.4.0 release
Fabien Potencier [Tue, 6 Dec 2011 15:54:00 +0000]
added a unit test test for previous merge
Fabien Potencier [Tue, 6 Dec 2011 15:49:24 +0000]
merged branch duo-criativa/master (PR #544)
Commits
-------
11b8689 Refactoring: using && instead of nested if's
7aa6757 Bug correction: Parsing integers large than PHP_INT_MAX was generating trucated token values.
046e4ff Bug correction: Parsing integers large than PHP_INT_MAX was generating trucated token values.
Discussion
----------
Fixed bug that was trucating integers large then PHP_INT_MAX
The following code
{% set sizes = [7077888,
452984832,
28991029248,
1855425871872,
9223372036854775807] %}
{% for i in sizes %}
{{ i }}
{% endfor %}
was generating the following output
7077888
452984832
2147483647
2147483647
2147483647
With the fix, the output looks like the following on Ubuntu 11.04
7077888
452984832
28991029248
1855425871872
9.
2233720368548E+18
Jonathan Ingram [Mon, 5 Dec 2011 01:45:22 +0000]
Removed trailing white spaces
Jonathan Ingram [Mon, 5 Dec 2011 00:01:25 +0000]
Help the developer when they specify an invalid filter by providing some alternatives
Fabien Potencier [Sat, 3 Dec 2011 07:37:53 +0000]
added missing preserveKeys argument to the reverse filter
Fabien Potencier [Sat, 3 Dec 2011 07:16:26 +0000]
fixed macros containing filter tag calls
Fabien Potencier [Fri, 2 Dec 2011 14:11:24 +0000]
merged branch hason/arrayloader (PR #542)
Commits
-------
16d7800 fixed a crash when an object with __toString() method is passed as template name
Discussion
----------
fixed a crash when an object with __toString() method is passed as templ...
...ate name
---------------------------------------------------------------------------
by fabpot at 2011/12/01 03:58:47 -0800
Not sure about this one as the phpdoc clearly state that the name is a string. Do you have a specific user case in mind?
---------------------------------------------------------------------------
by hason at 2011/12/01 04:26:47 -0800
I use the class "Twig_Loader_Chain" as template loader in Symfony2 application. One of the embeded loaders is "Twig_Loader_Array". In Symfony2 is used "Symfony\Component\Templating\TemplateReferenceInterface" for internal representation of a template and it causes a crash.
Paulo Roberto Ribeiro [Thu, 1 Dec 2011 22:18:58 +0000]
Refactoring: using && instead of nested if's
Paulo Roberto Ribeiro [Thu, 1 Dec 2011 20:41:28 +0000]
Bug correction: Parsing integers large than PHP_INT_MAX was generating trucated token values.
Paulo Roberto Ribeiro [Thu, 1 Dec 2011 19:54:23 +0000]
Bug correction: Parsing integers large than PHP_INT_MAX was generating trucated token values.
Martin Hasoň [Thu, 1 Dec 2011 11:43:07 +0000]
fixed a crash when an object with __toString() method is passed as template name
Fabien Potencier [Tue, 29 Nov 2011 14:49:51 +0000]
fixed markup in doc
Fabien Potencier [Sun, 27 Nov 2011 19:32:27 +0000]
prepared the 1.4.0-RC2 release
Fabien Potencier [Sun, 27 Nov 2011 15:46:10 +0000]
merged branch arnaud-lb/twig-escape-filter-opt (PR #537)
Commits
-------
7b8d476 optimized twig_escape_filter
Discussion
----------
Optimized twig_escape_filter
This optimizes the part of twig_escape_filter that checks if the charset is supported by htmlspecialchars.
This uses a static variable to avoid initializing the charsets array each time the function is called; and does a hash lookup instead of array search (saves a function call too).
The optimized version takes 66% less time that the original version on html escaping :) (no difference on js escaping).
Arnaud Le Blanc [Sun, 27 Nov 2011 15:13:43 +0000]
optimized twig_escape_filter
uses a static variable to avoid initializing the charsets array each
time the function is called; and does a hash lookup instead of array
search (saves a function call too).
Fabien Potencier [Sun, 27 Nov 2011 13:58:28 +0000]
simplified the implementation of the replace filter
Fabien Potencier [Fri, 25 Nov 2011 18:36:25 +0000]
fixed a crash under certain versions of PHP when an object with a __toString() method is used with htmlspecialchars
Fabien Potencier [Wed, 23 Nov 2011 22:45:02 +0000]
renamed an internal class
Fabien Potencier [Wed, 23 Nov 2011 14:18:40 +0000]
made a small speed optimization
Fabien Potencier [Wed, 23 Nov 2011 13:24:45 +0000]
fixed unit tests due to a difference between the PHP and C versions of Twig_Template::getAttribute()
Fabien Potencier [Wed, 23 Nov 2011 13:14:41 +0000]
merged branch arnaud-lb/ext (PR #530)
Commits
-------
569f782 fix ZTS build
1606910 Fix undefined behavior
0ce8d3c Convert item argument to string
d807981 don't try to access non public property or method
7e566b8 test twig_template_get_attributes
Discussion
----------
twig_template_get_attributes tests and fixes
This enables testing of twig_template_get_attributes (every TemplateTest test is ran against twig_template_get_attributes too) and fixes some bugs I've found.
There is still 3 failing tests due to a difference of how twig_template_get_attributes and Twig_Template::getAttribute use Twig_Template::$cache.
Twig_Template::getAttribute doesn't cache properties, and twig_template_get_attributes expects $cache[$class]['properties'] to be set if $cache[$class] is set. So twig_template_get_attributes can fail if the cache is already populated by Twig_Template::getAttribute.
Arnaud Le Blanc [Wed, 23 Nov 2011 13:01:51 +0000]
fix ZTS build
Arnaud Le Blanc [Wed, 23 Nov 2011 11:38:55 +0000]
Fix undefined behavior
The callbacks are expected to return an integer, and returning void
instead was triggering weird bugs
I've also removed the casts to ensure that the signatures are compatible
Arnaud Le Blanc [Tue, 22 Nov 2011 22:11:21 +0000]
Convert item argument to string
This fixes a crash in some cases and repeated conversions
Arnaud Le Blanc [Tue, 22 Nov 2011 20:58:47 +0000]
don't try to access non public property or method
Arnaud Le Blanc [Wed, 23 Nov 2011 12:17:33 +0000]
test twig_template_get_attributes
Fabien Potencier [Wed, 23 Nov 2011 11:21:50 +0000]
tweaked CHANGELOG
Fabien Potencier [Wed, 23 Nov 2011 11:19:09 +0000]
updated Twig ext version
Fabien Potencier [Wed, 23 Nov 2011 11:16:47 +0000]
merged branch arjenjb/master (PR #528)
Commits
-------
c65be3e Pass around the TSRM
09d3095 Moved zval declaration
c941552 Removed globals
ffb2460 Added config.w32 for windows builds
Discussion
----------
Fixed compilation on windows
Fabien Potencier [Wed, 23 Nov 2011 11:11:28 +0000]
merged branch derickr/master (PR #526)
Commits
-------
c4a7d19 Merge branch 'master' of github.com:derickr/twig-ext
7d37d66 Make the extension ZTS-proof.
9879ca2 Merge branch 'master' of github.com:derickr/twig-ext
40ec671 Fixed name in license.
Discussion
----------
Added ZTS (windows TS) support
Hi!
Seemed that since last time I tested, I forgot to sprinkle in some TSRMLS calls all over the place for ZTS support.
This pull request pulls that in, as well as my previous name-in-license change.
Derick
---------------------------------------------------------------------------
by fabpot at 2011/11/21 03:19:09 -0800
@derickr: Now that the extension is in the Twig repo, can you work there directly so that we can avoid the merge commits?
---------------------------------------------------------------------------
by derickr at 2011/11/21 03:22:54 -0800
On Mon, 21 Nov 2011, Fabien Potencier wrote:
> @derickr: Now that the extension is in the Twig repo, can you work there directly so that we can avoid the merge commits?
Will do that form now on.
Derick
---------------------------------------------------------------------------
by stealth35 at 2011/11/21 04:42:14 -0800
@derickr could you add the `config.w32`, and fix the `php_twig.h` ?
---------------------------------------------------------------------------
by stealth35 at 2011/11/21 07:03:53 -0800
You also need to fix `php_twig.h`, like :
``` c
ZEND_BEGIN_MODULE_GLOBALS(twig)
long global_value;
ZEND_END_MODULE_GLOBALS(twig)
```
and move `zval *tmp_self_cache;` ([@L828][1]) in the top of the function (after `zval *ret = NULL;` ([@L708][2]) for example)
Now build seem to be OK, all tests pass under Windows
I have a complied version if some people are interest to testing :
https://github.com/downloads/stealth35/stealth35.github.com/php_twig-5.3-vc9-x86.zip
[1]: https://github.com/derickr/Twig/blob/
c4a7d1983dab7e2818cca3c4896704f4fce7becc/ext/twig/twig.c#L828
[2]: https://github.com/derickr/Twig/blob/
c4a7d1983dab7e2818cca3c4896704f4fce7becc/ext/twig/twig.c#L708
---------------------------------------------------------------------------
by stealth35 at 2011/11/21 07:06:42 -0800
@fabpot any plan for the version number ? actually it's v0.0.1, sould it be the same as Twig ?
Fabien Potencier [Wed, 23 Nov 2011 11:06:36 +0000]
merged branch Tobion/patch-1 (PR #529)
Commits
-------
4802f69 fixing and improving PHPDoc in Template.php
Discussion
----------
fixing and improving PHPDoc in Template.php
Tobias Schultze [Tue, 22 Nov 2011 08:11:56 +0000]
fixing and improving PHPDoc in Template.php
Arjen Brouwer [Mon, 21 Nov 2011 23:17:40 +0000]
Pass around the TSRM
Arjen Brouwer [Mon, 21 Nov 2011 22:57:44 +0000]
Moved zval declaration
Arjen Brouwer [Mon, 21 Nov 2011 22:56:11 +0000]
Removed globals
Arjen Brouwer [Mon, 21 Nov 2011 22:54:57 +0000]
Added config.w32 for windows builds
Fabien Potencier [Mon, 21 Nov 2011 13:31:08 +0000]
added more unit tests
Fabien Potencier [Mon, 21 Nov 2011 13:06:01 +0000]
merged branch pierrejoye/master (PR #527)
Commits
-------
115edf2 - fix property access when the instance implements Iterator or similar cases, by using get_object_vars instead, thx Arnaud Leblanc for the hint.
Discussion
----------
Fix props detection for instances implementing Iterator or similar cases
Fix property access when the instance implements Iterator or similar cases, by using get_object_vars instead, thx Arnaud Leblanc for the hint.
Pierre Joye [Mon, 21 Nov 2011 13:02:02 +0000]
- fix property access when the instance implements Iterator or similar cases, by using get_object_vars instead, thx Arnaud Leblanc for the hint.
Derick Rethans [Mon, 21 Nov 2011 11:09:34 +0000]
Merge branch 'master' of github.com:derickr/twig-ext
Conflicts:
ext/twig/twig.c
Derick Rethans [Mon, 21 Nov 2011 11:08:17 +0000]
Make the extension ZTS-proof.
Fabien Potencier [Mon, 21 Nov 2011 09:36:47 +0000]
removed usage of Reflection in Twig_Template::getAttribute() (thanks Pierre Joye for the property tip)
Derick Rethans [Mon, 21 Nov 2011 08:34:59 +0000]
Fixed name in license.
Fabien Potencier [Mon, 21 Nov 2011 08:41:49 +0000]
fixed typo
Derick Rethans [Mon, 21 Nov 2011 08:37:45 +0000]
Merge branch 'master' of github.com:derickr/twig-ext
Fabien Potencier [Sat, 10 Sep 2011 09:35:39 +0000]
added support for twig C extension
Derick Rethans [Mon, 21 Nov 2011 08:34:59 +0000]
Fixed name in license.
Fabien Potencier [Mon, 21 Nov 2011 08:34:50 +0000]
merged branch derickr/master (PR #524)
Commits
-------
229c07c Added another workaround for PHP 5.4 support.
c4055d2 Merge branch 'master' of github.com:derickr/twig-ext
f7f8346 Switch LICENSE to Revised BSD.
16ca055 Move files into ext/twig.
699e123 Allow any, but the first two arguments to be optional.
952fe6f Added missing format specifier to parseparameters.
7cc2808 Added support for the new argument called 'ignoreStrictCheck'.
b7b260b Fixed exception message issue with an array element that didn't exist and strict variables checking turned on.
634d8ae Fixed compiler warnings
7077811 PHP 5.4 compatibility.
05cb73f More PHP 5.2 compatibility.
163f806 PHP 5.2 compatibility.
8e11c14 Sigh, stupid copy and paste error prevented the last tests from passing. All is well now.
2dffee9 Added a return so that the function ends after throwing an exception. This fixes a segfault too.
e9c3eda - Fixed code that was previously never hit.
53e1652 Implement HAS_PROPERTY to distinguish between not-set and NULL.
541f6c8 Use "isset" logic as fetch always works, even for elements that don't exist and they then just become NULL.
a36d11b Fixed memory leaks.
cbd975a Use the proper zend hash function here.
7b38766 Handle numeric keys for array elements too.
49b885c After instantiating the object, call the constructor and make sure we return from the function.
0ee71a7 Added TWIG_CALL_Z (to use for calling a function with one argument).
52b9ae4 Bailout when we have an exception to defer to PHP's exception handlers.
9facb8d Split TWIG_CALL_S into TWIG_CALL_S and TWIG_CALL_SB for boolean returning functions.
b8b89f6 Fixed the uninitialized ptr check. This makes all tests in Twig_TemplateTest pass!
9096e3f Use strtolower on the method names and add them as associative keys so that they are found.
0b6cefb Fixed TWIG_PROPERTY to return a NULL instead of a zval(NULL).
1e726f4 Those are array elements and not properties.
9f6495f Return the value immediately.
f7ae76e Check the property regardless of whether tmp_item is valid/set.
3c208ff We need to use strlen on hash keys.
7d36def Split TWIG_PROPERTY into TWIG_PROPERTY and TWIG_PROPERTY_CHAR so the array key can be both a zval or char.
508bb66 Made properties return properly.
4e899ca Add the properties as assoc keys, so that hash_find actually works on them.
63e1f12 Check normal property before trying to de-mangle it.
9d22fdd Fixed TWIG_GET_ARRAY_ELEMENT_ZVAL's return value.
48b0a5f Fixed compiler warning.
f19ec8a Implemented first bit for ArrayAccess support.
f196f01 Initialise variable to NULL.
803c1a9 Apparently this is needed for GCC to not optimise it out...
078690b - Remove debugging code.
1b55c97 Only add the object to the cache if there is actually an object.
f42cd14 Fix efree(NULL) when no arguments are passed in.
577169c Added missing header and switch arguments for the return around as I got that wrong.
2b58fec Added support for NULL arguments to CALL_USER_FUNC_ARRAY and made CALL_BOOLEAN use that.
f7fc1ff Fold TWIG_GET_ARRAY_ELEMENT and TWIG_PROPERTY into one worker function.
6e1dd56 Implement TWIG_GET_CLASS_NAME and make use of it.
b891ad9 Initialise ret to NULL.
828c113 Get rid of TWIG_RETURN_ARRAY_ELEMENT and use TWIG_GET_ARRAY_ELEMENT instead.
0cc719a Implemented TWIG_THROW_EXCEPTION.
701be8b Implemented TWIG_IMPLODE_ARRAY_KEYS.
3da24d9 Fixed logic and implemented normal array key return.
b918f2e Implemented TWIG_RETURN_ARRAY_ELEMENT.
e1663e8 Re-scope variables.
8bc1f02 Added the cache creating/fetching method in the code.
7367cf9 Added the cache fetching method for methods and properties.
9d40c9f Implemented TWIG_CALL_USER_FUNC_ARRAY, TWIG_GET_STATIC_PROPERTY, TWIG_GET_ARRAY_ELEMENT_ZVAL and TWIG_GET_ARRAY_ELEMENT.
2078e50 - Implemented the strtolower function.
e133074 - The extension now loads and the pseudo code is mostly ready.
1b96539 - The parse parameters line was wrong, it still had the extra one that was removed in Twig itself already.
d082244 - Used the template, instead of getThis(), which wouldn't exist.
07e38ef - Added more generated files to .gitignore
6aa1a64 - Stubs and more implementations.
79f6dc6 - Implement TWIG_INSTANCEOF_*
19fbee7 - Implemented TWIG_ARRAY_KEY_EXISTS (for normal arrays only).
4de3659 - Reduce compile warnings and errors. - Initialize the two method names.
a2f3c34 - Added more files to .gitignore
fad8e9a - Fixed ARG INFO
15de533 - Added pseudo code
bfc6e34 - Added a .gitignore file
75d3e66 - Updated with new code from Fabien's repository.
6edc311 - Some scaffolding implementation.
979d6ec - Added broken down original code.
e19701d - Added function declaration and headers.
430aecf - Added basic twig extension structure.
Discussion
----------
The twig extension put into ext/twig.
Hi!
Here is the twig extension as pull-request. I'll make a separate pull request for the PHP 5.4 issue that you mailed.
cheers,
Derick
---------------------------------------------------------------------------
by fzaninotto at 2011/11/20 13:40:07 -0800
Incredible!
Question: What's the plan for maintaining this as the PHP code continues to evolve?
---------------------------------------------------------------------------
by derickr at 2011/11/20 13:43:47 -0800
@fzninotto: That's still something that we need to figure out. It's just one method but yes, it does need to keep updated if the PHP's code semantics change of course.
---------------------------------------------------------------------------
by stof at 2011/11/20 13:50:03 -0800
This should be done as a separate repo IMO. People using the PHP version of Twig really don't need all the C code when cloning.
---------------------------------------------------------------------------
by derickr at 2011/11/20 13:53:23 -0800
@stof That's what I thought too, but Fabien asked me to do this. I've a repository for just the ext at https://github.com/derickr/twig-ext
---------------------------------------------------------------------------
by stof at 2011/11/20 13:54:00 -0800
@derick the link you gave is a 404
---------------------------------------------------------------------------
by derickr at 2011/11/20 14:00:36 -0800
@stof Ah, it was still private. *fixed*
---------------------------------------------------------------------------
by hhamon at 2011/11/20 21:05:49 -0800
That's awesome!!!
---------------------------------------------------------------------------
by beberlei at 2011/11/20 22:37:40 -0800
<3
---------------------------------------------------------------------------
by jmikola at 2011/11/20 22:42:45 -0800
:+1:
---------------------------------------------------------------------------
by dustinwhittle at 2011/11/20 22:51:37 -0800
Thanks for porting!
---------------------------------------------------------------------------
by trompette at 2011/11/20 23:28:54 -0800
It needs some serious documentation effort, bat that's awsome!
---------------------------------------------------------------------------
by fabpot at 2011/11/20 23:43:42 -0800
@stof: this is really just 3 small files, so it does not hurt to have them in the main repo. Having just one repo also eases the maintenance ans usage as when you switch from one version to another, you are sure to have the right version of the C code as well.
@fzaninotto: SensioLabs sponsored the port of the `Twig_Template::getAttribute()` method as this is the biggest bottleneck for Twig. The maintenance should probably be done by the community from now on; but anyway, SensioLabs will continue to sponsor it if needed.
---------------------------------------------------------------------------
by henrikbjorn at 2011/11/20 23:56:46 -0800
Have any gotten this to build succesfully ?
---------------------------------------------------------------------------
by fabpot at 2011/11/21 00:06:15 -0800
@henrikbjorn: we have tested it on PHP 5.2/5.3/5.4 on both Linux and Mac (we have not tried it on Windows though).
---------------------------------------------------------------------------
by tecbot at 2011/11/21 00:33:05 -0800
:+1:
Fabien Potencier [Mon, 21 Nov 2011 08:02:49 +0000]
fixed previous merge and added some unit tests
Fabien Potencier [Mon, 21 Nov 2011 07:53:51 +0000]
merged branch shvchk/patch-2 (PR #522)
Commits
-------
5f30db0 !empty($date[0]) → !empty($date)
0182dbc indentation fix
c7a06cb php warning fix
a4a2d6f Support of negative timestamps
Discussion
----------
Support of negative timestamps
Date could be checked against this condition, as proposed in my patch:
```php
ctype_digit((string) $date)
|| (('-' === $date[0])
&& (ctype_digit(substr($date, 1))))
```
or this:
```php
preg_match('/^\-?\d+/', $date)
```
Second is maybe more readable, but 20% slower.
---------------------------------------------------------------------------
by nikic at 2011/11/20 01:59:16 -0800
Couldn't we do an int validation here? I.e. `if (false !== filter_var($date, FILTER_VALIDATE_INT)) { ... }`. That will allow both positive and negative integers in the allowed integer range. Note though that it will no longer allow ints starting with a zero (apart from zero itself). To support that one would need to pass the ALLOW_OCTAL flag.
Some tests: http://codepad.viper-7.com/w0MDTH
---------------------------------------------------------------------------
by damianb at 2011/11/20 07:50:39 -0800
@nikic why not `ctype_digit`?
---------------------------------------------------------------------------
by nikic at 2011/11/20 07:53:26 -0800
@damianb ctype_digit is what this PR wants to replace, because it does not allow negative numbers. Replacing it with `ctype_digit((string) $date) || (!empty($date[0]) && ('-' === $date[0]) && ctype_digit(substr($date, 1)))` seems like overkill to me though, that's why I proposed to use `false !== filter_var($date, FILTER_VALIDATE_INT)` instead, which apart from being shorter is also semantically more correct.
---------------------------------------------------------------------------
by damianb at 2011/11/20 08:03:09 -0800
@nikic But does filter_var with FILTER_VALIDATE_INT perform better than what's proposed?
Also, I would think that the `empty($date[0])` should just be replaced with an empty check on the `$date` var itself - seems quite pointless to check if the first character is empty, that'd imply that either a) the string itself is empty b) `date[0] == 0`, which could result in a nasty gotcha for someone down the road.
---------------------------------------------------------------------------
by shvchk at 2011/11/20 09:36:17 -0800
@damianb, you are right, I will update the code.
@nikic, on 32-bit systems ```PHP_INT_MAX``` is ```
2147483647```, so your code will fail on such systems for 01.01.1900, for example, which is ```-
2208988800``` and is not that rarely used.