Could someone please spare a moment to give me karma so I can open an RFC? 
I greatly appreciate your time. My username is: wookieetyler

Derick Rethans commit inspired me to start looking at the source code in more 
depth. 
I got started on this branch 
<https://github.com/php/php-src/compare/master...RichardTMiles:php-src:arrayTypes>
last night, I focused on the zend_language_parser.y. I think I got that figured 
out, and not I need to adjust the functions it touches (zend_ast_create_decl 
and zend_ast_create).
I might call myself a very seasoned n00b here, so my main goal is to get it 
working.

interface_declaration_statement:
               T_INTERFACE { $<num>$ = CG(zend_lineno); }
               T_STRING interface_extends_list backup_doc_comment '{' 
class_statement_list '}'
                      { $$ = zend_ast_create_decl(ZEND_AST_CLASS, 
ZEND_ACC_INTERFACE, $<num>2, $5, zend_ast_get_str($3), NULL, $4, $7, NULL, 
NULL); }
               | T_INTERFACE { $<num>$ = CG(zend_lineno); }
               T_STRING interface_extends_list backup_doc_comment '[' 
array_statement_list ']'
                      { $$ = zend_ast_create_decl(ZEND_AST_CLASS, 
ZEND_ACC_INTERFACE, $<num>2, $4, zend_ast_get_str($2), NULL, $3, $6, NULL, 
NULL); }
;


Then for casting: 

expr:
...
|       type_without_static expr
                       { $$ = zend_ast_create(ZEND_AST_CAST, $2, $4); }
|       '(' type_expr_without_static_or_nullable ')' expr
               { $$ = zend_ast_create(ZEND_AST_CAST, $2, $4); }
|       '(' expr ')' {
               $$ = $2;
               if ($$->kind == ZEND_AST_CONDITIONAL) $$->attr = 
ZEND_PARENTHESIZED_CONDITIONAL;
        }
|       new_expr { $$ = $1; }
...


I should also point out that the syntax I posed yesterday was a bit incorrect 
as I extended an interface using the `implements` keyword.


>> interface iArrayA ['a' => string ]
>> interface iArrayB implements iArrayA ['b' => string, 'c' => ?string ]

It should actually read:

interface iArrayA [ ‘a’ => string ]
interface iArrayB extends iArrayA [ ‘b’ => string, ‘c’ => ?string]


P.s. I also started a draft for the addition of the `apache_connection_stream` 
function https://github.com/php/php-src/pull/14047
and would like to create an RFC for that as well.


Best,
Richard Miles

Reply via email to