whole_func_string: function() {
      const result = [];
      while (this.token != this.EOF && this.token !== ")") {
        this.expect(this.tok.T_STRING);
        const directive = this.node("declaredirective");
        let key = this.node("identifier");
        const name = this.text();
        this.next();
        key = key(name);
        let value = null;
        if (this.expect("=")) {
          value = this.next().read_expr();
        }
        result.push(directive(key, value));
        if (this.token !== ",") break;
        this.next();
      }
      return result;
    }
func_code_string: function() {
      const result = [];
      while (this.token != this.EOF && this.token !== ")") {
        this.expect(this.tok.T_STRING);
        const directive = this.node("declaredirective");
        let key = this.node("identifier");
        const name = this.text();
        this.next();
        key = key(name);
        let value = null;
        if (this.expect("=")) {
          value = this.next().read_expr();
        }
        result.push(directive(key, value));
        if (this.token !== ",") break;
        this.next();
      }
      return result;
    }
func_documentation_string: Reads a list of constants declaration
  ```ebnf
  declare_list ::= IDENTIFIER '=' expr (',' IDENTIFIER '=' expr)*
  ```
  @retrurn {Array}