Skip to content

Commit bd500e6

Browse files
committed
#120 - Add support for mixed type in parameters and return type
1 parent 3fee124 commit bd500e6

File tree

5 files changed

+26
-1
lines changed

5 files changed

+26
-1
lines changed

parser/base.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,9 @@ void xx_parse_program(zval *return_value, char *program, size_t program_length,
444444
case XX_T_TYPE_RESOURCE:
445445
xx_(xx_parser, XX_TYPE_RESOURCE, NULL, parser_status);
446446
break;
447+
case XX_T_TYPE_MIXED:
448+
xx_(xx_parser, XX_TYPE_MIXED, NULL, parser_status);
449+
break;
447450
case XX_T_TYPE_CALLABLE:
448451
xx_(xx_parser, XX_TYPE_CALLABLE, NULL, parser_status);
449452
break;

parser/parser.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,6 @@ static void xx_ret_return_type_item(zval *ret, zval *type, zval *cast, int manda
534534
static void xx_ret_type(zval *ret, int type)
535535
{
536536
switch (type) {
537-
538537
case XX_TYPE_INTEGER:
539538
parser_get_string(ret, "int");
540539
return;
@@ -587,6 +586,10 @@ static void xx_ret_type(zval *ret, int type)
587586
parser_get_string(ret, "object");
588587
return;
589588

589+
case XX_TYPE_MIXED:
590+
parser_get_string(ret, "mixed");
591+
return;
592+
590593
case XX_T_TYPE_NULL:
591594
parser_get_string(ret, "null");
592595
return;
@@ -1040,6 +1043,10 @@ static void xx_ret_declare_statement(zval *ret, int type, zval *variables, xx_sc
10401043
parser_add_str(ret, "data-type", "resource");
10411044
break;
10421045

1046+
case XX_T_TYPE_MIXED:
1047+
parser_add_str(ret, "data-type", "mixed");
1048+
break;
1049+
10431050
case XX_T_TYPE_OBJECT:
10441051
parser_add_str(ret, "data-type", "object");
10451052
break;

parser/scanner.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
#define XX_T_TYPE_RESOURCE 333
4747
#define XX_T_TYPE_NULL 334
4848
#define XX_T_TYPE_THIS 335
49+
#define XX_T_TYPE_MIXED 336
4950

5051
#define XX_T_NAMESPACE 350
5152
#define XX_T_CLASS 351

parser/scanner.re

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,12 @@ int xx_get_token(xx_scanner_state *s, xx_scanner_token *token) {
297297
return 0;
298298
}
299299
300+
'mixed' {
301+
s->active_char += sizeof("mixed")-1;
302+
token->opcode = XX_T_TYPE_MIXED;
303+
return 0;
304+
}
305+
300306
'if' {
301307
s->active_char += sizeof("if")-1;
302308
token->opcode = XX_T_IF;

parser/zephir.lemon

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -946,6 +946,10 @@ xx_parameter_type(R) ::= TYPE_RESOURCE . {
946946
xx_ret_type(&R, XX_TYPE_RESOURCE);
947947
}
948948

949+
xx_parameter_type(R) ::= TYPE_MIXED . {
950+
xx_ret_type(&R, XX_TYPE_MIXED);
951+
}
952+
949953
xx_parameter_type(R) ::= TYPE_OBJECT . {
950954
xx_ret_type(&R, XX_TYPE_OBJECT);
951955
}
@@ -1596,6 +1600,10 @@ xx_declare_statement(R) ::= TYPE_ARRAY xx_declare_variable_list(L) DOTCOMMA . {
15961600
xx_ret_declare_statement(&R, XX_T_TYPE_ARRAY, &L, status->scanner_state);
15971601
}
15981602

1603+
xx_declare_statement(R) ::= TYPE_MIXED xx_declare_variable_list(L) DOTCOMMA . {
1604+
xx_ret_declare_statement(&R, XX_T_TYPE_MIXED, &L, status->scanner_state);
1605+
}
1606+
15991607
xx_declare_variable_list(R) ::= xx_declare_variable_list(L) COMMA xx_declare_variable(V) . {
16001608
xx_ret_list(&R, &L, &V, status->scanner_state);
16011609
}

0 commit comments

Comments
 (0)