[Vala] libxml tree API bindings



Hi,

I've been working on updating libxml bindings with tree API. Here are
some results and a few notes/questions.

- libxml tree API naming convention/parameter passing is crazy, I had
  to implemnt [Instance(position = number)] attribute to be able to have
  doc.save_file_format("path") method. Patch attached.

- I have found that before the second call to func, mem will not be
  freed:

    xmlstring mem;
    func(out mem);
    func(out mem);

  And here it will:

    xmlstring mem;
    func(out mem);
    mem = null;
    func(out mem);

- There is probably reason for it, but I'll ask anyway. Why weak retvals
  can't be assigned to var variables? I.e. I can't do:

    var node = doc.new_node();

  where new_node() is 

    public weak Node new_node();

  It would be excellent if "weakness" of the var was also inferred from
  the retval, as it is a little bit easier to write:

    var n = doc.new_node();
  
  instead of:

    weak Node n = doc.new_node();

- libxml functions sometimes take ownership of nodes and vala zeroes the
  node pointer after passing it using # modifier.

  For example I can't write:

    var r = new Node(null, "root");
    d.set_root_element(#r);
    r.new_child(...);

  I have to workaround it with:

    var _r = new Node(null, "root");
    weak Node r = _r;
    d.set_root_element(#_r);
    r.new_child(...);

  I understand that vala can't make any assumptions about validity of
  the pointer after passing it to the set_root_element(). Passing
  ownership is passing ownership. But in case of libxml _r would be
  valid as long as d is valid.

There are still some missing things, which I would like to do:
  - document parsing
  - xpath api

I'll send normal patch when it is done, Vapi file with additions only
and some test code are also attached.

        o.j.

Attachment: 0001-allow-to-set-exact-instnace-pointer-position.patch
Description: application/mbox

Attachment: libxml-2.0.vapi
Description: Text document

Attachment: test.vala
Description: Text Data



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]