Skip to content

Instantly share code, notes, and snippets.

@Xliff
Last active April 18, 2016 08:51
Show Gist options
  • Save Xliff/b05a08d10a144b8abd8355cba7d3fb84 to your computer and use it in GitHub Desktop.
Save Xliff/b05a08d10a144b8abd8355cba7d3fb84 to your computer and use it in GitHub Desktop.

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment