}
P->impls = psi_plist_add(P->impls, &impl);
}
+static inline void psi_parser_proc_add_lib(struct psi_parser *P, zend_string *lib) {
+ char *libname = strdup(lib->val);
+ P->file.libnames = psi_plist_add(P->file.libnames, &libname);
+}
/* end code */
}
%type <struct psi_token **> impl_stmt
%destructor {psi_impl_stmt_free(&$$);} impl_stmt
%type <struct psi_token *> impl_type_token impl_type_restricted_token impl_type_extended_token callback_rval let_func_token set_func_token assert_stmt_token
-%destructor {psi_token_free(&$$);} impl_type_token impl_type_restricted_token impl_type_extended_token callback_rval let_func_token set_func_token assert_stmt_token
+%destructor {} impl_type_token impl_type_restricted_token impl_type_extended_token callback_rval let_func_token set_func_token assert_stmt_token
%type <struct psi_plist *> impl_args impl_stmts let_exps let_func_exps callback_arg_list callback_args set_exps set_func_exps free_exps
%destructor {psi_plist_free($$);} impl_args impl_stmts let_exps let_func_exps callback_arg_list callback_args set_exps set_func_exps free_exps
}
}
| lib {
- char *libname = strdup($lib->text->val);
- P->file.libnames = psi_plist_add(P->file.libnames, &libname);
+ psi_parser_proc_add_lib(P, $lib->text);
}
| constant {
psi_parser_proc_add_const(P, $constant);
LIB QUOTED_STRING EOS {
$lib = $QUOTED_STRING;
}
+| HASH PRAGMA LIB QUOTED_STRING EOS {
+ $lib = $QUOTED_STRING;
+}
;
cpp:
#if PSI_DEBUG_LEX
PSI_DEBUG_PRINT(P, "PSI: LEX index %4zu ", *index);
#endif
- if (psi_plist_get(tokens, (*index)++, &token)) {
+ if (psi_plist_get(tokens, (*index)++, &token) && token) {
#if PSI_DEBUG_LEX
PSI_DEBUG_DUMP(P, psi_token_dump, token);
#endif