Herre is a diff against p6-MyHTML that seems to induces a seemingly infinite precompile loop in rakudo:
diff --git a/lib/HTML/MyHTML.pm6 b/lib/HTML/MyHTML.pm6
index 64c285e..00448da 100644
--- a/lib/HTML/MyHTML.pm6
+++ b/lib/HTML/MyHTML.pm6
@@ -23,22 +23,36 @@ class HTML::MyHTML is export {
method clean { $!myhtml.clean; $!tree.clean }
method dispose { $!myhtml.dispose; $!tree.dispose }
- multi method parse($html, :$enc) { $!myhtml.parse: $html, :$enc }
+
+ multi method parse($html, :$enc) {
+ $!myhtml.parse: $html, :$enc
+ }
+
multi method parse($html, :$fragment, :$base, :$ns, :$enc) {
$!myhtml.parse: $html, :$!tree :$fragment, :$base, :$ns, :$enc
}
+
multi method parse($html, :$single, :$enc) {
$!myhtml.parse: $html, :$!tree :$single, :$enc
}
+
multi method parse($html, :$fragment, :$single, :$base, :$ns, :$enc) {
- $!myhtml.parse: $html, :$!tree :$fragment, :$single, :$base, :$ns, :$enc
+ $!myhtml.parse:
+ $html, :$!tree :$fragment, :$single, :$base, :$ns, :$enc
}
- multi method parse($html, :$chunk) { $!myhtml.parse: $html, :$chunk }
+
+ multi method parse($html, :$chunk) {
+ $!myhtml.parse: $html, :$chunk
+ }
+
multi method parse($html, :$chunk, :$fragment, :$base, :$ns, :$enc) {
- $!myhtml.parse: $html, :$!tree, :$chunk, :$fragment, :$base, :$ns, :$enc
+ $!myhtml.parse:
+ $html, :$!tree, :$chunk, :$fragment, :$base, :$ns, :$enc
}
+
multi method parse($html, :$chunk, :$single) {
$!myhtml.parse: $html, :$!tree, :$chunk, :$single
}
+
method chunk-end { $!myhtml.chunk-end($!tree) }
}
diff --git a/lib/HTML/MyHTML/NativeCall.pm6 b/lib/HTML/MyHTML/NativeCall.pm6
index 5fc617c..78acd40 100644
--- a/lib/HTML/MyHTML/NativeCall.pm6
+++ b/lib/HTML/MyHTML/NativeCall.pm6
@@ -287,3 +287,27 @@ class MyHTML is repr('CPointer') is export {
method chunk-end(:$tree) { myhtml_parse_chunk_end($tree) }
}
+=cut
+
+enum myhtml_options (
+ MyHTML_OPTIONS_DEFAULT => 0x00,
+ MyHTML_OPTIONS_PARSE_MODE_SINGLE => 0x01,
+ MyHTML_OPTIONS_PARSE_MODE_ALL_IN_ONE => 0x02,
+ MyHTML_OPTIONS_PARSE_MODE_SEPARATELY => 0x04,
+ MyHTML_OPTIONS_PARSE_MODE_WORKER_TREE => 0x08,
+ MyHTML_OPTIONS_PARSE_MODE_WORKER_INDEX => 0x10,
+ MyHTML_OPTIONS_PARSE_MODE_TREE_INDEX => 0x20
+);
+
cbwood@infinity:~/projects/p6-MyHTML/lib/HTML/MyHTML$ git diff > p6-MyHTML.diff
cbwood@infinity:~/projects/p6-MyHTML/lib/HTML/MyHTML$ cd ..
cbwood@infinity:~/projects/p6-MyHTML/lib/HTML$ cd ..
cbwood@infinity:~/projects/p6-MyHTML/lib$ cd ..
cbwood@infinity:~/projects/p6-MyHTML$ git diff > p6-MyHTML.diff
cbwood@infinity:~/projects/p6-MyHTML$ cat
^C
cbwood@infinity:~/projects/p6-MyHTML$ cat p6-MyHTML.diff
diff --git a/lib/HTML/MyHTML.pm6 b/lib/HTML/MyHTML.pm6
index 64c285e..00448da 100644
--- a/lib/HTML/MyHTML.pm6
+++ b/lib/HTML/MyHTML.pm6
@@ -23,22 +23,36 @@ class HTML::MyHTML is export {
method clean { $!myhtml.clean; $!tree.clean }
method dispose { $!myhtml.dispose; $!tree.dispose }
- multi method parse($html, :$enc) { $!myhtml.parse: $html, :$enc }
+
+ multi method parse($html, :$enc) {
+ $!myhtml.parse: $html, :$enc
+ }
+
multi method parse($html, :$fragment, :$base, :$ns, :$enc) {
$!myhtml.parse: $html, :$!tree :$fragment, :$base, :$ns, :$enc
}
+
multi method parse($html, :$single, :$enc) {
$!myhtml.parse: $html, :$!tree :$single, :$enc
}
+
multi method parse($html, :$fragment, :$single, :$base, :$ns, :$enc) {
- $!myhtml.parse: $html, :$!tree :$fragment, :$single, :$base, :$ns, :$enc
+ $!myhtml.parse:
+ $html, :$!tree :$fragment, :$single, :$base, :$ns, :$enc
}
- multi method parse($html, :$chunk) { $!myhtml.parse: $html, :$chunk }
+
+ multi method parse($html, :$chunk) {
+ $!myhtml.parse: $html, :$chunk
+ }
+
multi method parse($html, :$chunk, :$fragment, :$base, :$ns, :$enc) {
- $!myhtml.parse: $html, :$!tree, :$chunk, :$fragment, :$base, :$ns, :$enc
+ $!myhtml.parse:
+ $html, :$!tree, :$chunk, :$fragment, :$base, :$ns, :$enc
}
+
multi method parse($html, :$chunk, :$single) {
$!myhtml.parse: $html, :$!tree, :$chunk, :$single
}
+
method chunk-end { $!myhtml.chunk-end($!tree) }
}
diff --git a/lib/HTML/MyHTML/NativeCall.pm6 b/lib/HTML/MyHTML/NativeCall.pm6
index 5fc617c..78acd40 100644
--- a/lib/HTML/MyHTML/NativeCall.pm6
+++ b/lib/HTML/MyHTML/NativeCall.pm6
@@ -287,3 +287,27 @@ class MyHTML is repr('CPointer') is export {
method chunk-end(:$tree) { myhtml_parse_chunk_end($tree) }
}
+=cut
+
+enum myhtml_options (
+ MyHTML_OPTIONS_DEFAULT => 0x00,
+ MyHTML_OPTIONS_PARSE_MODE_SINGLE => 0x01,
+ MyHTML_OPTIONS_PARSE_MODE_ALL_IN_ONE => 0x02,
+ MyHTML_OPTIONS_PARSE_MODE_SEPARATELY => 0x04,
+ MyHTML_OPTIONS_PARSE_MODE_WORKER_TREE => 0x08,
+ MyHTML_OPTIONS_PARSE_MODE_WORKER_INDEX => 0x10,
+ MyHTML_OPTIONS_PARSE_MODE_TREE_INDEX => 0x20
+);
+
+class HTML::MyHTML::NativeCall::MyHTML is repr('CStruct') {
+ has Pointer $.thread;
+ has Pointer $.async_incoming_buf;
+ has Pointer $.mchar;
+ has Pointer $.tag_index;
+ has Pointer $.parse_state_func;
+ has Pointer $.insertion_func;
+
+ # cw: uint32 to stand in for enum myhtml_options, for now.
+ has uint32 $.opt;
+ has Pointer $.marker;
+}
diff --git a/lib/HTML/MyHTML/Tree.pm6 b/lib/HTML/MyHTML/Tree.pm6
index 88fb202..825d0a8 100644
--- a/lib/HTML/MyHTML/Tree.pm6
+++ b/lib/HTML/MyHTML/Tree.pm6
@@ -8,6 +8,9 @@ use HTML::MyHTML::Lib;
use HTML::MyHTML::Status;
use HTML::MyHTML::Tag;
+# cw: Added for CStruct MyHTML repr
+use HTML::MyHTML::NativeCall;
+
class FILE is repr('CPointer') {}
class MCharAsync is repr('CPointer') {}
class MyHTML is repr('CPointer') {}
@@ -96,13 +99,18 @@ sub myhtml_tree_create() is native(&lib) returns TreeStruct {*}
#| @param[in] workmyhtml_t*
#|
#| @return MyHTML_STATUS_OK if successful, otherwise an error status
-sub myhtml_tree_init(TreeStruct, MyHTML) is native(&lib) returns int32 {*}
+sub myhtml_tree_init(
+ TreeStruct,
+ HTML::MyHTML::NativeCall::MyHTML
+) is native(&lib) returns int32 {*}
-method new(\myhtml) {
- my \mytree := myhtml_tree_create();
+method new($myhtml) {
+ my $mytree := myhtml_tree_create();
say 'tree created';
- say status myhtml_tree_init(mytree, myhtml);
- return mytree;
+ #my HTML::MyHTML::NativeCall::MyHTML $myhtml2 =
+ # HTML::MyHTML::NativeCall::MyHTML.new;
+ say myhtml_tree_init($mytree, $myhtml);
+ return $mytree;
}
#| Clears resources before new parsing