Skip to content
Merged

1.4.0 #124

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
bd500e6
#120 - Add support for `mixed` type in parameters and return type
Jeckerson Sep 15, 2021
c66ea70
#120 - Add test cases for `mixed` type
Jeckerson Sep 15, 2021
66d0ead
#120 - Add extra test cases
Jeckerson Sep 15, 2021
8fcbd41
#120 - Update CHANGELOG.md
Jeckerson Sep 15, 2021
02173de
#120 - Fix path of `skipif.inc` file
Jeckerson Sep 15, 2021
5605563
Merge pull request #121 from zephir-lang/#120-mixed-type
Jeckerson Sep 15, 2021
20c3e34
#118 - Add support for `yield` statement
Jeckerson Sep 15, 2021
10cd854
#118 - Adjust examples in comments
Jeckerson Sep 15, 2021
faaa772
#118 - Add test cases for `yield` with different scenarios
Jeckerson Sep 15, 2021
b58bdeb
Update present year in LICENSE
Jeckerson Sep 15, 2021
dc18fc7
#104 - Add package.xml file for pecl
Jeckerson Sep 15, 2021
05b66fa
#118 - Update test name
Jeckerson Sep 16, 2021
9cfcc7e
#118 - Add test case with `yield` in closure
Jeckerson Sep 18, 2021
1dc8955
#118 - Update test name
Jeckerson Sep 18, 2021
5ff6c22
Merge pull request #123 from zephir-lang/#104-add-package.xml
Jeckerson Sep 18, 2021
fa799a0
Merge pull request #122 from zephir-lang/#118-yield-statement
Jeckerson Sep 18, 2021
be6ad4a
Update CHANGELOG.md
Jeckerson Sep 18, 2021
3897632
Bump version to `1.4.0`
Jeckerson Sep 18, 2021
8a85a04
Update package.xml with `1.4.0` information
Jeckerson Sep 18, 2021
6047997
Update config.m4
Jeckerson Sep 18, 2021
a9e9bff
Update release notes in package.xml
Jeckerson Sep 18, 2021
e529246
Update release notes in package.xml
Jeckerson Sep 18, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/).

## [Unreleased]

## [1.4.0] - 2021-09-18
### Added
- Added support for `mixed` type [#120](https://github.com/phalcon/php-zephir-parser/issues/120)
- Added support for `yield` statement [#118](https://github.com/phalcon/php-zephir-parser/issues/118)

## [1.3.8] - 2021-09-08
### Changed
- Changed CI from AppVeyor to Github Actions [#110](https://github.com/phalcon/php-zephir-parser/issues/110)
Expand Down Expand Up @@ -168,7 +173,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
### Added
- Initial stable release

[Unreleased]: https://github.com/phalcon/php-zephir-parser/compare/v1.3.8...HEAD
[Unreleased]: https://github.com/phalcon/php-zephir-parser/compare/v1.4.0...HEAD
[1.4.0]: https://github.com/phalcon/php-zephir-parser/compare/v1.3.8...v1.4.0
[1.3.8]: https://github.com/phalcon/php-zephir-parser/compare/v1.3.7...v1.3.8
[1.3.7]: https://github.com/phalcon/php-zephir-parser/compare/v1.3.6...v1.3.7
[1.3.6]: https://github.com/phalcon/php-zephir-parser/compare/v1.3.5...v1.3.6
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

MIT License

Copyright (c) 2013-2019 Zephir Team
Copyright (c) 2013-present Zephir Team

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.3.8
1.4.0
5 changes: 5 additions & 0 deletions config.m4
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ if test "$PHP_ZEPHIR_PARSER" = "yes"; then
[PHP_INSTALL_HEADERS([ext/zephir_parser], $PHP_ZEPHIR_PARSER_HEADERS)])

PHP_ADD_MAKEFILE_FRAGMENT([parser.mk])

dnl Create directories because PECL can't
if test ! -d parser; then
mkdir parser
fi
fi

dnl Code Coverage -------------------------------------------------------------
Expand Down
69 changes: 69 additions & 0 deletions package.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<package packagerversion="1.10.5" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0"
xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
<name>zephir_parser</name>
<channel>pecl.php.net</channel>
<summary>Zephir code parser.</summary>
<description>Zephir Parser is a code parser, delivered as a C extension for the PHP language.</description>
<lead>
<name>Anton Vasiliev</name>
<user>jeckerson</user>
<email>[email protected]</email>
<active>yes</active>
</lead>
<date>2021-09-18</date>
<time>11:00:00</time>
<version>
<release>1.4.0</release>
<api>1.4.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="https://github.com/zephir-lang/php-zephir-parser/blob/development/LICENSE">MIT</license>
<notes>
Sat, Sep 18, 2021 - Zephir Parser 1.4.0

= New features:

- Fixed issue #120: Add support for `mixed` type
- Fixed issue #118: Add support for `yield` statement
</notes>
<contents>
<dir name="/">
<dir name="parser">
<file name="parser.c" role="src"/>
<file name="scanner.c" role="src"/>

<file name="parser.h" role="src"/>
<file name="scanner.h" role="src"/>
<file name="xx.h" role="src"/>
<file name="zephir.h" role="src"/>
</dir>

<file name="config.m4" role="src"/>
<file name="config.w32" role="src"/>
<file name="zephir_parser.c" role="src"/>
<file name="zephir_parser.h" role="src"/>
<file name="CHANGELOG.md" role="doc"/>
<file name="CODE_OF_CONDUCT.md" role="doc"/>
<file name="LICENSE" role="doc"/>
<file name="NO_WARRANTY" role="doc"/>
</dir>
</contents>
<dependencies>
<required>
<php>
<min>7.0.0</min>
<max>8.0.99</max>
</php>
<pearinstaller>
<min>1.10</min>
</pearinstaller>
</required>
</dependencies>
<providesextension>zephir_parser</providesextension>
<extsrcrelease/>
</package>
6 changes: 6 additions & 0 deletions parser/base.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,9 @@ void xx_parse_program(zval *return_value, char *program, size_t program_length,
case XX_T_RETURN:
xx_(xx_parser, XX_RETURN, NULL, parser_status);
break;
case XX_T_YIELD:
xx_(xx_parser, XX_YIELD, NULL, parser_status);
break;
case XX_T_REQUIRE_ONCE:
xx_(xx_parser, XX_REQUIRE_ONCE, NULL, parser_status);
break;
Expand Down Expand Up @@ -444,6 +447,9 @@ void xx_parse_program(zval *return_value, char *program, size_t program_length,
case XX_T_TYPE_RESOURCE:
xx_(xx_parser, XX_TYPE_RESOURCE, NULL, parser_status);
break;
case XX_T_TYPE_MIXED:
xx_(xx_parser, XX_TYPE_MIXED, NULL, parser_status);
break;
case XX_T_TYPE_CALLABLE:
xx_(xx_parser, XX_TYPE_CALLABLE, NULL, parser_status);
break;
Expand Down
31 changes: 30 additions & 1 deletion parser/parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,6 @@ static void xx_ret_return_type_item(zval *ret, zval *type, zval *cast, int manda
static void xx_ret_type(zval *ret, int type)
{
switch (type) {

case XX_TYPE_INTEGER:
parser_get_string(ret, "int");
return;
Expand Down Expand Up @@ -587,6 +586,10 @@ static void xx_ret_type(zval *ret, int type)
parser_get_string(ret, "object");
return;

case XX_TYPE_MIXED:
parser_get_string(ret, "mixed");
return;

case XX_T_TYPE_NULL:
parser_get_string(ret, "null");
return;
Expand Down Expand Up @@ -896,6 +899,28 @@ static void xx_ret_return_statement(zval *ret, zval *expr, xx_scanner_state *sta
parser_add_int(ret, "char", state->active_char);
}

static void xx_ret_yield_statement(zval *ret, zval *expr, zval *K, zval *V, xx_scanner_state *state)
{
array_init(ret);

parser_add_str(ret, "type", "yield");
if (expr) {
parser_add_zval(ret, "expr", expr);
}

if (K) {
parser_add_zval(ret, "key", K);
}

if (V) {
parser_add_zval(ret, "value", V);
}

parser_add_str(ret, "file", state->active_file);
parser_add_int(ret, "line", state->active_line);
parser_add_int(ret, "char", state->active_char);
}

static void xx_ret_require_once_statement(zval *ret, zval *expr, xx_scanner_state *state)
{
array_init(ret);
Expand Down Expand Up @@ -1040,6 +1065,10 @@ static void xx_ret_declare_statement(zval *ret, int type, zval *variables, xx_sc
parser_add_str(ret, "data-type", "resource");
break;

case XX_T_TYPE_MIXED:
parser_add_str(ret, "data-type", "mixed");
break;

case XX_T_TYPE_OBJECT:
parser_add_str(ret, "data-type", "object");
break;
Expand Down
2 changes: 2 additions & 0 deletions parser/scanner.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
#define XX_T_TYPE_RESOURCE 333
#define XX_T_TYPE_NULL 334
#define XX_T_TYPE_THIS 335
#define XX_T_TYPE_MIXED 336

#define XX_T_NAMESPACE 350
#define XX_T_CLASS 351
Expand Down Expand Up @@ -98,6 +99,7 @@
#define XX_T_CATCH 398
#define XX_T_DEPRECATED 399
#define XX_T_REQUIRE_ONCE 459
#define XX_T_YIELD 460

/* Operators */
#define XX_T_AT '@'
Expand Down
12 changes: 12 additions & 0 deletions parser/scanner.re
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,12 @@ int xx_get_token(xx_scanner_state *s, xx_scanner_token *token) {
return 0;
}

'mixed' {
s->active_char += sizeof("mixed")-1;
token->opcode = XX_T_TYPE_MIXED;
return 0;
}

'if' {
s->active_char += sizeof("if")-1;
token->opcode = XX_T_IF;
Expand Down Expand Up @@ -357,6 +363,12 @@ int xx_get_token(xx_scanner_state *s, xx_scanner_token *token) {
return 0;
}

'yield' {
s->active_char += sizeof("yield")-1;
token->opcode = XX_T_YIELD;
return 0;
}

'require' {
s->active_char += sizeof("require")-1;
token->opcode = XX_T_REQUIRE;
Expand Down
33 changes: 30 additions & 3 deletions parser/zephir.lemon
Original file line number Diff line number Diff line change
Expand Up @@ -946,6 +946,10 @@ xx_parameter_type(R) ::= TYPE_RESOURCE . {
xx_ret_type(&R, XX_TYPE_RESOURCE);
}

xx_parameter_type(R) ::= TYPE_MIXED . {
xx_ret_type(&R, XX_TYPE_MIXED);
}

xx_parameter_type(R) ::= TYPE_OBJECT . {
xx_ret_type(&R, XX_TYPE_OBJECT);
}
Expand Down Expand Up @@ -982,6 +986,10 @@ xx_statement(R) ::= xx_return_statement(S) . {
R = S;
}

xx_statement(R) ::= xx_yield_statement(S) . {
R = S;
}

xx_statement(R) ::= xx_require_once_statement(S) . {
R = S;
}
Expand Down Expand Up @@ -1522,16 +1530,31 @@ xx_fetch_statement(R) ::= xx_fetch_expr(E) DOTCOMMA . {
xx_ret_fetch_statement(&R, &E, status->scanner_state);
}

/* return statement */
/* return var; */
xx_return_statement(R) ::= RETURN xx_common_expr(E) DOTCOMMA . {
xx_ret_return_statement(&R, &E, status->scanner_state);
}

/* return statement */
/* return; */
xx_return_statement(R) ::= RETURN DOTCOMMA . {
xx_ret_return_statement(&R, NULL, status->scanner_state);
}

/* yield var; */
xx_yield_statement(R) ::= YIELD xx_common_expr(E) DOTCOMMA . {
xx_ret_yield_statement(&R, &E, NULL, NULL, status->scanner_state);
}

/* yield key, val; */
xx_yield_statement(R) ::= YIELD xx_common_expr(K) COMMA xx_common_expr(V) DOTCOMMA . {
xx_ret_yield_statement(&R, NULL, &K, &V, status->scanner_state);
}

/* yield; */
xx_yield_statement(R) ::= YIELD DOTCOMMA . {
xx_ret_yield_statement(&R, NULL, NULL, NULL, status->scanner_state);
}

/* require_once statement */
xx_require_once_statement(R) ::= REQUIRE_ONCE xx_common_expr(E) DOTCOMMA . {
xx_ret_require_once_statement(&R, &E, status->scanner_state);
Expand Down Expand Up @@ -1596,6 +1619,10 @@ xx_declare_statement(R) ::= TYPE_ARRAY xx_declare_variable_list(L) DOTCOMMA . {
xx_ret_declare_statement(&R, XX_T_TYPE_ARRAY, &L, status->scanner_state);
}

xx_declare_statement(R) ::= TYPE_MIXED xx_declare_variable_list(L) DOTCOMMA . {
xx_ret_declare_statement(&R, XX_T_TYPE_MIXED, &L, status->scanner_state);
}

xx_declare_variable_list(R) ::= xx_declare_variable_list(L) COMMA xx_declare_variable(V) . {
xx_ret_list(&R, &L, &V, status->scanner_state);
}
Expand Down Expand Up @@ -1898,7 +1925,7 @@ xx_common_expr(R) ::= NULL . {
xx_ret_literal(&R, XX_T_NULL, NULL, status->scanner_state);
}

/* y = false */
/* y = true */
xx_common_expr(R) ::= TRUE . {
xx_ret_literal(&R, XX_T_TRUE, NULL, status->scanner_state);
}
Expand Down
53 changes: 53 additions & 0 deletions tests/functions/parameter-types/int.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
--TEST--
Parameter type 'int'
--SKIPIF--
<?php include(__DIR__ . '/../../skipif.inc'); ?>
--FILE--
<?php
$code =<<<ZEP
function test(int value) { }
ZEP;

$ir = zephir_parse_file($code, '(eval code)');
var_dump($ir);
?>
--EXPECT--
array(1) {
[0]=>
array(6) {
["type"]=>
string(8) "function"
["name"]=>
string(4) "test"
["parameters"]=>
array(1) {
[0]=>
array(9) {
["type"]=>
string(9) "parameter"
["name"]=>
string(5) "value"
["const"]=>
int(0)
["data-type"]=>
string(3) "int"
["mandatory"]=>
int(0)
["reference"]=>
int(0)
["file"]=>
string(11) "(eval code)"
["line"]=>
int(1)
["char"]=>
int(25)
}
}
["file"]=>
string(11) "(eval code)"
["line"]=>
int(1)
["char"]=>
int(9)
}
}
Loading