This commit is contained in:
ekibun
2021-10-03 22:09:08 +08:00
parent ba270b95ef
commit 8b279c2926
35 changed files with 5125 additions and 78 deletions

BIN
coverage/amber.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 B

BIN
coverage/emerald.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 B

519
coverage/gcov.css Normal file
View File

@@ -0,0 +1,519 @@
/* All views: initial background and text color */
body
{
color: #000000;
background-color: #FFFFFF;
}
/* All views: standard link format*/
a:link
{
color: #284FA8;
text-decoration: underline;
}
/* All views: standard link - visited format */
a:visited
{
color: #00CB40;
text-decoration: underline;
}
/* All views: standard link - activated format */
a:active
{
color: #FF0040;
text-decoration: underline;
}
/* All views: main title format */
td.title
{
text-align: center;
padding-bottom: 10px;
font-family: sans-serif;
font-size: 20pt;
font-style: italic;
font-weight: bold;
}
/* All views: header item format */
td.headerItem
{
text-align: right;
padding-right: 6px;
font-family: sans-serif;
font-weight: bold;
vertical-align: top;
white-space: nowrap;
}
/* All views: header item value format */
td.headerValue
{
text-align: left;
color: #284FA8;
font-family: sans-serif;
font-weight: bold;
white-space: nowrap;
}
/* All views: header item coverage table heading */
td.headerCovTableHead
{
text-align: center;
padding-right: 6px;
padding-left: 6px;
padding-bottom: 0px;
font-family: sans-serif;
font-size: 80%;
white-space: nowrap;
}
/* All views: header item coverage table entry */
td.headerCovTableEntry
{
text-align: right;
color: #284FA8;
font-family: sans-serif;
font-weight: bold;
white-space: nowrap;
padding-left: 12px;
padding-right: 4px;
background-color: #DAE7FE;
}
/* All views: header item coverage table entry for high coverage rate */
td.headerCovTableEntryHi
{
text-align: right;
color: #000000;
font-family: sans-serif;
font-weight: bold;
white-space: nowrap;
padding-left: 12px;
padding-right: 4px;
background-color: #A7FC9D;
}
/* All views: header item coverage table entry for medium coverage rate */
td.headerCovTableEntryMed
{
text-align: right;
color: #000000;
font-family: sans-serif;
font-weight: bold;
white-space: nowrap;
padding-left: 12px;
padding-right: 4px;
background-color: #FFEA20;
}
/* All views: header item coverage table entry for ow coverage rate */
td.headerCovTableEntryLo
{
text-align: right;
color: #000000;
font-family: sans-serif;
font-weight: bold;
white-space: nowrap;
padding-left: 12px;
padding-right: 4px;
background-color: #FF0000;
}
/* All views: header legend value for legend entry */
td.headerValueLeg
{
text-align: left;
color: #000000;
font-family: sans-serif;
font-size: 80%;
white-space: nowrap;
padding-top: 4px;
}
/* All views: color of horizontal ruler */
td.ruler
{
background-color: #6688D4;
}
/* All views: version string format */
td.versionInfo
{
text-align: center;
padding-top: 2px;
font-family: sans-serif;
font-style: italic;
}
/* Directory view/File view (all)/Test case descriptions:
table headline format */
td.tableHead
{
text-align: center;
color: #FFFFFF;
background-color: #6688D4;
font-family: sans-serif;
font-size: 120%;
font-weight: bold;
white-space: nowrap;
padding-left: 4px;
padding-right: 4px;
}
span.tableHeadSort
{
padding-right: 4px;
}
/* Directory view/File view (all): filename entry format */
td.coverFile
{
text-align: left;
padding-left: 10px;
padding-right: 20px;
color: #284FA8;
background-color: #DAE7FE;
font-family: monospace;
}
/* Directory view/File view (all): bar-graph entry format*/
td.coverBar
{
padding-left: 10px;
padding-right: 10px;
background-color: #DAE7FE;
}
/* Directory view/File view (all): bar-graph outline color */
td.coverBarOutline
{
background-color: #000000;
}
/* Directory view/File view (all): percentage entry for files with
high coverage rate */
td.coverPerHi
{
text-align: right;
padding-left: 10px;
padding-right: 10px;
background-color: #A7FC9D;
font-weight: bold;
font-family: sans-serif;
}
/* Directory view/File view (all): line count entry for files with
high coverage rate */
td.coverNumHi
{
text-align: right;
padding-left: 10px;
padding-right: 10px;
background-color: #A7FC9D;
white-space: nowrap;
font-family: sans-serif;
}
/* Directory view/File view (all): percentage entry for files with
medium coverage rate */
td.coverPerMed
{
text-align: right;
padding-left: 10px;
padding-right: 10px;
background-color: #FFEA20;
font-weight: bold;
font-family: sans-serif;
}
/* Directory view/File view (all): line count entry for files with
medium coverage rate */
td.coverNumMed
{
text-align: right;
padding-left: 10px;
padding-right: 10px;
background-color: #FFEA20;
white-space: nowrap;
font-family: sans-serif;
}
/* Directory view/File view (all): percentage entry for files with
low coverage rate */
td.coverPerLo
{
text-align: right;
padding-left: 10px;
padding-right: 10px;
background-color: #FF0000;
font-weight: bold;
font-family: sans-serif;
}
/* Directory view/File view (all): line count entry for files with
low coverage rate */
td.coverNumLo
{
text-align: right;
padding-left: 10px;
padding-right: 10px;
background-color: #FF0000;
white-space: nowrap;
font-family: sans-serif;
}
/* File view (all): "show/hide details" link format */
a.detail:link
{
color: #B8D0FF;
font-size:80%;
}
/* File view (all): "show/hide details" link - visited format */
a.detail:visited
{
color: #B8D0FF;
font-size:80%;
}
/* File view (all): "show/hide details" link - activated format */
a.detail:active
{
color: #FFFFFF;
font-size:80%;
}
/* File view (detail): test name entry */
td.testName
{
text-align: right;
padding-right: 10px;
background-color: #DAE7FE;
font-family: sans-serif;
}
/* File view (detail): test percentage entry */
td.testPer
{
text-align: right;
padding-left: 10px;
padding-right: 10px;
background-color: #DAE7FE;
font-family: sans-serif;
}
/* File view (detail): test lines count entry */
td.testNum
{
text-align: right;
padding-left: 10px;
padding-right: 10px;
background-color: #DAE7FE;
font-family: sans-serif;
}
/* Test case descriptions: test name format*/
dt
{
font-family: sans-serif;
font-weight: bold;
}
/* Test case descriptions: description table body */
td.testDescription
{
padding-top: 10px;
padding-left: 30px;
padding-bottom: 10px;
padding-right: 30px;
background-color: #DAE7FE;
}
/* Source code view: function entry */
td.coverFn
{
text-align: left;
padding-left: 10px;
padding-right: 20px;
color: #284FA8;
background-color: #DAE7FE;
font-family: monospace;
}
/* Source code view: function entry zero count*/
td.coverFnLo
{
text-align: right;
padding-left: 10px;
padding-right: 10px;
background-color: #FF0000;
font-weight: bold;
font-family: sans-serif;
}
/* Source code view: function entry nonzero count*/
td.coverFnHi
{
text-align: right;
padding-left: 10px;
padding-right: 10px;
background-color: #DAE7FE;
font-weight: bold;
font-family: sans-serif;
}
/* Source code view: source code format */
pre.source
{
font-family: monospace;
white-space: pre;
margin-top: 2px;
}
/* Source code view: line number format */
span.lineNum
{
background-color: #EFE383;
}
/* Source code view: format for lines which were executed */
td.lineCov,
span.lineCov
{
background-color: #CAD7FE;
}
/* Source code view: format for Cov legend */
span.coverLegendCov
{
padding-left: 10px;
padding-right: 10px;
padding-bottom: 2px;
background-color: #CAD7FE;
}
/* Source code view: format for lines which were not executed */
td.lineNoCov,
span.lineNoCov
{
background-color: #FF6230;
}
/* Source code view: format for NoCov legend */
span.coverLegendNoCov
{
padding-left: 10px;
padding-right: 10px;
padding-bottom: 2px;
background-color: #FF6230;
}
/* Source code view (function table): standard link - visited format */
td.lineNoCov > a:visited,
td.lineCov > a:visited
{
color: black;
text-decoration: underline;
}
/* Source code view: format for lines which were executed only in a
previous version */
span.lineDiffCov
{
background-color: #B5F7AF;
}
/* Source code view: format for branches which were executed
* and taken */
span.branchCov
{
background-color: #CAD7FE;
}
/* Source code view: format for branches which were executed
* but not taken */
span.branchNoCov
{
background-color: #FF6230;
}
/* Source code view: format for branches which were not executed */
span.branchNoExec
{
background-color: #FF6230;
}
/* Source code view: format for the source code heading line */
pre.sourceHeading
{
white-space: pre;
font-family: monospace;
font-weight: bold;
margin: 0px;
}
/* All views: header legend value for low rate */
td.headerValueLegL
{
font-family: sans-serif;
text-align: center;
white-space: nowrap;
padding-left: 4px;
padding-right: 2px;
background-color: #FF0000;
font-size: 80%;
}
/* All views: header legend value for med rate */
td.headerValueLegM
{
font-family: sans-serif;
text-align: center;
white-space: nowrap;
padding-left: 2px;
padding-right: 2px;
background-color: #FFEA20;
font-size: 80%;
}
/* All views: header legend value for hi rate */
td.headerValueLegH
{
font-family: sans-serif;
text-align: center;
white-space: nowrap;
padding-left: 2px;
padding-right: 4px;
background-color: #A7FC9D;
font-size: 80%;
}
/* All views except source code view: legend format for low coverage */
span.coverLegendCovLo
{
padding-left: 10px;
padding-right: 10px;
padding-top: 2px;
background-color: #FF0000;
}
/* All views except source code view: legend format for med coverage */
span.coverLegendCovMed
{
padding-left: 10px;
padding-right: 10px;
padding-top: 2px;
background-color: #FFEA20;
}
/* All views except source code view: legend format for hi coverage */
span.coverLegendCovHi
{
padding-left: 10px;
padding-right: 10px;
padding-top: 2px;
background-color: #A7FC9D;
}

BIN
coverage/glass.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

View File

@@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info</title>
<link rel="stylesheet" type="text/css" href="gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue">top level</td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">652</td>
<td class="headerCovTableEntry">736</td>
<td class="headerCovTableEntryMed">88.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="80%" cellpadding=1 cellspacing=1 border=0>
<tr>
<td width="50%"><br></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
</tr>
<tr>
<td class="tableHead">Directory <span class="tableHeadSort"><a href="index.html"><img src="updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
<td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
<td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td>
</tr>
<tr>
<td class="coverFile"><a href="src/index.html">src</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=89 height=10 alt="88.6%"><img src="snow.png" width=11 height=10 alt="88.6%"></td></tr></table>
</td>
<td class="coverPerMed">88.6&nbsp;%</td>
<td class="coverNumMed">652 / 736</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
</table>
</center>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info</title>
<link rel="stylesheet" type="text/css" href="gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue">top level</td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">652</td>
<td class="headerCovTableEntry">736</td>
<td class="headerCovTableEntryMed">88.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="80%" cellpadding=1 cellspacing=1 border=0>
<tr>
<td width="50%"><br></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
</tr>
<tr>
<td class="tableHead">Directory <span class="tableHeadSort"><a href="index.html"><img src="updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
<td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td>
<td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
</tr>
<tr>
<td class="coverFile"><a href="src/index.html">src</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=89 height=10 alt="88.6%"><img src="snow.png" width=11 height=10 alt="88.6%"></td></tr></table>
</td>
<td class="coverPerMed">88.6&nbsp;%</td>
<td class="coverNumMed">652 / 736</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
</table>
</center>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

93
coverage/index.html Normal file
View File

@@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info</title>
<link rel="stylesheet" type="text/css" href="gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue">top level</td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">652</td>
<td class="headerCovTableEntry">736</td>
<td class="headerCovTableEntryMed">88.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="80%" cellpadding=1 cellspacing=1 border=0>
<tr>
<td width="50%"><br></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
</tr>
<tr>
<td class="tableHead">Directory <span class="tableHeadSort"><img src="glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td>
<td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
<td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
</tr>
<tr>
<td class="coverFile"><a href="src/index.html">src</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=89 height=10 alt="88.6%"><img src="snow.png" width=11 height=10 alt="88.6%"></td></tr></table>
</td>
<td class="coverPerMed">88.6&nbsp;%</td>
<td class="coverNumMed">652 / 736</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
</table>
</center>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

756
coverage/lcov.info Normal file
View File

@@ -0,0 +1,756 @@
SF:lib/src/object.dart
DA:14,3
DA:15,3
DA:17,3
DA:18,3
DA:25,3
DA:27,3
DA:31,15
DA:33,8
DA:34,3
DA:35,3
DA:39,0
DA:41,0
DA:44,0
DA:53,3
DA:54,3
DA:55,3
DA:56,6
DA:57,15
DA:60,3
DA:61,18
DA:65,0
DA:67,0
DA:68,0
DA:71,3
DA:73,3
DA:74,3
DA:75,3
DA:76,3
DA:78,15
DA:79,6
DA:87,2
DA:88,2
DA:89,0
DA:90,0
DA:92,4
DA:93,5
DA:97,0
DA:99,0
DA:102,3
DA:103,3
DA:104,6
DA:108,2
DA:110,2
DA:111,2
DA:112,2
DA:124,3
DA:125,3
DA:126,6
DA:127,9
DA:128,9
DA:131,3
DA:133,3
DA:134,3
DA:135,3
DA:136,3
DA:138,6
DA:139,9
DA:140,3
DA:143,1
DA:145,2
DA:146,3
DA:152,6
DA:154,3
DA:156,3
DA:157,3
DA:158,9
DA:160,0
DA:161,0
DA:163,3
DA:164,3
DA:168,3
DA:169,3
DA:170,3
DA:172,0
DA:174,3
DA:175,6
DA:177,3
DA:178,3
DA:179,3
DA:180,3
DA:181,6
DA:182,3
DA:187,2
DA:189,4
DA:198,3
DA:200,3
DA:201,6
DA:203,3
DA:206,6
DA:208,3
DA:210,3
DA:211,6
DA:212,3
DA:214,6
DA:215,12
DA:217,0
DA:218,12
DA:219,3
DA:221,0
DA:223,0
DA:229,3
DA:232,3
DA:233,3
DA:234,1
DA:235,3
DA:236,6
DA:237,3
DA:239,3
DA:241,6
DA:242,5
DA:243,0
DA:244,3
DA:247,2
DA:248,4
DA:249,4
DA:250,2
DA:253,3
DA:255,3
DA:256,6
DA:258,3
DA:259,6
DA:260,8
DA:262,3
DA:263,0
DA:266,6
DA:267,6
DA:268,6
DA:272,3
DA:273,3
DA:274,3
DA:275,6
DA:281,3
DA:282,3
DA:283,3
DA:284,3
DA:285,3
DA:290,3
DA:292,3
DA:293,6
DA:294,6
DA:300,3
DA:302,3
DA:305,3
DA:307,3
DA:310,0
DA:312,0
LF:146
LH:126
end_of_record
SF:lib/src/isolate.dart
DA:11,9
DA:20,3
DA:21,3
DA:22,5
DA:23,6
DA:24,3
DA:25,3
DA:26,3
DA:27,9
DA:28,9
DA:32,3
DA:33,2
DA:34,2
DA:35,4
DA:36,6
DA:37,4
DA:41,3
DA:42,2
DA:43,4
DA:44,6
DA:45,2
DA:46,4
DA:48,2
DA:49,6
DA:50,2
DA:51,6
DA:54,2
DA:55,2
DA:61,3
DA:62,3
DA:63,5
DA:64,3
DA:65,3
DA:66,3
DA:67,9
DA:68,9
DA:72,3
DA:73,6
DA:74,3
DA:77,2
DA:78,2
DA:79,2
DA:80,4
DA:81,2
DA:82,6
DA:83,6
DA:84,2
DA:85,4
DA:86,6
DA:88,4
DA:91,2
DA:93,2
DA:94,2
DA:95,4
DA:96,6
DA:97,4
DA:104,2
DA:105,2
DA:106,2
DA:107,4
DA:108,2
DA:109,2
DA:110,1
DA:111,2
DA:113,1
DA:116,0
DA:118,0
DA:119,0
DA:122,0
DA:124,0
DA:125,0
DA:126,0
DA:127,0
DA:128,0
DA:129,0
DA:133,4
DA:135,2
DA:137,2
DA:138,2
DA:139,4
DA:140,2
DA:141,2
DA:142,2
DA:145,2
DA:147,4
DA:148,2
DA:149,2
DA:153,4
DA:156,0
DA:157,0
DA:161,4
DA:182,1
DA:188,1
DA:189,1
DA:190,1
DA:191,1
DA:193,1
DA:194,1
DA:195,1
DA:199,1
DA:200,2
DA:201,2
DA:202,1
DA:205,1
DA:206,1
DA:208,2
DA:209,1
DA:210,2
DA:212,0
DA:215,0
DA:218,0
DA:219,0
DA:221,0
DA:223,0
DA:227,0
DA:228,0
DA:229,0
DA:230,0
DA:232,2
DA:236,1
DA:237,1
DA:238,1
DA:240,2
DA:241,1
DA:242,2
DA:244,1
DA:246,2
DA:247,1
DA:248,1
DA:249,0
DA:250,1
DA:256,1
DA:261,1
DA:262,1
DA:263,2
DA:264,2
DA:269,1
DA:271,2
DA:272,1
DA:273,2
DA:274,0
DA:275,1
LF:142
LH:118
end_of_record
SF:lib/src/wrapper.dart
DA:10,2
DA:11,2
DA:14,2
DA:18,1
DA:22,2
DA:29,2
DA:30,4
DA:31,4
DA:35,2
DA:38,4
DA:39,2
DA:42,3
DA:48,3
DA:49,6
DA:50,6
DA:51,6
DA:52,3
DA:56,3
DA:58,6
DA:59,3
DA:60,3
DA:61,3
DA:62,4
DA:63,2
DA:64,4
DA:65,4
DA:68,12
DA:69,3
DA:70,9
DA:72,12
DA:73,6
DA:74,3
DA:75,3
DA:76,3
DA:77,3
DA:78,3
DA:79,3
DA:80,3
DA:81,3
DA:82,3
DA:83,6
DA:84,6
DA:85,2
DA:86,4
DA:87,6
DA:88,3
DA:89,3
DA:93,3
DA:94,7
DA:95,7
DA:96,7
DA:97,6
DA:98,3
DA:99,0
DA:100,0
DA:101,0
DA:102,0
DA:103,0
DA:106,3
DA:107,6
DA:109,3
DA:110,4
DA:111,2
DA:112,6
DA:113,4
DA:117,3
DA:118,4
DA:119,2
DA:120,4
DA:121,6
DA:126,3
DA:128,15
DA:129,3
DA:130,6
DA:133,6
DA:135,3
DA:136,6
DA:137,3
DA:143,3
DA:145,3
DA:146,6
DA:147,9
DA:148,4
DA:151,3
DA:152,6
DA:153,3
DA:154,4
DA:155,3
DA:156,3
DA:157,3
DA:158,6
DA:159,9
DA:161,3
DA:162,6
DA:163,3
DA:166,6
DA:167,3
DA:168,3
DA:169,6
DA:170,0
DA:172,6
DA:173,3
DA:174,2
DA:176,9
DA:177,3
DA:178,9
DA:179,2
DA:180,2
DA:182,8
DA:183,2
DA:184,2
DA:185,9
DA:186,3
DA:188,3
DA:189,3
DA:190,3
DA:191,8
DA:192,3
DA:193,6
DA:194,3
DA:195,3
DA:196,6
DA:198,2
DA:199,2
DA:200,4
DA:203,3
DA:204,3
DA:205,9
DA:206,3
DA:207,0
DA:208,3
DA:209,6
DA:210,2
DA:211,4
DA:212,2
DA:213,2
DA:214,4
DA:215,2
DA:216,4
DA:217,2
DA:223,8
DA:224,0
DA:225,0
DA:228,2
DA:229,2
DA:230,2
DA:231,2
DA:232,4
DA:233,6
DA:234,4
DA:235,4
DA:236,4
DA:237,2
DA:238,2
DA:239,2
DA:240,4
DA:242,6
DA:243,2
LF:158
LH:149
end_of_record
SF:lib/src/engine.dart
DA:33,3
DA:39,3
DA:40,3
DA:41,6
DA:44,3
DA:45,3
DA:46,9
DA:47,3
DA:48,6
DA:49,6
DA:51,3
DA:52,15
DA:56,3
DA:58,3
DA:60,3
DA:62,3
DA:64,6
DA:66,3
DA:67,1
DA:68,2
DA:69,2
DA:70,1
DA:71,2
DA:72,1
DA:74,1
DA:75,3
DA:76,2
DA:77,2
DA:78,4
DA:80,0
DA:82,2
DA:83,3
DA:84,3
DA:85,9
DA:86,3
DA:88,0
DA:90,0
DA:91,0
DA:92,0
DA:94,0
DA:95,0
DA:96,0
DA:98,0
DA:99,0
DA:100,0
DA:101,0
DA:102,0
DA:103,0
DA:107,3
DA:108,3
DA:109,3
DA:110,3
DA:111,6
DA:115,3
DA:116,3
DA:117,3
DA:118,3
DA:119,3
DA:120,6
DA:122,3
DA:124,3
DA:125,1
DA:126,1
DA:130,3
DA:131,3
DA:132,3
DA:135,6
DA:136,3
DA:137,3
DA:144,3
DA:145,9
DA:146,3
DA:151,3
DA:156,3
DA:157,3
DA:158,3
DA:164,9
DA:165,1
DA:166,1
DA:168,3
DA:169,3
LF:81
LH:67
end_of_record
SF:lib/src/ffi.dart
DA:14,3
DA:16,3
DA:17,3
DA:25,3
DA:26,6
DA:29,3
DA:30,6
DA:31,9
DA:36,3
DA:37,7
DA:40,3
DA:41,7
DA:44,3
DA:51,3
DA:52,3
DA:53,3
DA:54,12
DA:56,3
DA:57,2
DA:58,10
DA:60,3
DA:61,2
DA:116,15
DA:117,3
DA:118,3
DA:119,0
DA:120,0
DA:121,0
DA:122,0
DA:123,0
DA:124,0
DA:125,0
DA:126,0
DA:132,0
DA:142,0
DA:147,9
DA:148,3
DA:159,9
DA:160,3
DA:172,3
DA:174,6
DA:176,9
DA:178,9
DA:180,3
DA:181,6
DA:185,9
DA:187,3
DA:192,3
DA:193,3
DA:194,6
DA:195,12
DA:198,3
DA:202,6
DA:203,9
DA:211,0
DA:223,9
DA:224,3
DA:231,3
DA:234,3
DA:235,6
DA:238,12
DA:240,3
DA:241,12
DA:243,6
DA:244,2
DA:245,2
DA:246,4
DA:247,1
DA:248,6
DA:249,1
DA:252,6
DA:253,6
DA:254,1
DA:255,1
DA:263,9
DA:264,3
DA:275,9
DA:276,3
DA:283,3
DA:284,6
DA:285,6
DA:286,0
DA:287,6
DA:294,9
DA:295,3
DA:305,9
DA:306,3
DA:320,9
DA:321,3
DA:332,3
DA:338,3
DA:339,3
DA:340,6
DA:343,3
DA:347,3
DA:348,3
DA:349,21
DA:356,9
DA:357,3
DA:367,9
DA:368,3
DA:378,9
DA:379,3
DA:390,6
DA:391,2
DA:403,6
DA:404,2
DA:416,6
DA:417,2
DA:429,9
DA:430,3
DA:438,3
DA:442,3
DA:443,6
DA:444,3
DA:453,0
DA:466,6
DA:467,2
DA:477,6
DA:478,2
DA:490,9
DA:491,3
DA:500,3
DA:505,6
DA:513,0
DA:523,0
DA:528,0
DA:535,9
DA:536,3
DA:548,0
DA:561,6
DA:562,2
DA:574,6
DA:575,2
DA:587,6
DA:588,2
DA:600,9
DA:601,3
DA:613,9
DA:614,3
DA:622,3
DA:626,6
DA:627,6
DA:628,3
DA:629,6
DA:637,9
DA:638,3
DA:646,3
DA:650,3
DA:651,6
DA:655,3
DA:664,9
DA:665,3
DA:678,9
DA:679,3
DA:692,9
DA:693,3
DA:706,9
DA:707,3
DA:719,9
DA:720,3
DA:732,6
DA:733,2
DA:745,9
DA:746,3
DA:757,6
DA:758,2
DA:771,9
DA:772,3
DA:789,6
DA:790,2
DA:805,9
DA:806,3
DA:818,9
DA:819,3
DA:831,6
DA:832,2
DA:848,6
DA:849,2
DA:864,6
DA:865,2
DA:874,9
DA:875,3
DA:878,12
DA:885,9
DA:886,3
DA:903,9
DA:904,3
DA:915,3
DA:922,15
DA:923,3
DA:924,9
DA:925,3
DA:926,6
DA:928,6
DA:930,9
DA:931,3
DA:932,3
DA:933,21
DA:940,9
DA:941,3
DA:951,3
DA:952,1
DA:962,9
DA:963,3
DA:974,9
DA:975,3
DA:987,6
DA:988,2
LF:209
LH:192
end_of_record

BIN
coverage/ruby.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 B

BIN
coverage/snow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 B

View File

@@ -0,0 +1,72 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src/engine.dart - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">src</a> - engine.dart<span style="font-size: 80%;"> (<a href="engine.dart.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">67</td>
<td class="headerCovTableEntry">81</td>
<td class="headerCovTableEntryMed">82.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="60%" cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="engine.dart.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,72 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src/engine.dart - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">src</a> - engine.dart<span style="font-size: 80%;"> (<a href="engine.dart.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">67</td>
<td class="headerCovTableEntry">81</td>
<td class="headerCovTableEntryMed">82.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="60%" cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="engine.dart.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,248 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src/engine.dart</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">src</a> - engine.dart<span style="font-size: 80%;"> (source / <a href="engine.dart.func-sort-c.html">functions</a>)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">67</td>
<td class="headerCovTableEntry">81</td>
<td class="headerCovTableEntryMed">82.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<a name="1"><span class="lineNum"> 1 </span> : /*</a>
<a name="2"><span class="lineNum"> 2 </span> : * @Description: quickjs engine</a>
<a name="3"><span class="lineNum"> 3 </span> : * @Author: ekibun</a>
<a name="4"><span class="lineNum"> 4 </span> : * @Date: 2020-08-08 08:29:09</a>
<a name="5"><span class="lineNum"> 5 </span> : * @LastEditors: ekibun</a>
<a name="6"><span class="lineNum"> 6 </span> : * @LastEditTime: 2020-10-06 23:47:13</a>
<a name="7"><span class="lineNum"> 7 </span> : */</a>
<a name="8"><span class="lineNum"> 8 </span> : part of '../flutter_qjs.dart';</a>
<a name="9"><span class="lineNum"> 9 </span> : </a>
<a name="10"><span class="lineNum"> 10 </span> : /// Handler function to manage js module.</a>
<a name="11"><span class="lineNum"> 11 </span> : typedef _JsModuleHandler = String Function(String name);</a>
<a name="12"><span class="lineNum"> 12 </span> : </a>
<a name="13"><span class="lineNum"> 13 </span> : /// Handler to manage unhandled promise rejection.</a>
<a name="14"><span class="lineNum"> 14 </span> : typedef _JsHostPromiseRejectionHandler = void Function(dynamic reason);</a>
<a name="15"><span class="lineNum"> 15 </span> : </a>
<a name="16"><span class="lineNum"> 16 </span> : /// Quickjs engine for flutter.</a>
<a name="17"><span class="lineNum"> 17 </span> : class FlutterQjs {</a>
<a name="18"><span class="lineNum"> 18 </span> : Pointer&lt;JSRuntime&gt;? _rt;</a>
<a name="19"><span class="lineNum"> 19 </span> : Pointer&lt;JSContext&gt;? _ctx;</a>
<a name="20"><span class="lineNum"> 20 </span> : </a>
<a name="21"><span class="lineNum"> 21 </span> : /// Max stack size for quickjs.</a>
<a name="22"><span class="lineNum"> 22 </span> : final int? stackSize;</a>
<a name="23"><span class="lineNum"> 23 </span> : </a>
<a name="24"><span class="lineNum"> 24 </span> : /// Message Port for event loop. Close it to stop dispatching event loop.</a>
<a name="25"><span class="lineNum"> 25 </span> : ReceivePort port = ReceivePort();</a>
<a name="26"><span class="lineNum"> 26 </span> : </a>
<a name="27"><span class="lineNum"> 27 </span> : /// Handler function to manage js module.</a>
<a name="28"><span class="lineNum"> 28 </span> : final _JsModuleHandler? moduleHandler;</a>
<a name="29"><span class="lineNum"> 29 </span> : </a>
<a name="30"><span class="lineNum"> 30 </span> : /// Handler function to manage js module.</a>
<a name="31"><span class="lineNum"> 31 </span> : final _JsHostPromiseRejectionHandler? hostPromiseRejectionHandler;</a>
<a name="32"><span class="lineNum"> 32 </span> : </a>
<a name="33"><span class="lineNum"> 33 </span><span class="lineCov"> 3 : FlutterQjs({</span></a>
<a name="34"><span class="lineNum"> 34 </span> : this.moduleHandler,</a>
<a name="35"><span class="lineNum"> 35 </span> : this.stackSize,</a>
<a name="36"><span class="lineNum"> 36 </span> : this.hostPromiseRejectionHandler,</a>
<a name="37"><span class="lineNum"> 37 </span> : });</a>
<a name="38"><span class="lineNum"> 38 </span> : </a>
<a name="39"><span class="lineNum"> 39 </span><span class="lineCov"> 3 : _ensureEngine() {</span></a>
<a name="40"><span class="lineNum"> 40 </span><span class="lineCov"> 3 : if (_rt != null) return;</span></a>
<a name="41"><span class="lineNum"> 41 </span><span class="lineCov"> 6 : final rt = jsNewRuntime((ctx, type, ptr) {</span></a>
<a name="42"><span class="lineNum"> 42 </span> : try {</a>
<a name="43"><span class="lineNum"> 43 </span> : switch (type) {</a>
<a name="44"><span class="lineNum"> 44 </span><span class="lineCov"> 3 : case JSChannelType.METHON:</span></a>
<a name="45"><span class="lineNum"> 45 </span><span class="lineCov"> 3 : final pdata = ptr.cast&lt;Pointer&lt;JSValue&gt;&gt;();</span></a>
<a name="46"><span class="lineNum"> 46 </span><span class="lineCov"> 9 : final argc = pdata.elementAt(1).value.cast&lt;Int32&gt;().value;</span></a>
<a name="47"><span class="lineNum"> 47 </span><span class="lineCov"> 3 : final pargs = [];</span></a>
<a name="48"><span class="lineNum"> 48 </span><span class="lineCov"> 6 : for (var i = 0; i &lt; argc; ++i) {</span></a>
<a name="49"><span class="lineNum"> 49 </span><span class="lineCov"> 6 : pargs.add(_jsToDart(</span></a>
<a name="50"><span class="lineNum"> 50 </span> : ctx,</a>
<a name="51"><span class="lineNum"> 51 </span><span class="lineCov"> 3 : Pointer.fromAddress(</span></a>
<a name="52"><span class="lineNum"> 52 </span><span class="lineCov"> 15 : pdata.elementAt(2).value.address + sizeOfJSValue * i,</span></a>
<a name="53"><span class="lineNum"> 53 </span> : ),</a>
<a name="54"><span class="lineNum"> 54 </span> : ));</a>
<a name="55"><span class="lineNum"> 55 </span> : }</a>
<a name="56"><span class="lineNum"> 56 </span><span class="lineCov"> 3 : final JSInvokable func = _jsToDart(</span></a>
<a name="57"><span class="lineNum"> 57 </span> : ctx,</a>
<a name="58"><span class="lineNum"> 58 </span><span class="lineCov"> 3 : pdata.elementAt(3).value,</span></a>
<a name="59"><span class="lineNum"> 59 </span> : );</a>
<a name="60"><span class="lineNum"> 60 </span><span class="lineCov"> 3 : return _dartToJs(</span></a>
<a name="61"><span class="lineNum"> 61 </span> : ctx,</a>
<a name="62"><span class="lineNum"> 62 </span><span class="lineCov"> 3 : func.invoke(</span></a>
<a name="63"><span class="lineNum"> 63 </span> : pargs,</a>
<a name="64"><span class="lineNum"> 64 </span><span class="lineCov"> 6 : _jsToDart(ctx, pdata.elementAt(0).value),</span></a>
<a name="65"><span class="lineNum"> 65 </span> : ));</a>
<a name="66"><span class="lineNum"> 66 </span><span class="lineCov"> 3 : case JSChannelType.MODULE:</span></a>
<a name="67"><span class="lineNum"> 67 </span><span class="lineCov"> 1 : if (moduleHandler == null) throw JSError('No ModuleHandler');</span></a>
<a name="68"><span class="lineNum"> 68 </span><span class="lineCov"> 2 : final ret = moduleHandler!(</span></a>
<a name="69"><span class="lineNum"> 69 </span><span class="lineCov"> 2 : ptr.cast&lt;Utf8&gt;().toDartString(),</span></a>
<a name="70"><span class="lineNum"> 70 </span><span class="lineCov"> 1 : ).toNativeUtf8();</span></a>
<a name="71"><span class="lineNum"> 71 </span><span class="lineCov"> 2 : Future.microtask(() {</span></a>
<a name="72"><span class="lineNum"> 72 </span><span class="lineCov"> 1 : malloc.free(ret);</span></a>
<a name="73"><span class="lineNum"> 73 </span> : });</a>
<a name="74"><span class="lineNum"> 74 </span><span class="lineCov"> 1 : return ret.cast();</span></a>
<a name="75"><span class="lineNum"> 75 </span><span class="lineCov"> 3 : case JSChannelType.PROMISE_TRACK:</span></a>
<a name="76"><span class="lineNum"> 76 </span><span class="lineCov"> 2 : final err = _parseJSException(ctx, ptr);</span></a>
<a name="77"><span class="lineNum"> 77 </span><span class="lineCov"> 2 : if (hostPromiseRejectionHandler != null) {</span></a>
<a name="78"><span class="lineNum"> 78 </span><span class="lineCov"> 4 : hostPromiseRejectionHandler!(err);</span></a>
<a name="79"><span class="lineNum"> 79 </span> : } else {</a>
<a name="80"><span class="lineNum"> 80 </span><span class="lineNoCov"> 0 : print('unhandled promise rejection: $err');</span></a>
<a name="81"><span class="lineNum"> 81 </span> : }</a>
<a name="82"><span class="lineNum"> 82 </span><span class="lineCov"> 2 : return nullptr;</span></a>
<a name="83"><span class="lineNum"> 83 </span><span class="lineCov"> 3 : case JSChannelType.FREE_OBJECT:</span></a>
<a name="84"><span class="lineNum"> 84 </span><span class="lineCov"> 3 : final rt = ctx.cast&lt;JSRuntime&gt;();</span></a>
<a name="85"><span class="lineNum"> 85 </span><span class="lineCov"> 9 : _DartObject.fromAddress(rt, ptr.address)?.free();</span></a>
<a name="86"><span class="lineNum"> 86 </span><span class="lineCov"> 3 : return nullptr;</span></a>
<a name="87"><span class="lineNum"> 87 </span> : }</a>
<a name="88"><span class="lineNum"> 88 </span><span class="lineNoCov"> 0 : throw JSError('call channel with wrong type');</span></a>
<a name="89"><span class="lineNum"> 89 </span> : } catch (e) {</a>
<a name="90"><span class="lineNum"> 90 </span><span class="lineNoCov"> 0 : if (type == JSChannelType.FREE_OBJECT) {</span></a>
<a name="91"><span class="lineNum"> 91 </span><span class="lineNoCov"> 0 : print('DartObject release error: $e');</span></a>
<a name="92"><span class="lineNum"> 92 </span><span class="lineNoCov"> 0 : return nullptr;</span></a>
<a name="93"><span class="lineNum"> 93 </span> : }</a>
<a name="94"><span class="lineNum"> 94 </span><span class="lineNoCov"> 0 : if (type == JSChannelType.MODULE) {</span></a>
<a name="95"><span class="lineNum"> 95 </span><span class="lineNoCov"> 0 : print('host Promise Rejection Handler error: $e');</span></a>
<a name="96"><span class="lineNum"> 96 </span><span class="lineNoCov"> 0 : return nullptr;</span></a>
<a name="97"><span class="lineNum"> 97 </span> : }</a>
<a name="98"><span class="lineNum"> 98 </span><span class="lineNoCov"> 0 : final throwObj = _dartToJs(ctx, e);</span></a>
<a name="99"><span class="lineNum"> 99 </span><span class="lineNoCov"> 0 : final err = jsThrow(ctx, throwObj);</span></a>
<a name="100"><span class="lineNum"> 100 </span><span class="lineNoCov"> 0 : jsFreeValue(ctx, throwObj);</span></a>
<a name="101"><span class="lineNum"> 101 </span><span class="lineNoCov"> 0 : if (type == JSChannelType.MODULE) {</span></a>
<a name="102"><span class="lineNum"> 102 </span><span class="lineNoCov"> 0 : jsFreeValue(ctx, err);</span></a>
<a name="103"><span class="lineNum"> 103 </span><span class="lineNoCov"> 0 : return nullptr;</span></a>
<a name="104"><span class="lineNum"> 104 </span> : }</a>
<a name="105"><span class="lineNum"> 105 </span> : return err;</a>
<a name="106"><span class="lineNum"> 106 </span> : }</a>
<a name="107"><span class="lineNum"> 107 </span><span class="lineCov"> 3 : }, port);</span></a>
<a name="108"><span class="lineNum"> 108 </span><span class="lineCov"> 3 : final stackSize = this.stackSize ?? 0;</span></a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 3 : if (stackSize &gt; 0) jsSetMaxStackSize(rt, stackSize);</span></a>
<a name="110"><span class="lineNum"> 110 </span><span class="lineCov"> 3 : _rt = rt;</span></a>
<a name="111"><span class="lineNum"> 111 </span><span class="lineCov"> 6 : _ctx = jsNewContext(rt);</span></a>
<a name="112"><span class="lineNum"> 112 </span> : }</a>
<a name="113"><span class="lineNum"> 113 </span> : </a>
<a name="114"><span class="lineNum"> 114 </span> : /// Free Runtime and Context which can be recreate when evaluate again.</a>
<a name="115"><span class="lineNum"> 115 </span><span class="lineCov"> 3 : close() {</span></a>
<a name="116"><span class="lineNum"> 116 </span><span class="lineCov"> 3 : final rt = _rt;</span></a>
<a name="117"><span class="lineNum"> 117 </span><span class="lineCov"> 3 : final ctx = _ctx;</span></a>
<a name="118"><span class="lineNum"> 118 </span><span class="lineCov"> 3 : _rt = null;</span></a>
<a name="119"><span class="lineNum"> 119 </span><span class="lineCov"> 3 : _ctx = null;</span></a>
<a name="120"><span class="lineNum"> 120 </span><span class="lineCov"> 6 : if (ctx != null) jsFreeContext(ctx);</span></a>
<a name="121"><span class="lineNum"> 121 </span> : if (rt == null) return;</a>
<a name="122"><span class="lineNum"> 122 </span><span class="lineCov"> 3 : _executePendingJob();</span></a>
<a name="123"><span class="lineNum"> 123 </span> : try {</a>
<a name="124"><span class="lineNum"> 124 </span><span class="lineCov"> 3 : jsFreeRuntime(rt);</span></a>
<a name="125"><span class="lineNum"> 125 </span><span class="lineCov"> 1 : } on String catch (e) {</span></a>
<a name="126"><span class="lineNum"> 126 </span><span class="lineCov"> 1 : throw JSError(e);</span></a>
<a name="127"><span class="lineNum"> 127 </span> : }</a>
<a name="128"><span class="lineNum"> 128 </span> : }</a>
<a name="129"><span class="lineNum"> 129 </span> : </a>
<a name="130"><span class="lineNum"> 130 </span><span class="lineCov"> 3 : void _executePendingJob() {</span></a>
<a name="131"><span class="lineNum"> 131 </span><span class="lineCov"> 3 : final rt = _rt;</span></a>
<a name="132"><span class="lineNum"> 132 </span><span class="lineCov"> 3 : final ctx = _ctx;</span></a>
<a name="133"><span class="lineNum"> 133 </span> : if (rt == null || ctx == null) return;</a>
<a name="134"><span class="lineNum"> 134 </span> : while (true) {</a>
<a name="135"><span class="lineNum"> 135 </span><span class="lineCov"> 6 : int err = jsExecutePendingJob(rt);</span></a>
<a name="136"><span class="lineNum"> 136 </span><span class="lineCov"> 3 : if (err &lt;= 0) {</span></a>
<a name="137"><span class="lineNum"> 137 </span><span class="lineCov"> 3 : if (err &lt; 0) print(_parseJSException(ctx));</span></a>
<a name="138"><span class="lineNum"> 138 </span> : break;</a>
<a name="139"><span class="lineNum"> 139 </span> : }</a>
<a name="140"><span class="lineNum"> 140 </span> : }</a>
<a name="141"><span class="lineNum"> 141 </span> : }</a>
<a name="142"><span class="lineNum"> 142 </span> : </a>
<a name="143"><span class="lineNum"> 143 </span> : /// Dispatch JavaScript Event loop.</a>
<a name="144"><span class="lineNum"> 144 </span><span class="lineCov"> 3 : Future&lt;void&gt; dispatch() async {</span></a>
<a name="145"><span class="lineNum"> 145 </span><span class="lineCov"> 9 : await for (final _ in port) {</span></a>
<a name="146"><span class="lineNum"> 146 </span><span class="lineCov"> 3 : _executePendingJob();</span></a>
<a name="147"><span class="lineNum"> 147 </span> : }</a>
<a name="148"><span class="lineNum"> 148 </span> : }</a>
<a name="149"><span class="lineNum"> 149 </span> : </a>
<a name="150"><span class="lineNum"> 150 </span> : /// Evaluate js script.</a>
<a name="151"><span class="lineNum"> 151 </span><span class="lineCov"> 3 : dynamic evaluate(</span></a>
<a name="152"><span class="lineNum"> 152 </span> : String command, {</a>
<a name="153"><span class="lineNum"> 153 </span> : String? name,</a>
<a name="154"><span class="lineNum"> 154 </span> : int? evalFlags,</a>
<a name="155"><span class="lineNum"> 155 </span> : }) {</a>
<a name="156"><span class="lineNum"> 156 </span><span class="lineCov"> 3 : _ensureEngine();</span></a>
<a name="157"><span class="lineNum"> 157 </span><span class="lineCov"> 3 : final ctx = _ctx!;</span></a>
<a name="158"><span class="lineNum"> 158 </span><span class="lineCov"> 3 : final jsval = jsEval(</span></a>
<a name="159"><span class="lineNum"> 159 </span> : ctx,</a>
<a name="160"><span class="lineNum"> 160 </span> : command,</a>
<a name="161"><span class="lineNum"> 161 </span> : name ?? '&lt;eval&gt;',</a>
<a name="162"><span class="lineNum"> 162 </span> : evalFlags ?? JSEvalFlag.GLOBAL,</a>
<a name="163"><span class="lineNum"> 163 </span> : );</a>
<a name="164"><span class="lineNum"> 164 </span><span class="lineCov"> 9 : if (jsIsException(jsval) != 0) {</span></a>
<a name="165"><span class="lineNum"> 165 </span><span class="lineCov"> 1 : jsFreeValue(ctx, jsval);</span></a>
<a name="166"><span class="lineNum"> 166 </span><span class="lineCov"> 1 : throw _parseJSException(ctx);</span></a>
<a name="167"><span class="lineNum"> 167 </span> : }</a>
<a name="168"><span class="lineNum"> 168 </span><span class="lineCov"> 3 : final result = _jsToDart(ctx, jsval);</span></a>
<a name="169"><span class="lineNum"> 169 </span><span class="lineCov"> 3 : jsFreeValue(ctx, jsval);</span></a>
<a name="170"><span class="lineNum"> 170 </span> : return result;</a>
<a name="171"><span class="lineNum"> 171 </span> : }</a>
<a name="172"><span class="lineNum"> 172 </span> : }</a>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,72 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src/ffi.dart - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">src</a> - ffi.dart<span style="font-size: 80%;"> (<a href="ffi.dart.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">192</td>
<td class="headerCovTableEntry">209</td>
<td class="headerCovTableEntryHi">91.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="60%" cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="ffi.dart.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,72 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src/ffi.dart - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">src</a> - ffi.dart<span style="font-size: 80%;"> (<a href="ffi.dart.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">192</td>
<td class="headerCovTableEntry">209</td>
<td class="headerCovTableEntryHi">91.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="60%" cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="ffi.dart.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,133 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - src</td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">652</td>
<td class="headerCovTableEntry">736</td>
<td class="headerCovTableEntryMed">88.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="80%" cellpadding=1 cellspacing=1 border=0>
<tr>
<td width="50%"><br></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
</tr>
<tr>
<td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
<td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
<td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td>
</tr>
<tr>
<td class="coverFile"><a href="isolate.dart.gcov.html">isolate.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=83 height=10 alt="83.1%"><img src="../snow.png" width=17 height=10 alt="83.1%"></td></tr></table>
</td>
<td class="coverPerMed">83.1&nbsp;%</td>
<td class="coverNumMed">118 / 142</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="ffi.dart.gcov.html">ffi.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.9%"><img src="../snow.png" width=8 height=10 alt="91.9%"></td></tr></table>
</td>
<td class="coverPerHi">91.9&nbsp;%</td>
<td class="coverNumHi">192 / 209</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="wrapper.dart.gcov.html">wrapper.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.3%"><img src="../snow.png" width=6 height=10 alt="94.3%"></td></tr></table>
</td>
<td class="coverPerHi">94.3&nbsp;%</td>
<td class="coverNumHi">149 / 158</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="engine.dart.gcov.html">engine.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=83 height=10 alt="82.7%"><img src="../snow.png" width=17 height=10 alt="82.7%"></td></tr></table>
</td>
<td class="coverPerMed">82.7&nbsp;%</td>
<td class="coverNumMed">67 / 81</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="object.dart.gcov.html">object.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=86 height=10 alt="86.3%"><img src="../snow.png" width=14 height=10 alt="86.3%"></td></tr></table>
</td>
<td class="coverPerMed">86.3&nbsp;%</td>
<td class="coverNumMed">126 / 146</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
</table>
</center>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,133 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - src</td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">652</td>
<td class="headerCovTableEntry">736</td>
<td class="headerCovTableEntryMed">88.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="80%" cellpadding=1 cellspacing=1 border=0>
<tr>
<td width="50%"><br></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
</tr>
<tr>
<td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
<td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td>
<td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
</tr>
<tr>
<td class="coverFile"><a href="engine.dart.gcov.html">engine.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=83 height=10 alt="82.7%"><img src="../snow.png" width=17 height=10 alt="82.7%"></td></tr></table>
</td>
<td class="coverPerMed">82.7&nbsp;%</td>
<td class="coverNumMed">67 / 81</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="isolate.dart.gcov.html">isolate.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=83 height=10 alt="83.1%"><img src="../snow.png" width=17 height=10 alt="83.1%"></td></tr></table>
</td>
<td class="coverPerMed">83.1&nbsp;%</td>
<td class="coverNumMed">118 / 142</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="object.dart.gcov.html">object.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=86 height=10 alt="86.3%"><img src="../snow.png" width=14 height=10 alt="86.3%"></td></tr></table>
</td>
<td class="coverPerMed">86.3&nbsp;%</td>
<td class="coverNumMed">126 / 146</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="ffi.dart.gcov.html">ffi.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.9%"><img src="../snow.png" width=8 height=10 alt="91.9%"></td></tr></table>
</td>
<td class="coverPerHi">91.9&nbsp;%</td>
<td class="coverNumHi">192 / 209</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="wrapper.dart.gcov.html">wrapper.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.3%"><img src="../snow.png" width=6 height=10 alt="94.3%"></td></tr></table>
</td>
<td class="coverPerHi">94.3&nbsp;%</td>
<td class="coverNumHi">149 / 158</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
</table>
</center>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

133
coverage/src/index.html Normal file
View File

@@ -0,0 +1,133 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - src</td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">652</td>
<td class="headerCovTableEntry">736</td>
<td class="headerCovTableEntryMed">88.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="80%" cellpadding=1 cellspacing=1 border=0>
<tr>
<td width="50%"><br></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
<td width="10%"></td>
</tr>
<tr>
<td class="tableHead">Filename <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td>
<td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
<td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
</tr>
<tr>
<td class="coverFile"><a href="engine.dart.gcov.html">engine.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=83 height=10 alt="82.7%"><img src="../snow.png" width=17 height=10 alt="82.7%"></td></tr></table>
</td>
<td class="coverPerMed">82.7&nbsp;%</td>
<td class="coverNumMed">67 / 81</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="ffi.dart.gcov.html">ffi.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.9%"><img src="../snow.png" width=8 height=10 alt="91.9%"></td></tr></table>
</td>
<td class="coverPerHi">91.9&nbsp;%</td>
<td class="coverNumHi">192 / 209</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="isolate.dart.gcov.html">isolate.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=83 height=10 alt="83.1%"><img src="../snow.png" width=17 height=10 alt="83.1%"></td></tr></table>
</td>
<td class="coverPerMed">83.1&nbsp;%</td>
<td class="coverNumMed">118 / 142</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="object.dart.gcov.html">object.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=86 height=10 alt="86.3%"><img src="../snow.png" width=14 height=10 alt="86.3%"></td></tr></table>
</td>
<td class="coverPerMed">86.3&nbsp;%</td>
<td class="coverNumMed">126 / 146</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="wrapper.dart.gcov.html">wrapper.dart</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.3%"><img src="../snow.png" width=6 height=10 alt="94.3%"></td></tr></table>
</td>
<td class="coverPerHi">94.3&nbsp;%</td>
<td class="coverNumHi">149 / 158</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
</table>
</center>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,72 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src/isolate.dart - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">src</a> - isolate.dart<span style="font-size: 80%;"> (<a href="isolate.dart.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">118</td>
<td class="headerCovTableEntry">142</td>
<td class="headerCovTableEntryMed">83.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="60%" cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="isolate.dart.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,72 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src/isolate.dart - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">src</a> - isolate.dart<span style="font-size: 80%;"> (<a href="isolate.dart.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">118</td>
<td class="headerCovTableEntry">142</td>
<td class="headerCovTableEntryMed">83.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="60%" cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="isolate.dart.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,353 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src/isolate.dart</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">src</a> - isolate.dart<span style="font-size: 80%;"> (source / <a href="isolate.dart.func-sort-c.html">functions</a>)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">118</td>
<td class="headerCovTableEntry">142</td>
<td class="headerCovTableEntryMed">83.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<a name="1"><span class="lineNum"> 1 </span> : /*</a>
<a name="2"><span class="lineNum"> 2 </span> : * @Description: isolate</a>
<a name="3"><span class="lineNum"> 3 </span> : * @Author: ekibun</a>
<a name="4"><span class="lineNum"> 4 </span> : * @Date: 2020-10-02 13:49:03</a>
<a name="5"><span class="lineNum"> 5 </span> : * @LastEditors: ekibun</a>
<a name="6"><span class="lineNum"> 6 </span> : * @LastEditTime: 2020-10-03 22:21:31</a>
<a name="7"><span class="lineNum"> 7 </span> : */</a>
<a name="8"><span class="lineNum"> 8 </span> : part of '../flutter_qjs.dart';</a>
<a name="9"><span class="lineNum"> 9 </span> : </a>
<a name="10"><span class="lineNum"> 10 </span> : typedef dynamic _Decode(Map obj);</a>
<a name="11"><span class="lineNum"> 11 </span><span class="lineCov"> 9 : List&lt;_Decode&gt; _decoders = [</span></a>
<a name="12"><span class="lineNum"> 12 </span> : JSError._decode,</a>
<a name="13"><span class="lineNum"> 13 </span> : IsolateFunction._decode,</a>
<a name="14"><span class="lineNum"> 14 </span> : ];</a>
<a name="15"><span class="lineNum"> 15 </span> : </a>
<a name="16"><span class="lineNum"> 16 </span> : abstract class _IsolateEncodable {</a>
<a name="17"><span class="lineNum"> 17 </span> : Map _encode();</a>
<a name="18"><span class="lineNum"> 18 </span> : }</a>
<a name="19"><span class="lineNum"> 19 </span> : </a>
<a name="20"><span class="lineNum"> 20 </span><span class="lineCov"> 3 : dynamic _encodeData(dynamic data, {Map&lt;dynamic, dynamic&gt;? cache}) {</span></a>
<a name="21"><span class="lineNum"> 21 </span><span class="lineCov"> 3 : if (cache == null) cache = Map();</span></a>
<a name="22"><span class="lineNum"> 22 </span><span class="lineCov"> 5 : if (cache.containsKey(data)) return cache[data];</span></a>
<a name="23"><span class="lineNum"> 23 </span><span class="lineCov"> 6 : if (data is _IsolateEncodable) return data._encode();</span></a>
<a name="24"><span class="lineNum"> 24 </span><span class="lineCov"> 3 : if (data is List) {</span></a>
<a name="25"><span class="lineNum"> 25 </span><span class="lineCov"> 3 : final ret = [];</span></a>
<a name="26"><span class="lineNum"> 26 </span><span class="lineCov"> 3 : cache[data] = ret;</span></a>
<a name="27"><span class="lineNum"> 27 </span><span class="lineCov"> 9 : for (int i = 0; i &lt; data.length; ++i) {</span></a>
<a name="28"><span class="lineNum"> 28 </span><span class="lineCov"> 9 : ret.add(_encodeData(data[i], cache: cache));</span></a>
<a name="29"><span class="lineNum"> 29 </span> : }</a>
<a name="30"><span class="lineNum"> 30 </span> : return ret;</a>
<a name="31"><span class="lineNum"> 31 </span> : }</a>
<a name="32"><span class="lineNum"> 32 </span><span class="lineCov"> 3 : if (data is Map) {</span></a>
<a name="33"><span class="lineNum"> 33 </span><span class="lineCov"> 2 : final ret = {};</span></a>
<a name="34"><span class="lineNum"> 34 </span><span class="lineCov"> 2 : cache[data] = ret;</span></a>
<a name="35"><span class="lineNum"> 35 </span><span class="lineCov"> 4 : for (final entry in data.entries) {</span></a>
<a name="36"><span class="lineNum"> 36 </span><span class="lineCov"> 6 : ret[_encodeData(entry.key, cache: cache)] =</span></a>
<a name="37"><span class="lineNum"> 37 </span><span class="lineCov"> 4 : _encodeData(entry.value, cache: cache);</span></a>
<a name="38"><span class="lineNum"> 38 </span> : }</a>
<a name="39"><span class="lineNum"> 39 </span> : return ret;</a>
<a name="40"><span class="lineNum"> 40 </span> : }</a>
<a name="41"><span class="lineNum"> 41 </span><span class="lineCov"> 3 : if (data is Future) {</span></a>
<a name="42"><span class="lineNum"> 42 </span><span class="lineCov"> 2 : final futurePort = ReceivePort();</span></a>
<a name="43"><span class="lineNum"> 43 </span><span class="lineCov"> 4 : data.then((value) {</span></a>
<a name="44"><span class="lineNum"> 44 </span><span class="lineCov"> 6 : futurePort.first.then((port) {</span></a>
<a name="45"><span class="lineNum"> 45 </span><span class="lineCov"> 2 : futurePort.close();</span></a>
<a name="46"><span class="lineNum"> 46 </span><span class="lineCov"> 4 : (port as SendPort).send(_encodeData(value));</span></a>
<a name="47"><span class="lineNum"> 47 </span> : });</a>
<a name="48"><span class="lineNum"> 48 </span><span class="lineCov"> 2 : }, onError: (e) {</span></a>
<a name="49"><span class="lineNum"> 49 </span><span class="lineCov"> 6 : futurePort.first.then((port) {</span></a>
<a name="50"><span class="lineNum"> 50 </span><span class="lineCov"> 2 : futurePort.close();</span></a>
<a name="51"><span class="lineNum"> 51 </span><span class="lineCov"> 6 : (port as SendPort).send({#error: _encodeData(e)});</span></a>
<a name="52"><span class="lineNum"> 52 </span> : });</a>
<a name="53"><span class="lineNum"> 53 </span> : });</a>
<a name="54"><span class="lineNum"> 54 </span><span class="lineCov"> 2 : return {</span></a>
<a name="55"><span class="lineNum"> 55 </span><span class="lineCov"> 2 : #jsFuturePort: futurePort.sendPort,</span></a>
<a name="56"><span class="lineNum"> 56 </span> : };</a>
<a name="57"><span class="lineNum"> 57 </span> : }</a>
<a name="58"><span class="lineNum"> 58 </span> : return data;</a>
<a name="59"><span class="lineNum"> 59 </span> : }</a>
<a name="60"><span class="lineNum"> 60 </span> : </a>
<a name="61"><span class="lineNum"> 61 </span><span class="lineCov"> 3 : dynamic _decodeData(dynamic data, {Map&lt;dynamic, dynamic&gt;? cache}) {</span></a>
<a name="62"><span class="lineNum"> 62 </span><span class="lineCov"> 3 : if (cache == null) cache = Map();</span></a>
<a name="63"><span class="lineNum"> 63 </span><span class="lineCov"> 5 : if (cache.containsKey(data)) return cache[data];</span></a>
<a name="64"><span class="lineNum"> 64 </span><span class="lineCov"> 3 : if (data is List) {</span></a>
<a name="65"><span class="lineNum"> 65 </span><span class="lineCov"> 3 : final ret = [];</span></a>
<a name="66"><span class="lineNum"> 66 </span><span class="lineCov"> 3 : cache[data] = ret;</span></a>
<a name="67"><span class="lineNum"> 67 </span><span class="lineCov"> 9 : for (int i = 0; i &lt; data.length; ++i) {</span></a>
<a name="68"><span class="lineNum"> 68 </span><span class="lineCov"> 9 : ret.add(_decodeData(data[i], cache: cache));</span></a>
<a name="69"><span class="lineNum"> 69 </span> : }</a>
<a name="70"><span class="lineNum"> 70 </span> : return ret;</a>
<a name="71"><span class="lineNum"> 71 </span> : }</a>
<a name="72"><span class="lineNum"> 72 </span><span class="lineCov"> 3 : if (data is Map) {</span></a>
<a name="73"><span class="lineNum"> 73 </span><span class="lineCov"> 6 : for (final decoder in _decoders) {</span></a>
<a name="74"><span class="lineNum"> 74 </span><span class="lineCov"> 3 : final decodeObj = decoder(data);</span></a>
<a name="75"><span class="lineNum"> 75 </span> : if (decodeObj != null) return decodeObj;</a>
<a name="76"><span class="lineNum"> 76 </span> : }</a>
<a name="77"><span class="lineNum"> 77 </span><span class="lineCov"> 2 : if (data.containsKey(#jsFuturePort)) {</span></a>
<a name="78"><span class="lineNum"> 78 </span><span class="lineCov"> 2 : SendPort port = data[#jsFuturePort];</span></a>
<a name="79"><span class="lineNum"> 79 </span><span class="lineCov"> 2 : final futurePort = ReceivePort();</span></a>
<a name="80"><span class="lineNum"> 80 </span><span class="lineCov"> 4 : port.send(futurePort.sendPort);</span></a>
<a name="81"><span class="lineNum"> 81 </span><span class="lineCov"> 2 : final futureCompleter = Completer();</span></a>
<a name="82"><span class="lineNum"> 82 </span><span class="lineCov"> 6 : futureCompleter.future.catchError((e) {});</span></a>
<a name="83"><span class="lineNum"> 83 </span><span class="lineCov"> 6 : futurePort.first.then((value) {</span></a>
<a name="84"><span class="lineNum"> 84 </span><span class="lineCov"> 2 : futurePort.close();</span></a>
<a name="85"><span class="lineNum"> 85 </span><span class="lineCov"> 4 : if (value is Map &amp;&amp; value.containsKey(#error)) {</span></a>
<a name="86"><span class="lineNum"> 86 </span><span class="lineCov"> 6 : futureCompleter.completeError(_decodeData(value[#error]));</span></a>
<a name="87"><span class="lineNum"> 87 </span> : } else {</a>
<a name="88"><span class="lineNum"> 88 </span><span class="lineCov"> 4 : futureCompleter.complete(_decodeData(value));</span></a>
<a name="89"><span class="lineNum"> 89 </span> : }</a>
<a name="90"><span class="lineNum"> 90 </span> : });</a>
<a name="91"><span class="lineNum"> 91 </span><span class="lineCov"> 2 : return futureCompleter.future;</span></a>
<a name="92"><span class="lineNum"> 92 </span> : }</a>
<a name="93"><span class="lineNum"> 93 </span><span class="lineCov"> 2 : final ret = {};</span></a>
<a name="94"><span class="lineNum"> 94 </span><span class="lineCov"> 2 : cache[data] = ret;</span></a>
<a name="95"><span class="lineNum"> 95 </span><span class="lineCov"> 4 : for (final entry in data.entries) {</span></a>
<a name="96"><span class="lineNum"> 96 </span><span class="lineCov"> 6 : ret[_decodeData(entry.key, cache: cache)] =</span></a>
<a name="97"><span class="lineNum"> 97 </span><span class="lineCov"> 4 : _decodeData(entry.value, cache: cache);</span></a>
<a name="98"><span class="lineNum"> 98 </span> : }</a>
<a name="99"><span class="lineNum"> 99 </span> : return ret;</a>
<a name="100"><span class="lineNum"> 100 </span> : }</a>
<a name="101"><span class="lineNum"> 101 </span> : return data;</a>
<a name="102"><span class="lineNum"> 102 </span> : }</a>
<a name="103"><span class="lineNum"> 103 </span> : </a>
<a name="104"><span class="lineNum"> 104 </span><span class="lineCov"> 2 : void _runJsIsolate(Map spawnMessage) async {</span></a>
<a name="105"><span class="lineNum"> 105 </span><span class="lineCov"> 2 : SendPort sendPort = spawnMessage[#port];</span></a>
<a name="106"><span class="lineNum"> 106 </span><span class="lineCov"> 2 : ReceivePort port = ReceivePort();</span></a>
<a name="107"><span class="lineNum"> 107 </span><span class="lineCov"> 4 : sendPort.send(port.sendPort);</span></a>
<a name="108"><span class="lineNum"> 108 </span><span class="lineCov"> 2 : final qjs = FlutterQjs(</span></a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 2 : stackSize: spawnMessage[#stackSize],</span></a>
<a name="110"><span class="lineNum"> 110 </span><span class="lineCov"> 1 : hostPromiseRejectionHandler: (reason) {</span></a>
<a name="111"><span class="lineNum"> 111 </span><span class="lineCov"> 2 : sendPort.send({</span></a>
<a name="112"><span class="lineNum"> 112 </span> : #type: #hostPromiseRejection,</a>
<a name="113"><span class="lineNum"> 113 </span><span class="lineCov"> 1 : #reason: _encodeData(reason),</span></a>
<a name="114"><span class="lineNum"> 114 </span> : });</a>
<a name="115"><span class="lineNum"> 115 </span> : },</a>
<a name="116"><span class="lineNum"> 116 </span><span class="lineNoCov"> 0 : moduleHandler: (name) {</span></a>
<a name="117"><span class="lineNum"> 117 </span> : final ptr = calloc&lt;Pointer&lt;Utf8&gt;&gt;();</a>
<a name="118"><span class="lineNum"> 118 </span><span class="lineNoCov"> 0 : ptr.value = Pointer.fromAddress(ptr.address);</span></a>
<a name="119"><span class="lineNum"> 119 </span><span class="lineNoCov"> 0 : sendPort.send({</span></a>
<a name="120"><span class="lineNum"> 120 </span> : #type: #module,</a>
<a name="121"><span class="lineNum"> 121 </span> : #name: name,</a>
<a name="122"><span class="lineNum"> 122 </span><span class="lineNoCov"> 0 : #ptr: ptr.address,</span></a>
<a name="123"><span class="lineNum"> 123 </span> : });</a>
<a name="124"><span class="lineNum"> 124 </span><span class="lineNoCov"> 0 : while (ptr.value.address == ptr.address) sleep(Duration(microseconds: 1));</span></a>
<a name="125"><span class="lineNum"> 125 </span><span class="lineNoCov"> 0 : final ret = ptr.value;</span></a>
<a name="126"><span class="lineNum"> 126 </span><span class="lineNoCov"> 0 : malloc.free(ptr);</span></a>
<a name="127"><span class="lineNum"> 127 </span><span class="lineNoCov"> 0 : if (ret.address == -1) throw JSError('Module Not found');</span></a>
<a name="128"><span class="lineNum"> 128 </span><span class="lineNoCov"> 0 : final retString = ret.toDartString();</span></a>
<a name="129"><span class="lineNum"> 129 </span><span class="lineNoCov"> 0 : malloc.free(ret);</span></a>
<a name="130"><span class="lineNum"> 130 </span> : return retString;</a>
<a name="131"><span class="lineNum"> 131 </span> : },</a>
<a name="132"><span class="lineNum"> 132 </span> : );</a>
<a name="133"><span class="lineNum"> 133 </span><span class="lineCov"> 4 : port.listen((msg) async {</span></a>
<a name="134"><span class="lineNum"> 134 </span> : var data;</a>
<a name="135"><span class="lineNum"> 135 </span><span class="lineCov"> 2 : SendPort? msgPort = msg[#port];</span></a>
<a name="136"><span class="lineNum"> 136 </span> : try {</a>
<a name="137"><span class="lineNum"> 137 </span><span class="lineCov"> 2 : switch (msg[#type]) {</span></a>
<a name="138"><span class="lineNum"> 138 </span><span class="lineCov"> 2 : case #evaluate:</span></a>
<a name="139"><span class="lineNum"> 139 </span><span class="lineCov"> 4 : data = await qjs.evaluate(</span></a>
<a name="140"><span class="lineNum"> 140 </span><span class="lineCov"> 2 : msg[#command],</span></a>
<a name="141"><span class="lineNum"> 141 </span><span class="lineCov"> 2 : name: msg[#name],</span></a>
<a name="142"><span class="lineNum"> 142 </span><span class="lineCov"> 2 : evalFlags: msg[#flag],</span></a>
<a name="143"><span class="lineNum"> 143 </span> : );</a>
<a name="144"><span class="lineNum"> 144 </span> : break;</a>
<a name="145"><span class="lineNum"> 145 </span><span class="lineCov"> 2 : case #close:</span></a>
<a name="146"><span class="lineNum"> 146 </span> : data = false;</a>
<a name="147"><span class="lineNum"> 147 </span><span class="lineCov"> 4 : qjs.port.close();</span></a>
<a name="148"><span class="lineNum"> 148 </span><span class="lineCov"> 2 : qjs.close();</span></a>
<a name="149"><span class="lineNum"> 149 </span><span class="lineCov"> 2 : port.close();</span></a>
<a name="150"><span class="lineNum"> 150 </span> : data = true;</a>
<a name="151"><span class="lineNum"> 151 </span> : break;</a>
<a name="152"><span class="lineNum"> 152 </span> : }</a>
<a name="153"><span class="lineNum"> 153 </span><span class="lineCov"> 4 : if (msgPort != null) msgPort.send(_encodeData(data));</span></a>
<a name="154"><span class="lineNum"> 154 </span> : } catch (e) {</a>
<a name="155"><span class="lineNum"> 155 </span> : if (msgPort != null)</a>
<a name="156"><span class="lineNum"> 156 </span><span class="lineNoCov"> 0 : msgPort.send({</span></a>
<a name="157"><span class="lineNum"> 157 </span><span class="lineNoCov"> 0 : #error: _encodeData(e),</span></a>
<a name="158"><span class="lineNum"> 158 </span> : });</a>
<a name="159"><span class="lineNum"> 159 </span> : }</a>
<a name="160"><span class="lineNum"> 160 </span> : });</a>
<a name="161"><span class="lineNum"> 161 </span><span class="lineCov"> 4 : await qjs.dispatch();</span></a>
<a name="162"><span class="lineNum"> 162 </span> : }</a>
<a name="163"><span class="lineNum"> 163 </span> : </a>
<a name="164"><span class="lineNum"> 164 </span> : typedef _JsAsyncModuleHandler = Future&lt;String&gt; Function(String name);</a>
<a name="165"><span class="lineNum"> 165 </span> : </a>
<a name="166"><span class="lineNum"> 166 </span> : class IsolateQjs {</a>
<a name="167"><span class="lineNum"> 167 </span> : Future&lt;SendPort&gt;? _sendPort;</a>
<a name="168"><span class="lineNum"> 168 </span> : </a>
<a name="169"><span class="lineNum"> 169 </span> : /// Max stack size for quickjs.</a>
<a name="170"><span class="lineNum"> 170 </span> : final int? stackSize;</a>
<a name="171"><span class="lineNum"> 171 </span> : </a>
<a name="172"><span class="lineNum"> 172 </span> : /// Asynchronously handler to manage js module.</a>
<a name="173"><span class="lineNum"> 173 </span> : final _JsAsyncModuleHandler? moduleHandler;</a>
<a name="174"><span class="lineNum"> 174 </span> : </a>
<a name="175"><span class="lineNum"> 175 </span> : /// Handler function to manage js module.</a>
<a name="176"><span class="lineNum"> 176 </span> : final _JsHostPromiseRejectionHandler? hostPromiseRejectionHandler;</a>
<a name="177"><span class="lineNum"> 177 </span> : </a>
<a name="178"><span class="lineNum"> 178 </span> : /// Quickjs engine runing on isolate thread.</a>
<a name="179"><span class="lineNum"> 179 </span> : ///</a>
<a name="180"><span class="lineNum"> 180 </span> : /// Pass handlers to implement js-dart interaction and resolving modules. The `methodHandler` is</a>
<a name="181"><span class="lineNum"> 181 </span> : /// used in isolate, so **the handler function must be a top-level function or a static method**.</a>
<a name="182"><span class="lineNum"> 182 </span><span class="lineCov"> 1 : IsolateQjs({</span></a>
<a name="183"><span class="lineNum"> 183 </span> : this.moduleHandler,</a>
<a name="184"><span class="lineNum"> 184 </span> : this.stackSize,</a>
<a name="185"><span class="lineNum"> 185 </span> : this.hostPromiseRejectionHandler,</a>
<a name="186"><span class="lineNum"> 186 </span> : });</a>
<a name="187"><span class="lineNum"> 187 </span> : </a>
<a name="188"><span class="lineNum"> 188 </span><span class="lineCov"> 1 : _ensureEngine() {</span></a>
<a name="189"><span class="lineNum"> 189 </span><span class="lineCov"> 1 : if (_sendPort != null) return;</span></a>
<a name="190"><span class="lineNum"> 190 </span><span class="lineCov"> 1 : ReceivePort port = ReceivePort();</span></a>
<a name="191"><span class="lineNum"> 191 </span><span class="lineCov"> 1 : Isolate.spawn(</span></a>
<a name="192"><span class="lineNum"> 192 </span> : _runJsIsolate,</a>
<a name="193"><span class="lineNum"> 193 </span><span class="lineCov"> 1 : {</span></a>
<a name="194"><span class="lineNum"> 194 </span><span class="lineCov"> 1 : #port: port.sendPort,</span></a>
<a name="195"><span class="lineNum"> 195 </span><span class="lineCov"> 1 : #stackSize: stackSize,</span></a>
<a name="196"><span class="lineNum"> 196 </span> : },</a>
<a name="197"><span class="lineNum"> 197 </span> : errorsAreFatal: true,</a>
<a name="198"><span class="lineNum"> 198 </span> : );</a>
<a name="199"><span class="lineNum"> 199 </span><span class="lineCov"> 1 : final completer = Completer&lt;SendPort&gt;();</span></a>
<a name="200"><span class="lineNum"> 200 </span><span class="lineCov"> 2 : port.listen((msg) async {</span></a>
<a name="201"><span class="lineNum"> 201 </span><span class="lineCov"> 2 : if (msg is SendPort &amp;&amp; !completer.isCompleted) {</span></a>
<a name="202"><span class="lineNum"> 202 </span><span class="lineCov"> 1 : completer.complete(msg);</span></a>
<a name="203"><span class="lineNum"> 203 </span> : return;</a>
<a name="204"><span class="lineNum"> 204 </span> : }</a>
<a name="205"><span class="lineNum"> 205 </span><span class="lineCov"> 1 : switch (msg[#type]) {</span></a>
<a name="206"><span class="lineNum"> 206 </span><span class="lineCov"> 1 : case #hostPromiseRejection:</span></a>
<a name="207"><span class="lineNum"> 207 </span> : try {</a>
<a name="208"><span class="lineNum"> 208 </span><span class="lineCov"> 2 : final err = _decodeData(msg[#reason]);</span></a>
<a name="209"><span class="lineNum"> 209 </span><span class="lineCov"> 1 : if (hostPromiseRejectionHandler != null) {</span></a>
<a name="210"><span class="lineNum"> 210 </span><span class="lineCov"> 2 : hostPromiseRejectionHandler!(err);</span></a>
<a name="211"><span class="lineNum"> 211 </span> : } else {</a>
<a name="212"><span class="lineNum"> 212 </span><span class="lineNoCov"> 0 : print('unhandled promise rejection: $err');</span></a>
<a name="213"><span class="lineNum"> 213 </span> : }</a>
<a name="214"><span class="lineNum"> 214 </span> : } catch (e) {</a>
<a name="215"><span class="lineNum"> 215 </span><span class="lineNoCov"> 0 : print('host Promise Rejection Handler error: $e');</span></a>
<a name="216"><span class="lineNum"> 216 </span> : }</a>
<a name="217"><span class="lineNum"> 217 </span> : break;</a>
<a name="218"><span class="lineNum"> 218 </span><span class="lineNoCov"> 0 : case #module:</span></a>
<a name="219"><span class="lineNum"> 219 </span><span class="lineNoCov"> 0 : final ptr = Pointer&lt;Pointer&gt;.fromAddress(msg[#ptr]);</span></a>
<a name="220"><span class="lineNum"> 220 </span> : try {</a>
<a name="221"><span class="lineNum"> 221 </span><span class="lineNoCov"> 0 : ptr.value = (await moduleHandler!(msg[#name])).toNativeUtf8();</span></a>
<a name="222"><span class="lineNum"> 222 </span> : } catch (e) {</a>
<a name="223"><span class="lineNum"> 223 </span><span class="lineNoCov"> 0 : ptr.value = Pointer.fromAddress(-1);</span></a>
<a name="224"><span class="lineNum"> 224 </span> : }</a>
<a name="225"><span class="lineNum"> 225 </span> : break;</a>
<a name="226"><span class="lineNum"> 226 </span> : }</a>
<a name="227"><span class="lineNum"> 227 </span><span class="lineNoCov"> 0 : }, onDone: () {</span></a>
<a name="228"><span class="lineNum"> 228 </span><span class="lineNoCov"> 0 : close();</span></a>
<a name="229"><span class="lineNum"> 229 </span><span class="lineNoCov"> 0 : if (!completer.isCompleted)</span></a>
<a name="230"><span class="lineNum"> 230 </span><span class="lineNoCov"> 0 : completer.completeError(JSError('isolate close'));</span></a>
<a name="231"><span class="lineNum"> 231 </span> : });</a>
<a name="232"><span class="lineNum"> 232 </span><span class="lineCov"> 2 : _sendPort = completer.future;</span></a>
<a name="233"><span class="lineNum"> 233 </span> : }</a>
<a name="234"><span class="lineNum"> 234 </span> : </a>
<a name="235"><span class="lineNum"> 235 </span> : /// Free Runtime and close isolate thread that can be recreate when evaluate again.</a>
<a name="236"><span class="lineNum"> 236 </span><span class="lineCov"> 1 : close() {</span></a>
<a name="237"><span class="lineNum"> 237 </span><span class="lineCov"> 1 : final sendPort = _sendPort;</span></a>
<a name="238"><span class="lineNum"> 238 </span><span class="lineCov"> 1 : _sendPort = null;</span></a>
<a name="239"><span class="lineNum"> 239 </span> : if (sendPort == null) return;</a>
<a name="240"><span class="lineNum"> 240 </span><span class="lineCov"> 2 : final ret = sendPort.then((sendPort) async {</span></a>
<a name="241"><span class="lineNum"> 241 </span><span class="lineCov"> 1 : final closePort = ReceivePort();</span></a>
<a name="242"><span class="lineNum"> 242 </span><span class="lineCov"> 2 : sendPort.send({</span></a>
<a name="243"><span class="lineNum"> 243 </span> : #type: #close,</a>
<a name="244"><span class="lineNum"> 244 </span><span class="lineCov"> 1 : #port: closePort.sendPort,</span></a>
<a name="245"><span class="lineNum"> 245 </span> : });</a>
<a name="246"><span class="lineNum"> 246 </span><span class="lineCov"> 2 : final result = await closePort.first;</span></a>
<a name="247"><span class="lineNum"> 247 </span><span class="lineCov"> 1 : closePort.close();</span></a>
<a name="248"><span class="lineNum"> 248 </span><span class="lineCov"> 1 : if (result is Map &amp;&amp; result.containsKey(#error))</span></a>
<a name="249"><span class="lineNum"> 249 </span><span class="lineNoCov"> 0 : throw _decodeData(result[#error]);</span></a>
<a name="250"><span class="lineNum"> 250 </span><span class="lineCov"> 1 : return _decodeData(result);</span></a>
<a name="251"><span class="lineNum"> 251 </span> : });</a>
<a name="252"><span class="lineNum"> 252 </span> : return ret;</a>
<a name="253"><span class="lineNum"> 253 </span> : }</a>
<a name="254"><span class="lineNum"> 254 </span> : </a>
<a name="255"><span class="lineNum"> 255 </span> : /// Evaluate js script.</a>
<a name="256"><span class="lineNum"> 256 </span><span class="lineCov"> 1 : Future&lt;dynamic&gt; evaluate(</span></a>
<a name="257"><span class="lineNum"> 257 </span> : String command, {</a>
<a name="258"><span class="lineNum"> 258 </span> : String? name,</a>
<a name="259"><span class="lineNum"> 259 </span> : int? evalFlags,</a>
<a name="260"><span class="lineNum"> 260 </span> : }) async {</a>
<a name="261"><span class="lineNum"> 261 </span><span class="lineCov"> 1 : _ensureEngine();</span></a>
<a name="262"><span class="lineNum"> 262 </span><span class="lineCov"> 1 : final evaluatePort = ReceivePort();</span></a>
<a name="263"><span class="lineNum"> 263 </span><span class="lineCov"> 2 : final sendPort = await _sendPort!;</span></a>
<a name="264"><span class="lineNum"> 264 </span><span class="lineCov"> 2 : sendPort.send({</span></a>
<a name="265"><span class="lineNum"> 265 </span> : #type: #evaluate,</a>
<a name="266"><span class="lineNum"> 266 </span> : #command: command,</a>
<a name="267"><span class="lineNum"> 267 </span> : #name: name,</a>
<a name="268"><span class="lineNum"> 268 </span> : #flag: evalFlags,</a>
<a name="269"><span class="lineNum"> 269 </span><span class="lineCov"> 1 : #port: evaluatePort.sendPort,</span></a>
<a name="270"><span class="lineNum"> 270 </span> : });</a>
<a name="271"><span class="lineNum"> 271 </span><span class="lineCov"> 2 : final result = await evaluatePort.first;</span></a>
<a name="272"><span class="lineNum"> 272 </span><span class="lineCov"> 1 : evaluatePort.close();</span></a>
<a name="273"><span class="lineNum"> 273 </span><span class="lineCov"> 2 : if (result is Map &amp;&amp; result.containsKey(#error))</span></a>
<a name="274"><span class="lineNum"> 274 </span><span class="lineNoCov"> 0 : throw _decodeData(result[#error]);</span></a>
<a name="275"><span class="lineNum"> 275 </span><span class="lineCov"> 1 : return _decodeData(result);</span></a>
<a name="276"><span class="lineNum"> 276 </span> : }</a>
<a name="277"><span class="lineNum"> 277 </span> : }</a>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,72 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src/object.dart - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">src</a> - object.dart<span style="font-size: 80%;"> (<a href="object.dart.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">126</td>
<td class="headerCovTableEntry">146</td>
<td class="headerCovTableEntryMed">86.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="60%" cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="object.dart.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,72 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src/object.dart - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">src</a> - object.dart<span style="font-size: 80%;"> (<a href="object.dart.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">126</td>
<td class="headerCovTableEntry">146</td>
<td class="headerCovTableEntryMed">86.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="60%" cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="object.dart.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,390 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src/object.dart</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">src</a> - object.dart<span style="font-size: 80%;"> (source / <a href="object.dart.func-sort-c.html">functions</a>)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">126</td>
<td class="headerCovTableEntry">146</td>
<td class="headerCovTableEntryMed">86.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<a name="1"><span class="lineNum"> 1 </span> : /*</a>
<a name="2"><span class="lineNum"> 2 </span> : * @Description: wrap object</a>
<a name="3"><span class="lineNum"> 3 </span> : * @Author: ekibun</a>
<a name="4"><span class="lineNum"> 4 </span> : * @Date: 2020-10-02 13:49:03</a>
<a name="5"><span class="lineNum"> 5 </span> : * @LastEditors: ekibun</a>
<a name="6"><span class="lineNum"> 6 </span> : * @LastEditTime: 2020-10-03 22:21:31</a>
<a name="7"><span class="lineNum"> 7 </span> : */</a>
<a name="8"><span class="lineNum"> 8 </span> : part of '../flutter_qjs.dart';</a>
<a name="9"><span class="lineNum"> 9 </span> : </a>
<a name="10"><span class="lineNum"> 10 </span> : /// js invokable</a>
<a name="11"><span class="lineNum"> 11 </span> : abstract class JSInvokable extends JSRef {</a>
<a name="12"><span class="lineNum"> 12 </span> : dynamic invoke(List args, [dynamic thisVal]);</a>
<a name="13"><span class="lineNum"> 13 </span> : </a>
<a name="14"><span class="lineNum"> 14 </span><span class="lineCov"> 3 : static dynamic _wrap(dynamic func) {</span></a>
<a name="15"><span class="lineNum"> 15 </span><span class="lineCov"> 3 : return func is JSInvokable</span></a>
<a name="16"><span class="lineNum"> 16 </span> : ? func</a>
<a name="17"><span class="lineNum"> 17 </span><span class="lineCov"> 3 : : func is Function</span></a>
<a name="18"><span class="lineNum"> 18 </span><span class="lineCov"> 3 : ? _DartFunction(func)</span></a>
<a name="19"><span class="lineNum"> 19 </span> : : func;</a>
<a name="20"><span class="lineNum"> 20 </span> : }</a>
<a name="21"><span class="lineNum"> 21 </span> : }</a>
<a name="22"><span class="lineNum"> 22 </span> : </a>
<a name="23"><span class="lineNum"> 23 </span> : class _DartFunction extends JSInvokable {</a>
<a name="24"><span class="lineNum"> 24 </span> : final Function _func;</a>
<a name="25"><span class="lineNum"> 25 </span><span class="lineCov"> 3 : _DartFunction(this._func);</span></a>
<a name="26"><span class="lineNum"> 26 </span> : </a>
<a name="27"><span class="lineNum"> 27 </span><span class="lineCov"> 3 : @override</span></a>
<a name="28"><span class="lineNum"> 28 </span> : invoke(List args, [thisVal]) {</a>
<a name="29"><span class="lineNum"> 29 </span> : /// wrap this into function</a>
<a name="30"><span class="lineNum"> 30 </span> : final passThis =</a>
<a name="31"><span class="lineNum"> 31 </span><span class="lineCov"> 15 : RegExp('{.*thisVal.*}').hasMatch(_func.runtimeType.toString());</span></a>
<a name="32"><span class="lineNum"> 32 </span> : final ret =</a>
<a name="33"><span class="lineNum"> 33 </span><span class="lineCov"> 8 : Function.apply(_func, args, passThis ? {#thisVal: thisVal} : null);</span></a>
<a name="34"><span class="lineNum"> 34 </span><span class="lineCov"> 3 : JSRef.freeRecursive(args);</span></a>
<a name="35"><span class="lineNum"> 35 </span><span class="lineCov"> 3 : JSRef.freeRecursive(thisVal);</span></a>
<a name="36"><span class="lineNum"> 36 </span> : return ret;</a>
<a name="37"><span class="lineNum"> 37 </span> : }</a>
<a name="38"><span class="lineNum"> 38 </span> : </a>
<a name="39"><span class="lineNum"> 39 </span><span class="lineNoCov"> 0 : @override</span></a>
<a name="40"><span class="lineNum"> 40 </span> : String toString() {</a>
<a name="41"><span class="lineNum"> 41 </span><span class="lineNoCov"> 0 : return _func.toString();</span></a>
<a name="42"><span class="lineNum"> 42 </span> : }</a>
<a name="43"><span class="lineNum"> 43 </span> : </a>
<a name="44"><span class="lineNum"> 44 </span><span class="lineNoCov"> 0 : @override</span></a>
<a name="45"><span class="lineNum"> 45 </span> : destroy() {}</a>
<a name="46"><span class="lineNum"> 46 </span> : }</a>
<a name="47"><span class="lineNum"> 47 </span> : </a>
<a name="48"><span class="lineNum"> 48 </span> : /// implement this to capture js object release.</a>
<a name="49"><span class="lineNum"> 49 </span> : </a>
<a name="50"><span class="lineNum"> 50 </span> : class _DartObject extends JSRef implements JSRefLeakable {</a>
<a name="51"><span class="lineNum"> 51 </span> : Object? _obj;</a>
<a name="52"><span class="lineNum"> 52 </span> : Pointer&lt;JSContext&gt;? _ctx;</a>
<a name="53"><span class="lineNum"> 53 </span><span class="lineCov"> 3 : _DartObject(Pointer&lt;JSContext&gt; ctx, dynamic obj) {</span></a>
<a name="54"><span class="lineNum"> 54 </span><span class="lineCov"> 3 : _ctx = ctx;</span></a>
<a name="55"><span class="lineNum"> 55 </span><span class="lineCov"> 3 : _obj = obj;</span></a>
<a name="56"><span class="lineNum"> 56 </span><span class="lineCov"> 6 : if (obj is JSRef) obj.dup();</span></a>
<a name="57"><span class="lineNum"> 57 </span><span class="lineCov"> 15 : runtimeOpaques[jsGetRuntime(ctx)]?.addRef(this);</span></a>
<a name="58"><span class="lineNum"> 58 </span> : }</a>
<a name="59"><span class="lineNum"> 59 </span> : </a>
<a name="60"><span class="lineNum"> 60 </span><span class="lineCov"> 3 : static _DartObject? fromAddress(Pointer&lt;JSRuntime&gt; rt, int val) {</span></a>
<a name="61"><span class="lineNum"> 61 </span><span class="lineCov"> 18 : return runtimeOpaques[rt]?.getRef((e) =&gt; identityHashCode(e) == val)</span></a>
<a name="62"><span class="lineNum"> 62 </span> : as _DartObject?;</a>
<a name="63"><span class="lineNum"> 63 </span> : }</a>
<a name="64"><span class="lineNum"> 64 </span> : </a>
<a name="65"><span class="lineNum"> 65 </span><span class="lineNoCov"> 0 : @override</span></a>
<a name="66"><span class="lineNum"> 66 </span> : String toString() {</a>
<a name="67"><span class="lineNum"> 67 </span><span class="lineNoCov"> 0 : if (_ctx == null) return &quot;DartObject(released)&quot;;</span></a>
<a name="68"><span class="lineNum"> 68 </span><span class="lineNoCov"> 0 : return _obj.toString();</span></a>
<a name="69"><span class="lineNum"> 69 </span> : }</a>
<a name="70"><span class="lineNum"> 70 </span> : </a>
<a name="71"><span class="lineNum"> 71 </span><span class="lineCov"> 3 : @override</span></a>
<a name="72"><span class="lineNum"> 72 </span> : void destroy() {</a>
<a name="73"><span class="lineNum"> 73 </span><span class="lineCov"> 3 : final ctx = _ctx;</span></a>
<a name="74"><span class="lineNum"> 74 </span><span class="lineCov"> 3 : final obj = _obj;</span></a>
<a name="75"><span class="lineNum"> 75 </span><span class="lineCov"> 3 : _ctx = null;</span></a>
<a name="76"><span class="lineNum"> 76 </span><span class="lineCov"> 3 : _obj = null;</span></a>
<a name="77"><span class="lineNum"> 77 </span> : if (ctx == null) return;</a>
<a name="78"><span class="lineNum"> 78 </span><span class="lineCov"> 15 : runtimeOpaques[jsGetRuntime(ctx)]?.removeRef(this);</span></a>
<a name="79"><span class="lineNum"> 79 </span><span class="lineCov"> 6 : if (obj is JSRef) obj.free();</span></a>
<a name="80"><span class="lineNum"> 80 </span> : }</a>
<a name="81"><span class="lineNum"> 81 </span> : }</a>
<a name="82"><span class="lineNum"> 82 </span> : </a>
<a name="83"><span class="lineNum"> 83 </span> : /// JS Error wrapper</a>
<a name="84"><span class="lineNum"> 84 </span> : class JSError extends _IsolateEncodable {</a>
<a name="85"><span class="lineNum"> 85 </span> : late String message;</a>
<a name="86"><span class="lineNum"> 86 </span> : late String stack;</a>
<a name="87"><span class="lineNum"> 87 </span><span class="lineCov"> 2 : JSError(message, [stack]) {</span></a>
<a name="88"><span class="lineNum"> 88 </span><span class="lineCov"> 2 : if (message is JSError) {</span></a>
<a name="89"><span class="lineNum"> 89 </span><span class="lineNoCov"> 0 : this.message = message.message;</span></a>
<a name="90"><span class="lineNum"> 90 </span><span class="lineNoCov"> 0 : this.stack = message.stack;</span></a>
<a name="91"><span class="lineNum"> 91 </span> : } else {</a>
<a name="92"><span class="lineNum"> 92 </span><span class="lineCov"> 4 : this.message = message.toString();</span></a>
<a name="93"><span class="lineNum"> 93 </span><span class="lineCov"> 5 : this.stack = (stack ?? StackTrace.current).toString();</span></a>
<a name="94"><span class="lineNum"> 94 </span> : }</a>
<a name="95"><span class="lineNum"> 95 </span> : }</a>
<a name="96"><span class="lineNum"> 96 </span> : </a>
<a name="97"><span class="lineNum"> 97 </span><span class="lineNoCov"> 0 : @override</span></a>
<a name="98"><span class="lineNum"> 98 </span> : String toString() {</a>
<a name="99"><span class="lineNum"> 99 </span><span class="lineNoCov"> 0 : return stack.isEmpty ? message.toString() : &quot;$message\n$stack&quot;;</span></a>
<a name="100"><span class="lineNum"> 100 </span> : }</a>
<a name="101"><span class="lineNum"> 101 </span> : </a>
<a name="102"><span class="lineNum"> 102 </span><span class="lineCov"> 3 : static JSError? _decode(Map obj) {</span></a>
<a name="103"><span class="lineNum"> 103 </span><span class="lineCov"> 3 : if (obj.containsKey(#jsError))</span></a>
<a name="104"><span class="lineNum"> 104 </span><span class="lineCov"> 6 : return JSError(obj[#jsError], obj[#jsErrorStack]);</span></a>
<a name="105"><span class="lineNum"> 105 </span> : return null;</a>
<a name="106"><span class="lineNum"> 106 </span> : }</a>
<a name="107"><span class="lineNum"> 107 </span> : </a>
<a name="108"><span class="lineNum"> 108 </span><span class="lineCov"> 2 : @override</span></a>
<a name="109"><span class="lineNum"> 109 </span> : Map _encode() {</a>
<a name="110"><span class="lineNum"> 110 </span><span class="lineCov"> 2 : return {</span></a>
<a name="111"><span class="lineNum"> 111 </span><span class="lineCov"> 2 : #jsError: message,</span></a>
<a name="112"><span class="lineNum"> 112 </span><span class="lineCov"> 2 : #jsErrorStack: stack,</span></a>
<a name="113"><span class="lineNum"> 113 </span> : };</a>
<a name="114"><span class="lineNum"> 114 </span> : }</a>
<a name="115"><span class="lineNum"> 115 </span> : }</a>
<a name="116"><span class="lineNum"> 116 </span> : </a>
<a name="117"><span class="lineNum"> 117 </span> : /// JS Object reference</a>
<a name="118"><span class="lineNum"> 118 </span> : /// call [release] to release js object.</a>
<a name="119"><span class="lineNum"> 119 </span> : class _JSObject extends JSRef {</a>
<a name="120"><span class="lineNum"> 120 </span> : Pointer&lt;JSValue&gt;? _val;</a>
<a name="121"><span class="lineNum"> 121 </span> : Pointer&lt;JSContext&gt;? _ctx;</a>
<a name="122"><span class="lineNum"> 122 </span> : </a>
<a name="123"><span class="lineNum"> 123 </span> : /// Create</a>
<a name="124"><span class="lineNum"> 124 </span><span class="lineCov"> 3 : _JSObject(Pointer&lt;JSContext&gt; ctx, Pointer&lt;JSValue&gt; val) {</span></a>
<a name="125"><span class="lineNum"> 125 </span><span class="lineCov"> 3 : this._ctx = ctx;</span></a>
<a name="126"><span class="lineNum"> 126 </span><span class="lineCov"> 6 : final rt = jsGetRuntime(ctx);</span></a>
<a name="127"><span class="lineNum"> 127 </span><span class="lineCov"> 9 : this._val = jsDupValue(ctx, val);</span></a>
<a name="128"><span class="lineNum"> 128 </span><span class="lineCov"> 9 : runtimeOpaques[rt]?.addRef(this);</span></a>
<a name="129"><span class="lineNum"> 129 </span> : }</a>
<a name="130"><span class="lineNum"> 130 </span> : </a>
<a name="131"><span class="lineNum"> 131 </span><span class="lineCov"> 3 : @override</span></a>
<a name="132"><span class="lineNum"> 132 </span> : void destroy() {</a>
<a name="133"><span class="lineNum"> 133 </span><span class="lineCov"> 3 : final ctx = _ctx;</span></a>
<a name="134"><span class="lineNum"> 134 </span><span class="lineCov"> 3 : final val = _val;</span></a>
<a name="135"><span class="lineNum"> 135 </span><span class="lineCov"> 3 : _val = null;</span></a>
<a name="136"><span class="lineNum"> 136 </span><span class="lineCov"> 3 : _ctx = null;</span></a>
<a name="137"><span class="lineNum"> 137 </span> : if (ctx == null || val == null) return;</a>
<a name="138"><span class="lineNum"> 138 </span><span class="lineCov"> 6 : final rt = jsGetRuntime(ctx);</span></a>
<a name="139"><span class="lineNum"> 139 </span><span class="lineCov"> 9 : runtimeOpaques[rt]?.removeRef(this);</span></a>
<a name="140"><span class="lineNum"> 140 </span><span class="lineCov"> 3 : jsFreeValue(ctx, val);</span></a>
<a name="141"><span class="lineNum"> 141 </span> : }</a>
<a name="142"><span class="lineNum"> 142 </span> : </a>
<a name="143"><span class="lineNum"> 143 </span><span class="lineCov"> 1 : @override</span></a>
<a name="144"><span class="lineNum"> 144 </span> : String toString() {</a>
<a name="145"><span class="lineNum"> 145 </span><span class="lineCov"> 2 : if (_ctx == null || _val == null) return &quot;JSObject(released)&quot;;</span></a>
<a name="146"><span class="lineNum"> 146 </span><span class="lineCov"> 3 : return jsToCString(_ctx!, _val!);</span></a>
<a name="147"><span class="lineNum"> 147 </span> : }</a>
<a name="148"><span class="lineNum"> 148 </span> : }</a>
<a name="149"><span class="lineNum"> 149 </span> : </a>
<a name="150"><span class="lineNum"> 150 </span> : /// JS function wrapper</a>
<a name="151"><span class="lineNum"> 151 </span> : class _JSFunction extends _JSObject implements JSInvokable, _IsolateEncodable {</a>
<a name="152"><span class="lineNum"> 152 </span><span class="lineCov"> 6 : _JSFunction(Pointer&lt;JSContext&gt; ctx, Pointer&lt;JSValue&gt; val) : super(ctx, val);</span></a>
<a name="153"><span class="lineNum"> 153 </span> : </a>
<a name="154"><span class="lineNum"> 154 </span><span class="lineCov"> 3 : @override</span></a>
<a name="155"><span class="lineNum"> 155 </span> : invoke(List&lt;dynamic&gt; arguments, [dynamic thisVal]) {</a>
<a name="156"><span class="lineNum"> 156 </span><span class="lineCov"> 3 : final jsRet = _invoke(arguments, thisVal);</span></a>
<a name="157"><span class="lineNum"> 157 </span><span class="lineCov"> 3 : final ctx = _ctx!;</span></a>
<a name="158"><span class="lineNum"> 158 </span><span class="lineCov"> 9 : bool isException = jsIsException(jsRet) != 0;</span></a>
<a name="159"><span class="lineNum"> 159 </span> : if (isException) {</a>
<a name="160"><span class="lineNum"> 160 </span><span class="lineNoCov"> 0 : jsFreeValue(ctx, jsRet);</span></a>
<a name="161"><span class="lineNum"> 161 </span><span class="lineNoCov"> 0 : throw _parseJSException(ctx);</span></a>
<a name="162"><span class="lineNum"> 162 </span> : }</a>
<a name="163"><span class="lineNum"> 163 </span><span class="lineCov"> 3 : final ret = _jsToDart(ctx, jsRet);</span></a>
<a name="164"><span class="lineNum"> 164 </span><span class="lineCov"> 3 : jsFreeValue(ctx, jsRet);</span></a>
<a name="165"><span class="lineNum"> 165 </span> : return ret;</a>
<a name="166"><span class="lineNum"> 166 </span> : }</a>
<a name="167"><span class="lineNum"> 167 </span> : </a>
<a name="168"><span class="lineNum"> 168 </span><span class="lineCov"> 3 : Pointer&lt;JSValue&gt; _invoke(List&lt;dynamic&gt; arguments, [dynamic thisVal]) {</span></a>
<a name="169"><span class="lineNum"> 169 </span><span class="lineCov"> 3 : final ctx = _ctx;</span></a>
<a name="170"><span class="lineNum"> 170 </span><span class="lineCov"> 3 : final val = _val;</span></a>
<a name="171"><span class="lineNum"> 171 </span> : if (ctx == null || val == null)</a>
<a name="172"><span class="lineNum"> 172 </span><span class="lineNoCov"> 0 : throw JSError(&quot;InternalError: JSValue released&quot;);</span></a>
<a name="173"><span class="lineNum"> 173 </span> : final args = arguments</a>
<a name="174"><span class="lineNum"> 174 </span><span class="lineCov"> 3 : .map(</span></a>
<a name="175"><span class="lineNum"> 175 </span><span class="lineCov"> 6 : (e) =&gt; _dartToJs(ctx, e),</span></a>
<a name="176"><span class="lineNum"> 176 </span> : )</a>
<a name="177"><span class="lineNum"> 177 </span><span class="lineCov"> 3 : .toList();</span></a>
<a name="178"><span class="lineNum"> 178 </span><span class="lineCov"> 3 : final jsThis = _dartToJs(ctx, thisVal);</span></a>
<a name="179"><span class="lineNum"> 179 </span><span class="lineCov"> 3 : final jsRet = jsCall(ctx, val, jsThis, args);</span></a>
<a name="180"><span class="lineNum"> 180 </span><span class="lineCov"> 3 : jsFreeValue(ctx, jsThis);</span></a>
<a name="181"><span class="lineNum"> 181 </span><span class="lineCov"> 6 : for (final jsArg in args) {</span></a>
<a name="182"><span class="lineNum"> 182 </span><span class="lineCov"> 3 : jsFreeValue(ctx, jsArg);</span></a>
<a name="183"><span class="lineNum"> 183 </span> : }</a>
<a name="184"><span class="lineNum"> 184 </span> : return jsRet;</a>
<a name="185"><span class="lineNum"> 185 </span> : }</a>
<a name="186"><span class="lineNum"> 186 </span> : </a>
<a name="187"><span class="lineNum"> 187 </span><span class="lineCov"> 2 : @override</span></a>
<a name="188"><span class="lineNum"> 188 </span> : Map _encode() {</a>
<a name="189"><span class="lineNum"> 189 </span><span class="lineCov"> 4 : return IsolateFunction._new(this)._encode();</span></a>
<a name="190"><span class="lineNum"> 190 </span> : }</a>
<a name="191"><span class="lineNum"> 191 </span> : }</a>
<a name="192"><span class="lineNum"> 192 </span> : </a>
<a name="193"><span class="lineNum"> 193 </span> : /// Dart function wrapper for isolate</a>
<a name="194"><span class="lineNum"> 194 </span> : class IsolateFunction extends JSInvokable implements _IsolateEncodable {</a>
<a name="195"><span class="lineNum"> 195 </span> : int? _isolateId;</a>
<a name="196"><span class="lineNum"> 196 </span> : SendPort? _port;</a>
<a name="197"><span class="lineNum"> 197 </span> : JSInvokable? _invokable;</a>
<a name="198"><span class="lineNum"> 198 </span><span class="lineCov"> 3 : IsolateFunction._fromId(this._isolateId, this._port);</span></a>
<a name="199"><span class="lineNum"> 199 </span> : </a>
<a name="200"><span class="lineNum"> 200 </span><span class="lineCov"> 3 : IsolateFunction._new(this._invokable) {</span></a>
<a name="201"><span class="lineNum"> 201 </span><span class="lineCov"> 6 : _handlers.add(this);</span></a>
<a name="202"><span class="lineNum"> 202 </span> : }</a>
<a name="203"><span class="lineNum"> 203 </span><span class="lineCov"> 3 : IsolateFunction(Function func) : this._new(_DartFunction(func));</span></a>
<a name="204"><span class="lineNum"> 204 </span> : </a>
<a name="205"><span class="lineNum"> 205 </span> : static ReceivePort? _invokeHandler;</a>
<a name="206"><span class="lineNum"> 206 </span><span class="lineCov"> 6 : static Set&lt;IsolateFunction&gt; _handlers = Set();</span></a>
<a name="207"><span class="lineNum"> 207 </span> : </a>
<a name="208"><span class="lineNum"> 208 </span><span class="lineCov"> 3 : static get _handlePort {</span></a>
<a name="209"><span class="lineNum"> 209 </span> : if (_invokeHandler == null) {</a>
<a name="210"><span class="lineNum"> 210 </span><span class="lineCov"> 3 : _invokeHandler = ReceivePort();</span></a>
<a name="211"><span class="lineNum"> 211 </span><span class="lineCov"> 6 : _invokeHandler!.listen((msg) async {</span></a>
<a name="212"><span class="lineNum"> 212 </span><span class="lineCov"> 3 : final msgPort = msg[#port];</span></a>
<a name="213"><span class="lineNum"> 213 </span> : try {</a>
<a name="214"><span class="lineNum"> 214 </span><span class="lineCov"> 6 : final handler = _handlers.firstWhereOrNull(</span></a>
<a name="215"><span class="lineNum"> 215 </span><span class="lineCov"> 12 : (v) =&gt; identityHashCode(v) == msg[#handler],</span></a>
<a name="216"><span class="lineNum"> 216 </span> : );</a>
<a name="217"><span class="lineNum"> 217 </span><span class="lineNoCov"> 0 : if (handler == null) throw JSError('handler released');</span></a>
<a name="218"><span class="lineNum"> 218 </span><span class="lineCov"> 12 : final ret = _encodeData(await handler._handle(msg[#msg]));</span></a>
<a name="219"><span class="lineNum"> 219 </span><span class="lineCov"> 3 : if (msgPort != null) msgPort.send(ret);</span></a>
<a name="220"><span class="lineNum"> 220 </span> : } catch (e) {</a>
<a name="221"><span class="lineNum"> 221 </span><span class="lineNoCov"> 0 : final err = _encodeData(e);</span></a>
<a name="222"><span class="lineNum"> 222 </span> : if (msgPort != null)</a>
<a name="223"><span class="lineNum"> 223 </span><span class="lineNoCov"> 0 : msgPort.send({</span></a>
<a name="224"><span class="lineNum"> 224 </span> : #error: err,</a>
<a name="225"><span class="lineNum"> 225 </span> : });</a>
<a name="226"><span class="lineNum"> 226 </span> : }</a>
<a name="227"><span class="lineNum"> 227 </span> : });</a>
<a name="228"><span class="lineNum"> 228 </span> : }</a>
<a name="229"><span class="lineNum"> 229 </span><span class="lineCov"> 3 : return _invokeHandler!.sendPort;</span></a>
<a name="230"><span class="lineNum"> 230 </span> : }</a>
<a name="231"><span class="lineNum"> 231 </span> : </a>
<a name="232"><span class="lineNum"> 232 </span><span class="lineCov"> 3 : _send(msg) async {</span></a>
<a name="233"><span class="lineNum"> 233 </span><span class="lineCov"> 3 : final port = _port;</span></a>
<a name="234"><span class="lineNum"> 234 </span><span class="lineCov"> 1 : if (port == null) return _handle(msg);</span></a>
<a name="235"><span class="lineNum"> 235 </span><span class="lineCov"> 3 : final evaluatePort = ReceivePort();</span></a>
<a name="236"><span class="lineNum"> 236 </span><span class="lineCov"> 6 : port.send({</span></a>
<a name="237"><span class="lineNum"> 237 </span><span class="lineCov"> 3 : #handler: _isolateId,</span></a>
<a name="238"><span class="lineNum"> 238 </span> : #msg: msg,</a>
<a name="239"><span class="lineNum"> 239 </span><span class="lineCov"> 3 : #port: evaluatePort.sendPort,</span></a>
<a name="240"><span class="lineNum"> 240 </span> : });</a>
<a name="241"><span class="lineNum"> 241 </span><span class="lineCov"> 6 : final result = await evaluatePort.first;</span></a>
<a name="242"><span class="lineNum"> 242 </span><span class="lineCov"> 5 : if (result is Map &amp;&amp; result.containsKey(#error))</span></a>
<a name="243"><span class="lineNum"> 243 </span><span class="lineNoCov"> 0 : throw _decodeData(result[#error]);</span></a>
<a name="244"><span class="lineNum"> 244 </span><span class="lineCov"> 3 : return _decodeData(result);</span></a>
<a name="245"><span class="lineNum"> 245 </span> : }</a>
<a name="246"><span class="lineNum"> 246 </span> : </a>
<a name="247"><span class="lineNum"> 247 </span><span class="lineCov"> 2 : _destroy() {</span></a>
<a name="248"><span class="lineNum"> 248 </span><span class="lineCov"> 4 : _handlers.remove(this);</span></a>
<a name="249"><span class="lineNum"> 249 </span><span class="lineCov"> 4 : _invokable?.free();</span></a>
<a name="250"><span class="lineNum"> 250 </span><span class="lineCov"> 2 : _invokable = null;</span></a>
<a name="251"><span class="lineNum"> 251 </span> : }</a>
<a name="252"><span class="lineNum"> 252 </span> : </a>
<a name="253"><span class="lineNum"> 253 </span><span class="lineCov"> 3 : _handle(msg) async {</span></a>
<a name="254"><span class="lineNum"> 254 </span> : switch (msg) {</a>
<a name="255"><span class="lineNum"> 255 </span><span class="lineCov"> 3 : case #dup:</span></a>
<a name="256"><span class="lineNum"> 256 </span><span class="lineCov"> 6 : _refCount++;</span></a>
<a name="257"><span class="lineNum"> 257 </span> : return null;</a>
<a name="258"><span class="lineNum"> 258 </span><span class="lineCov"> 3 : case #free:</span></a>
<a name="259"><span class="lineNum"> 259 </span><span class="lineCov"> 6 : _refCount--;</span></a>
<a name="260"><span class="lineNum"> 260 </span><span class="lineCov"> 8 : if (_refCount &lt; 0) _destroy();</span></a>
<a name="261"><span class="lineNum"> 261 </span> : return null;</a>
<a name="262"><span class="lineNum"> 262 </span><span class="lineCov"> 3 : case #destroy:</span></a>
<a name="263"><span class="lineNum"> 263 </span><span class="lineNoCov"> 0 : _destroy();</span></a>
<a name="264"><span class="lineNum"> 264 </span> : return null;</a>
<a name="265"><span class="lineNum"> 265 </span> : }</a>
<a name="266"><span class="lineNum"> 266 </span><span class="lineCov"> 6 : final List args = _decodeData(msg[#args]);</span></a>
<a name="267"><span class="lineNum"> 267 </span><span class="lineCov"> 6 : final thisVal = _decodeData(msg[#thisVal]);</span></a>
<a name="268"><span class="lineNum"> 268 </span><span class="lineCov"> 6 : return _invokable?.invoke(args, thisVal);</span></a>
<a name="269"><span class="lineNum"> 269 </span> : }</a>
<a name="270"><span class="lineNum"> 270 </span> : </a>
<a name="271"><span class="lineNum"> 271 </span> : @override</a>
<a name="272"><span class="lineNum"> 272 </span><span class="lineCov"> 3 : Future invoke(List positionalArguments, [thisVal]) async {</span></a>
<a name="273"><span class="lineNum"> 273 </span><span class="lineCov"> 3 : final List dArgs = _encodeData(positionalArguments);</span></a>
<a name="274"><span class="lineNum"> 274 </span><span class="lineCov"> 3 : final dThisVal = _encodeData(thisVal);</span></a>
<a name="275"><span class="lineNum"> 275 </span><span class="lineCov"> 6 : return _send({</span></a>
<a name="276"><span class="lineNum"> 276 </span> : #args: dArgs,</a>
<a name="277"><span class="lineNum"> 277 </span> : #thisVal: dThisVal,</a>
<a name="278"><span class="lineNum"> 278 </span> : });</a>
<a name="279"><span class="lineNum"> 279 </span> : }</a>
<a name="280"><span class="lineNum"> 280 </span> : </a>
<a name="281"><span class="lineNum"> 281 </span><span class="lineCov"> 3 : static IsolateFunction? _decode(Map obj) {</span></a>
<a name="282"><span class="lineNum"> 282 </span><span class="lineCov"> 3 : if (obj.containsKey(#jsFunctionPort))</span></a>
<a name="283"><span class="lineNum"> 283 </span><span class="lineCov"> 3 : return IsolateFunction._fromId(</span></a>
<a name="284"><span class="lineNum"> 284 </span><span class="lineCov"> 3 : obj[#jsFunctionId],</span></a>
<a name="285"><span class="lineNum"> 285 </span><span class="lineCov"> 3 : obj[#jsFunctionPort],</span></a>
<a name="286"><span class="lineNum"> 286 </span> : );</a>
<a name="287"><span class="lineNum"> 287 </span> : return null;</a>
<a name="288"><span class="lineNum"> 288 </span> : }</a>
<a name="289"><span class="lineNum"> 289 </span> : </a>
<a name="290"><span class="lineNum"> 290 </span><span class="lineCov"> 3 : @override</span></a>
<a name="291"><span class="lineNum"> 291 </span> : Map _encode() {</a>
<a name="292"><span class="lineNum"> 292 </span><span class="lineCov"> 3 : return {</span></a>
<a name="293"><span class="lineNum"> 293 </span><span class="lineCov"> 6 : #jsFunctionId: _isolateId ?? identityHashCode(this),</span></a>
<a name="294"><span class="lineNum"> 294 </span><span class="lineCov"> 6 : #jsFunctionPort: _port ?? IsolateFunction._handlePort,</span></a>
<a name="295"><span class="lineNum"> 295 </span> : };</a>
<a name="296"><span class="lineNum"> 296 </span> : }</a>
<a name="297"><span class="lineNum"> 297 </span> : </a>
<a name="298"><span class="lineNum"> 298 </span> : int _refCount = 0;</a>
<a name="299"><span class="lineNum"> 299 </span> : </a>
<a name="300"><span class="lineNum"> 300 </span><span class="lineCov"> 3 : @override</span></a>
<a name="301"><span class="lineNum"> 301 </span> : dup() {</a>
<a name="302"><span class="lineNum"> 302 </span><span class="lineCov"> 3 : _send(#dup);</span></a>
<a name="303"><span class="lineNum"> 303 </span> : }</a>
<a name="304"><span class="lineNum"> 304 </span> : </a>
<a name="305"><span class="lineNum"> 305 </span><span class="lineCov"> 3 : @override</span></a>
<a name="306"><span class="lineNum"> 306 </span> : free() {</a>
<a name="307"><span class="lineNum"> 307 </span><span class="lineCov"> 3 : _send(#free);</span></a>
<a name="308"><span class="lineNum"> 308 </span> : }</a>
<a name="309"><span class="lineNum"> 309 </span> : </a>
<a name="310"><span class="lineNum"> 310 </span><span class="lineNoCov"> 0 : @override</span></a>
<a name="311"><span class="lineNum"> 311 </span> : void destroy() {</a>
<a name="312"><span class="lineNum"> 312 </span><span class="lineNoCov"> 0 : _send(#destroy);</span></a>
<a name="313"><span class="lineNum"> 313 </span> : }</a>
<a name="314"><span class="lineNum"> 314 </span> : }</a>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,72 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src/wrapper.dart - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">src</a> - wrapper.dart<span style="font-size: 80%;"> (<a href="wrapper.dart.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">149</td>
<td class="headerCovTableEntry">158</td>
<td class="headerCovTableEntryHi">94.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="60%" cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="wrapper.dart.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,72 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src/wrapper.dart - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">src</a> - wrapper.dart<span style="font-size: 80%;"> (<a href="wrapper.dart.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">149</td>
<td class="headerCovTableEntry">158</td>
<td class="headerCovTableEntryHi">94.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="60%" cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="wrapper.dart.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,325 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - lcov.info - src/wrapper.dart</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">src</a> - wrapper.dart<span style="font-size: 80%;"> (source / <a href="wrapper.dart.func-sort-c.html">functions</a>)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
<td width="10%" class="headerCovTableHead">Total</td>
<td width="15%" class="headerCovTableHead">Coverage</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">149</td>
<td class="headerCovTableEntry">158</td>
<td class="headerCovTableEntryHi">94.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2021-03-31 22:28:15</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<a name="1"><span class="lineNum"> 1 </span> : /*</a>
<a name="2"><span class="lineNum"> 2 </span> : * @Description: wrapper</a>
<a name="3"><span class="lineNum"> 3 </span> : * @Author: ekibun</a>
<a name="4"><span class="lineNum"> 4 </span> : * @Date: 2020-09-19 22:07:47</a>
<a name="5"><span class="lineNum"> 5 </span> : * @LastEditors: ekibun</a>
<a name="6"><span class="lineNum"> 6 </span> : * @LastEditTime: 2020-12-02 11:14:03</a>
<a name="7"><span class="lineNum"> 7 </span> : */</a>
<a name="8"><span class="lineNum"> 8 </span> : part of '../flutter_qjs.dart';</a>
<a name="9"><span class="lineNum"> 9 </span> : </a>
<a name="10"><span class="lineNum"> 10 </span><span class="lineCov"> 2 : dynamic _parseJSException(Pointer&lt;JSContext&gt; ctx, [Pointer&lt;JSValue&gt;? perr]) {</span></a>
<a name="11"><span class="lineNum"> 11 </span><span class="lineCov"> 2 : final e = perr ?? jsGetException(ctx);</span></a>
<a name="12"><span class="lineNum"> 12 </span> : var err;</a>
<a name="13"><span class="lineNum"> 13 </span> : try {</a>
<a name="14"><span class="lineNum"> 14 </span><span class="lineCov"> 2 : err = _jsToDart(ctx, e);</span></a>
<a name="15"><span class="lineNum"> 15 </span> : } catch (exception) {</a>
<a name="16"><span class="lineNum"> 16 </span> : err = exception;</a>
<a name="17"><span class="lineNum"> 17 </span> : }</a>
<a name="18"><span class="lineNum"> 18 </span><span class="lineCov"> 1 : if (perr == null) jsFreeValue(ctx, e);</span></a>
<a name="19"><span class="lineNum"> 19 </span> : return err;</a>
<a name="20"><span class="lineNum"> 20 </span> : }</a>
<a name="21"><span class="lineNum"> 21 </span> : </a>
<a name="22"><span class="lineNum"> 22 </span><span class="lineCov"> 2 : void _definePropertyValue(</span></a>
<a name="23"><span class="lineNum"> 23 </span> : Pointer&lt;JSContext&gt; ctx,</a>
<a name="24"><span class="lineNum"> 24 </span> : Pointer&lt;JSValue&gt; obj,</a>
<a name="25"><span class="lineNum"> 25 </span> : dynamic key,</a>
<a name="26"><span class="lineNum"> 26 </span> : dynamic val, {</a>
<a name="27"><span class="lineNum"> 27 </span> : Map&lt;dynamic, Pointer&lt;JSValue&gt;&gt;? cache,</a>
<a name="28"><span class="lineNum"> 28 </span> : }) {</a>
<a name="29"><span class="lineNum"> 29 </span><span class="lineCov"> 2 : final jsAtomVal = _dartToJs(ctx, key, cache: cache);</span></a>
<a name="30"><span class="lineNum"> 30 </span><span class="lineCov"> 4 : final jsAtom = jsValueToAtom(ctx, jsAtomVal);</span></a>
<a name="31"><span class="lineNum"> 31 </span><span class="lineCov"> 4 : jsDefinePropertyValue(</span></a>
<a name="32"><span class="lineNum"> 32 </span> : ctx,</a>
<a name="33"><span class="lineNum"> 33 </span> : obj,</a>
<a name="34"><span class="lineNum"> 34 </span> : jsAtom,</a>
<a name="35"><span class="lineNum"> 35 </span><span class="lineCov"> 2 : _dartToJs(ctx, val, cache: cache),</span></a>
<a name="36"><span class="lineNum"> 36 </span> : JSProp.C_W_E,</a>
<a name="37"><span class="lineNum"> 37 </span> : );</a>
<a name="38"><span class="lineNum"> 38 </span><span class="lineCov"> 4 : jsFreeAtom(ctx, jsAtom);</span></a>
<a name="39"><span class="lineNum"> 39 </span><span class="lineCov"> 2 : jsFreeValue(ctx, jsAtomVal);</span></a>
<a name="40"><span class="lineNum"> 40 </span> : }</a>
<a name="41"><span class="lineNum"> 41 </span> : </a>
<a name="42"><span class="lineNum"> 42 </span><span class="lineCov"> 3 : Pointer&lt;JSValue&gt; _jsGetPropertyValue(</span></a>
<a name="43"><span class="lineNum"> 43 </span> : Pointer&lt;JSContext&gt; ctx,</a>
<a name="44"><span class="lineNum"> 44 </span> : Pointer&lt;JSValue&gt; obj,</a>
<a name="45"><span class="lineNum"> 45 </span> : dynamic key, {</a>
<a name="46"><span class="lineNum"> 46 </span> : Map&lt;dynamic, Pointer&lt;JSValue&gt;&gt;? cache,</a>
<a name="47"><span class="lineNum"> 47 </span> : }) {</a>
<a name="48"><span class="lineNum"> 48 </span><span class="lineCov"> 3 : final jsAtomVal = _dartToJs(ctx, key, cache: cache);</span></a>
<a name="49"><span class="lineNum"> 49 </span><span class="lineCov"> 6 : final jsAtom = jsValueToAtom(ctx, jsAtomVal);</span></a>
<a name="50"><span class="lineNum"> 50 </span><span class="lineCov"> 6 : final jsProp = jsGetProperty(ctx, obj, jsAtom);</span></a>
<a name="51"><span class="lineNum"> 51 </span><span class="lineCov"> 6 : jsFreeAtom(ctx, jsAtom);</span></a>
<a name="52"><span class="lineNum"> 52 </span><span class="lineCov"> 3 : jsFreeValue(ctx, jsAtomVal);</span></a>
<a name="53"><span class="lineNum"> 53 </span> : return jsProp;</a>
<a name="54"><span class="lineNum"> 54 </span> : }</a>
<a name="55"><span class="lineNum"> 55 </span> : </a>
<a name="56"><span class="lineNum"> 56 </span><span class="lineCov"> 3 : Pointer&lt;JSValue&gt; _dartToJs(Pointer&lt;JSContext&gt; ctx, dynamic val,</span></a>
<a name="57"><span class="lineNum"> 57 </span> : {Map&lt;dynamic, Pointer&lt;JSValue&gt;&gt;? cache}) {</a>
<a name="58"><span class="lineNum"> 58 </span><span class="lineCov"> 6 : if (val == null) return jsUNDEFINED();</span></a>
<a name="59"><span class="lineNum"> 59 </span><span class="lineCov"> 3 : if (val is Error) return _dartToJs(ctx, JSError(val, val.stackTrace));</span></a>
<a name="60"><span class="lineNum"> 60 </span><span class="lineCov"> 3 : if (val is Exception) return _dartToJs(ctx, JSError(val));</span></a>
<a name="61"><span class="lineNum"> 61 </span><span class="lineCov"> 3 : if (val is JSError) {</span></a>
<a name="62"><span class="lineNum"> 62 </span><span class="lineCov"> 4 : final ret = jsNewError(ctx);</span></a>
<a name="63"><span class="lineNum"> 63 </span><span class="lineCov"> 2 : _definePropertyValue(ctx, ret, &quot;name&quot;, &quot;&quot;);</span></a>
<a name="64"><span class="lineNum"> 64 </span><span class="lineCov"> 4 : _definePropertyValue(ctx, ret, &quot;message&quot;, val.message);</span></a>
<a name="65"><span class="lineNum"> 65 </span><span class="lineCov"> 4 : _definePropertyValue(ctx, ret, &quot;stack&quot;, val.stack);</span></a>
<a name="66"><span class="lineNum"> 66 </span> : return ret;</a>
<a name="67"><span class="lineNum"> 67 </span> : }</a>
<a name="68"><span class="lineNum"> 68 </span><span class="lineCov"> 12 : if (val is _JSObject) return jsDupValue(ctx, val._val!);</span></a>
<a name="69"><span class="lineNum"> 69 </span><span class="lineCov"> 3 : if (val is Future) {</span></a>
<a name="70"><span class="lineNum"> 70 </span><span class="lineCov"> 9 : final resolvingFunc = malloc&lt;Uint8&gt;(sizeOfJSValue * 2).cast&lt;JSValue&gt;();</span></a>
<a name="71"><span class="lineNum"> 71 </span> : final resolvingFunc2 =</a>
<a name="72"><span class="lineNum"> 72 </span><span class="lineCov"> 12 : Pointer&lt;JSValue&gt;.fromAddress(resolvingFunc.address + sizeOfJSValue);</span></a>
<a name="73"><span class="lineNum"> 73 </span><span class="lineCov"> 6 : final ret = jsNewPromiseCapability(ctx, resolvingFunc);</span></a>
<a name="74"><span class="lineNum"> 74 </span><span class="lineCov"> 3 : final _JSFunction res = _jsToDart(ctx, resolvingFunc);</span></a>
<a name="75"><span class="lineNum"> 75 </span><span class="lineCov"> 3 : final _JSFunction rej = _jsToDart(ctx, resolvingFunc2);</span></a>
<a name="76"><span class="lineNum"> 76 </span><span class="lineCov"> 3 : jsFreeValue(ctx, resolvingFunc, free: false);</span></a>
<a name="77"><span class="lineNum"> 77 </span><span class="lineCov"> 3 : jsFreeValue(ctx, resolvingFunc2, free: false);</span></a>
<a name="78"><span class="lineNum"> 78 </span><span class="lineCov"> 3 : malloc.free(resolvingFunc);</span></a>
<a name="79"><span class="lineNum"> 79 </span><span class="lineCov"> 3 : final refRes = _DartObject(ctx, res);</span></a>
<a name="80"><span class="lineNum"> 80 </span><span class="lineCov"> 3 : final refRej = _DartObject(ctx, rej);</span></a>
<a name="81"><span class="lineNum"> 81 </span><span class="lineCov"> 3 : res.free();</span></a>
<a name="82"><span class="lineNum"> 82 </span><span class="lineCov"> 3 : rej.free();</span></a>
<a name="83"><span class="lineNum"> 83 </span><span class="lineCov"> 6 : val.then((value) {</span></a>
<a name="84"><span class="lineNum"> 84 </span><span class="lineCov"> 6 : res.invoke([value]);</span></a>
<a name="85"><span class="lineNum"> 85 </span><span class="lineCov"> 2 : }, onError: (e) {</span></a>
<a name="86"><span class="lineNum"> 86 </span><span class="lineCov"> 4 : rej.invoke([e]);</span></a>
<a name="87"><span class="lineNum"> 87 </span><span class="lineCov"> 6 : }).whenComplete(() {</span></a>
<a name="88"><span class="lineNum"> 88 </span><span class="lineCov"> 3 : refRes.free();</span></a>
<a name="89"><span class="lineNum"> 89 </span><span class="lineCov"> 3 : refRej.free();</span></a>
<a name="90"><span class="lineNum"> 90 </span> : });</a>
<a name="91"><span class="lineNum"> 91 </span> : return ret;</a>
<a name="92"><span class="lineNum"> 92 </span> : }</a>
<a name="93"><span class="lineNum"> 93 </span><span class="lineCov"> 3 : if (cache == null) cache = Map();</span></a>
<a name="94"><span class="lineNum"> 94 </span><span class="lineCov"> 7 : if (val is bool) return jsNewBool(ctx, val ? 1 : 0);</span></a>
<a name="95"><span class="lineNum"> 95 </span><span class="lineCov"> 7 : if (val is int) return jsNewInt64(ctx, val);</span></a>
<a name="96"><span class="lineNum"> 96 </span><span class="lineCov"> 7 : if (val is double) return jsNewFloat64(ctx, val);</span></a>
<a name="97"><span class="lineNum"> 97 </span><span class="lineCov"> 6 : if (val is String) return jsNewString(ctx, val);</span></a>
<a name="98"><span class="lineNum"> 98 </span><span class="lineCov"> 3 : if (val is Uint8List) {</span></a>
<a name="99"><span class="lineNum"> 99 </span><span class="lineNoCov"> 0 : final ptr = malloc&lt;Uint8&gt;(val.length);</span></a>
<a name="100"><span class="lineNum"> 100 </span><span class="lineNoCov"> 0 : final byteList = ptr.asTypedList(val.length);</span></a>
<a name="101"><span class="lineNum"> 101 </span><span class="lineNoCov"> 0 : byteList.setAll(0, val);</span></a>
<a name="102"><span class="lineNum"> 102 </span><span class="lineNoCov"> 0 : final ret = jsNewArrayBufferCopy(ctx, ptr, val.length);</span></a>
<a name="103"><span class="lineNum"> 103 </span><span class="lineNoCov"> 0 : malloc.free(ptr);</span></a>
<a name="104"><span class="lineNum"> 104 </span> : return ret;</a>
<a name="105"><span class="lineNum"> 105 </span> : }</a>
<a name="106"><span class="lineNum"> 106 </span><span class="lineCov"> 3 : if (cache.containsKey(val)) {</span></a>
<a name="107"><span class="lineNum"> 107 </span><span class="lineCov"> 6 : return jsDupValue(ctx, cache[val]!);</span></a>
<a name="108"><span class="lineNum"> 108 </span> : }</a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 3 : if (val is List) {</span></a>
<a name="110"><span class="lineNum"> 110 </span><span class="lineCov"> 4 : final ret = jsNewArray(ctx);</span></a>
<a name="111"><span class="lineNum"> 111 </span><span class="lineCov"> 2 : cache[val] = ret;</span></a>
<a name="112"><span class="lineNum"> 112 </span><span class="lineCov"> 6 : for (int i = 0; i &lt; val.length; ++i) {</span></a>
<a name="113"><span class="lineNum"> 113 </span><span class="lineCov"> 4 : _definePropertyValue(ctx, ret, i, val[i], cache: cache);</span></a>
<a name="114"><span class="lineNum"> 114 </span> : }</a>
<a name="115"><span class="lineNum"> 115 </span> : return ret;</a>
<a name="116"><span class="lineNum"> 116 </span> : }</a>
<a name="117"><span class="lineNum"> 117 </span><span class="lineCov"> 3 : if (val is Map) {</span></a>
<a name="118"><span class="lineNum"> 118 </span><span class="lineCov"> 4 : final ret = jsNewObject(ctx);</span></a>
<a name="119"><span class="lineNum"> 119 </span><span class="lineCov"> 2 : cache[val] = ret;</span></a>
<a name="120"><span class="lineNum"> 120 </span><span class="lineCov"> 4 : for (MapEntry&lt;dynamic, dynamic&gt; entry in val.entries) {</span></a>
<a name="121"><span class="lineNum"> 121 </span><span class="lineCov"> 6 : _definePropertyValue(ctx, ret, entry.key, entry.value, cache: cache);</span></a>
<a name="122"><span class="lineNum"> 122 </span> : }</a>
<a name="123"><span class="lineNum"> 123 </span> : return ret;</a>
<a name="124"><span class="lineNum"> 124 </span> : }</a>
<a name="125"><span class="lineNum"> 125 </span> : // wrap Function to JSInvokable</a>
<a name="126"><span class="lineNum"> 126 </span><span class="lineCov"> 3 : final valWrap = JSInvokable._wrap(val);</span></a>
<a name="127"><span class="lineNum"> 127 </span> : final dartObjectClassId =</a>
<a name="128"><span class="lineNum"> 128 </span><span class="lineCov"> 15 : runtimeOpaques[jsGetRuntime(ctx)]?.dartObjectClassId ?? 0;</span></a>
<a name="129"><span class="lineNum"> 129 </span><span class="lineCov"> 3 : if (dartObjectClassId == 0) return jsUNDEFINED();</span></a>
<a name="130"><span class="lineNum"> 130 </span><span class="lineCov"> 6 : final dartObject = jsNewObjectClass(</span></a>
<a name="131"><span class="lineNum"> 131 </span> : ctx,</a>
<a name="132"><span class="lineNum"> 132 </span> : dartObjectClassId,</a>
<a name="133"><span class="lineNum"> 133 </span><span class="lineCov"> 6 : identityHashCode(_DartObject(ctx, valWrap)),</span></a>
<a name="134"><span class="lineNum"> 134 </span> : );</a>
<a name="135"><span class="lineNum"> 135 </span><span class="lineCov"> 3 : if (valWrap is JSInvokable) {</span></a>
<a name="136"><span class="lineNum"> 136 </span><span class="lineCov"> 6 : final ret = jsNewCFunction(ctx, dartObject);</span></a>
<a name="137"><span class="lineNum"> 137 </span><span class="lineCov"> 3 : jsFreeValue(ctx, dartObject);</span></a>
<a name="138"><span class="lineNum"> 138 </span> : return ret;</a>
<a name="139"><span class="lineNum"> 139 </span> : }</a>
<a name="140"><span class="lineNum"> 140 </span> : return dartObject;</a>
<a name="141"><span class="lineNum"> 141 </span> : }</a>
<a name="142"><span class="lineNum"> 142 </span> : </a>
<a name="143"><span class="lineNum"> 143 </span><span class="lineCov"> 3 : dynamic _jsToDart(Pointer&lt;JSContext&gt; ctx, Pointer&lt;JSValue&gt; val,</span></a>
<a name="144"><span class="lineNum"> 144 </span> : {Map&lt;int, dynamic&gt;? cache}) {</a>
<a name="145"><span class="lineNum"> 145 </span><span class="lineCov"> 3 : if (cache == null) cache = Map();</span></a>
<a name="146"><span class="lineNum"> 146 </span><span class="lineCov"> 6 : final tag = jsValueGetTag(val);</span></a>
<a name="147"><span class="lineNum"> 147 </span><span class="lineCov"> 9 : if (jsTagIsFloat64(tag) != 0) {</span></a>
<a name="148"><span class="lineNum"> 148 </span><span class="lineCov"> 4 : return jsToFloat64(ctx, val);</span></a>
<a name="149"><span class="lineNum"> 149 </span> : }</a>
<a name="150"><span class="lineNum"> 150 </span> : switch (tag) {</a>
<a name="151"><span class="lineNum"> 151 </span><span class="lineCov"> 3 : case JSTag.BOOL:</span></a>
<a name="152"><span class="lineNum"> 152 </span><span class="lineCov"> 6 : return jsToBool(ctx, val) != 0;</span></a>
<a name="153"><span class="lineNum"> 153 </span><span class="lineCov"> 3 : case JSTag.INT:</span></a>
<a name="154"><span class="lineNum"> 154 </span><span class="lineCov"> 4 : return jsToInt64(ctx, val);</span></a>
<a name="155"><span class="lineNum"> 155 </span><span class="lineCov"> 3 : case JSTag.STRING:</span></a>
<a name="156"><span class="lineNum"> 156 </span><span class="lineCov"> 3 : return jsToCString(ctx, val);</span></a>
<a name="157"><span class="lineNum"> 157 </span><span class="lineCov"> 3 : case JSTag.OBJECT:</span></a>
<a name="158"><span class="lineNum"> 158 </span><span class="lineCov"> 6 : final rt = jsGetRuntime(ctx);</span></a>
<a name="159"><span class="lineNum"> 159 </span><span class="lineCov"> 9 : final dartObjectClassId = runtimeOpaques[rt]?.dartObjectClassId;</span></a>
<a name="160"><span class="lineNum"> 160 </span> : if (dartObjectClassId != null) {</a>
<a name="161"><span class="lineNum"> 161 </span><span class="lineCov"> 3 : final dartObject = _DartObject.fromAddress(</span></a>
<a name="162"><span class="lineNum"> 162 </span><span class="lineCov"> 6 : rt, jsGetObjectOpaque(val, dartObjectClassId));</span></a>
<a name="163"><span class="lineNum"> 163 </span><span class="lineCov"> 3 : if (dartObject != null) return dartObject._obj;</span></a>
<a name="164"><span class="lineNum"> 164 </span> : }</a>
<a name="165"><span class="lineNum"> 165 </span> : final psize = malloc&lt;IntPtr&gt;();</a>
<a name="166"><span class="lineNum"> 166 </span><span class="lineCov"> 6 : final buf = jsGetArrayBuffer(ctx, psize, val);</span></a>
<a name="167"><span class="lineNum"> 167 </span><span class="lineCov"> 3 : final size = psize.value;</span></a>
<a name="168"><span class="lineNum"> 168 </span><span class="lineCov"> 3 : malloc.free(psize);</span></a>
<a name="169"><span class="lineNum"> 169 </span><span class="lineCov"> 6 : if (buf.address != 0) {</span></a>
<a name="170"><span class="lineNum"> 170 </span><span class="lineNoCov"> 0 : return Uint8List.fromList(buf.asTypedList(size));</span></a>
<a name="171"><span class="lineNum"> 171 </span> : }</a>
<a name="172"><span class="lineNum"> 172 </span><span class="lineCov"> 6 : final valptr = jsValueGetPtr(val);</span></a>
<a name="173"><span class="lineNum"> 173 </span><span class="lineCov"> 3 : if (cache.containsKey(valptr)) {</span></a>
<a name="174"><span class="lineNum"> 174 </span><span class="lineCov"> 2 : return cache[valptr];</span></a>
<a name="175"><span class="lineNum"> 175 </span> : }</a>
<a name="176"><span class="lineNum"> 176 </span><span class="lineCov"> 9 : if (jsIsFunction(ctx, val) != 0) {</span></a>
<a name="177"><span class="lineNum"> 177 </span><span class="lineCov"> 3 : return _JSFunction(ctx, val);</span></a>
<a name="178"><span class="lineNum"> 178 </span><span class="lineCov"> 9 : } else if (jsIsError(ctx, val) != 0) {</span></a>
<a name="179"><span class="lineNum"> 179 </span><span class="lineCov"> 2 : final err = jsToCString(ctx, val);</span></a>
<a name="180"><span class="lineNum"> 180 </span><span class="lineCov"> 2 : final pstack = _jsGetPropertyValue(ctx, val, 'stack');</span></a>
<a name="181"><span class="lineNum"> 181 </span> : final stack =</a>
<a name="182"><span class="lineNum"> 182 </span><span class="lineCov"> 8 : jsToBool(ctx, pstack) != 0 ? jsToCString(ctx, pstack) : null;</span></a>
<a name="183"><span class="lineNum"> 183 </span><span class="lineCov"> 2 : jsFreeValue(ctx, pstack);</span></a>
<a name="184"><span class="lineNum"> 184 </span><span class="lineCov"> 2 : return JSError(err, stack);</span></a>
<a name="185"><span class="lineNum"> 185 </span><span class="lineCov"> 9 : } else if (jsIsPromise(ctx, val) != 0) {</span></a>
<a name="186"><span class="lineNum"> 186 </span><span class="lineCov"> 3 : final jsPromiseThen = _jsGetPropertyValue(ctx, val, 'then');</span></a>
<a name="187"><span class="lineNum"> 187 </span> : final _JSFunction promiseThen =</a>
<a name="188"><span class="lineNum"> 188 </span><span class="lineCov"> 3 : _jsToDart(ctx, jsPromiseThen, cache: cache);</span></a>
<a name="189"><span class="lineNum"> 189 </span><span class="lineCov"> 3 : jsFreeValue(ctx, jsPromiseThen);</span></a>
<a name="190"><span class="lineNum"> 190 </span><span class="lineCov"> 3 : final completer = Completer();</span></a>
<a name="191"><span class="lineNum"> 191 </span><span class="lineCov"> 8 : completer.future.catchError((e) {});</span></a>
<a name="192"><span class="lineNum"> 192 </span><span class="lineCov"> 3 : final jsPromise = _JSObject(ctx, val);</span></a>
<a name="193"><span class="lineNum"> 193 </span><span class="lineCov"> 6 : final jsRet = promiseThen._invoke([</span></a>
<a name="194"><span class="lineNum"> 194 </span><span class="lineCov"> 3 : (v) {</span></a>
<a name="195"><span class="lineNum"> 195 </span><span class="lineCov"> 3 : JSRef.dupRecursive(v);</span></a>
<a name="196"><span class="lineNum"> 196 </span><span class="lineCov"> 6 : if (!completer.isCompleted) completer.complete(v);</span></a>
<a name="197"><span class="lineNum"> 197 </span> : },</a>
<a name="198"><span class="lineNum"> 198 </span><span class="lineCov"> 2 : (e) {</span></a>
<a name="199"><span class="lineNum"> 199 </span><span class="lineCov"> 2 : JSRef.dupRecursive(e);</span></a>
<a name="200"><span class="lineNum"> 200 </span><span class="lineCov"> 4 : if (!completer.isCompleted) completer.completeError(e);</span></a>
<a name="201"><span class="lineNum"> 201 </span> : },</a>
<a name="202"><span class="lineNum"> 202 </span> : ], jsPromise);</a>
<a name="203"><span class="lineNum"> 203 </span><span class="lineCov"> 3 : jsPromise.free();</span></a>
<a name="204"><span class="lineNum"> 204 </span><span class="lineCov"> 3 : promiseThen.free();</span></a>
<a name="205"><span class="lineNum"> 205 </span><span class="lineCov"> 9 : final isException = jsIsException(jsRet) != 0;</span></a>
<a name="206"><span class="lineNum"> 206 </span><span class="lineCov"> 3 : jsFreeValue(ctx, jsRet);</span></a>
<a name="207"><span class="lineNum"> 207 </span><span class="lineNoCov"> 0 : if (isException) throw _parseJSException(ctx);</span></a>
<a name="208"><span class="lineNum"> 208 </span><span class="lineCov"> 3 : return completer.future;</span></a>
<a name="209"><span class="lineNum"> 209 </span><span class="lineCov"> 6 : } else if (jsIsArray(ctx, val) != 0) {</span></a>
<a name="210"><span class="lineNum"> 210 </span><span class="lineCov"> 2 : final jslength = _jsGetPropertyValue(ctx, val, 'length');</span></a>
<a name="211"><span class="lineNum"> 211 </span><span class="lineCov"> 4 : final length = jsToInt64(ctx, jslength);</span></a>
<a name="212"><span class="lineNum"> 212 </span><span class="lineCov"> 2 : final ret = [];</span></a>
<a name="213"><span class="lineNum"> 213 </span><span class="lineCov"> 2 : cache[valptr] = ret;</span></a>
<a name="214"><span class="lineNum"> 214 </span><span class="lineCov"> 4 : for (var i = 0; i &lt; length; ++i) {</span></a>
<a name="215"><span class="lineNum"> 215 </span><span class="lineCov"> 2 : final jsProp = _jsGetPropertyValue(ctx, val, i);</span></a>
<a name="216"><span class="lineNum"> 216 </span><span class="lineCov"> 4 : ret.add(_jsToDart(ctx, jsProp, cache: cache));</span></a>
<a name="217"><span class="lineNum"> 217 </span><span class="lineCov"> 2 : jsFreeValue(ctx, jsProp);</span></a>
<a name="218"><span class="lineNum"> 218 </span> : }</a>
<a name="219"><span class="lineNum"> 219 </span> : return ret;</a>
<a name="220"><span class="lineNum"> 220 </span> : } else {</a>
<a name="221"><span class="lineNum"> 221 </span> : final ptab = malloc&lt;Pointer&lt;JSPropertyEnum&gt;&gt;();</a>
<a name="222"><span class="lineNum"> 222 </span> : final plen = malloc&lt;Uint32&gt;();</a>
<a name="223"><span class="lineNum"> 223 </span><span class="lineCov"> 8 : if (jsGetOwnPropertyNames(ctx, ptab, plen, val, -1) != 0) {</span></a>
<a name="224"><span class="lineNum"> 224 </span><span class="lineNoCov"> 0 : malloc.free(plen);</span></a>
<a name="225"><span class="lineNum"> 225 </span><span class="lineNoCov"> 0 : malloc.free(ptab);</span></a>
<a name="226"><span class="lineNum"> 226 </span> : return null;</a>
<a name="227"><span class="lineNum"> 227 </span> : }</a>
<a name="228"><span class="lineNum"> 228 </span><span class="lineCov"> 2 : final len = plen.value;</span></a>
<a name="229"><span class="lineNum"> 229 </span><span class="lineCov"> 2 : malloc.free(plen);</span></a>
<a name="230"><span class="lineNum"> 230 </span><span class="lineCov"> 2 : final ret = Map();</span></a>
<a name="231"><span class="lineNum"> 231 </span><span class="lineCov"> 2 : cache[valptr] = ret;</span></a>
<a name="232"><span class="lineNum"> 232 </span><span class="lineCov"> 4 : for (var i = 0; i &lt; len; ++i) {</span></a>
<a name="233"><span class="lineNum"> 233 </span><span class="lineCov"> 6 : final jsAtom = jsPropertyEnumGetAtom(ptab.value, i);</span></a>
<a name="234"><span class="lineNum"> 234 </span><span class="lineCov"> 4 : final jsAtomValue = jsAtomToValue(ctx, jsAtom);</span></a>
<a name="235"><span class="lineNum"> 235 </span><span class="lineCov"> 4 : final jsProp = jsGetProperty(ctx, val, jsAtom);</span></a>
<a name="236"><span class="lineNum"> 236 </span><span class="lineCov"> 4 : ret[_jsToDart(ctx, jsAtomValue, cache: cache)] =</span></a>
<a name="237"><span class="lineNum"> 237 </span><span class="lineCov"> 2 : _jsToDart(ctx, jsProp, cache: cache);</span></a>
<a name="238"><span class="lineNum"> 238 </span><span class="lineCov"> 2 : jsFreeValue(ctx, jsAtomValue);</span></a>
<a name="239"><span class="lineNum"> 239 </span><span class="lineCov"> 2 : jsFreeValue(ctx, jsProp);</span></a>
<a name="240"><span class="lineNum"> 240 </span><span class="lineCov"> 4 : jsFreeAtom(ctx, jsAtom);</span></a>
<a name="241"><span class="lineNum"> 241 </span> : }</a>
<a name="242"><span class="lineNum"> 242 </span><span class="lineCov"> 6 : jsFree(ctx, ptab.value);</span></a>
<a name="243"><span class="lineNum"> 243 </span><span class="lineCov"> 2 : malloc.free(ptab);</span></a>
<a name="244"><span class="lineNum"> 244 </span> : return ret;</a>
<a name="245"><span class="lineNum"> 245 </span> : }</a>
<a name="246"><span class="lineNum"> 246 </span> : default:</a>
<a name="247"><span class="lineNum"> 247 </span> : }</a>
<a name="248"><span class="lineNum"> 248 </span> : return null;</a>
<a name="249"><span class="lineNum"> 249 </span> : }</a>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
</body>
</html>

BIN
coverage/updown.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

View File

@@ -7,27 +7,11 @@ mkdir ./cxx
sed 's/\#include \"quickjs\/quickjs.h\"/\#include \"quickjs.h\"/g' ../cxx/ffi.h > ./cxx/ffi.h
cp ../cxx/ffi.cpp ./cxx/ffi.cpp
cp ../cxx/quickjs/*.h ./cxx/
cp ../cxx/quickjs/*.c ./cxx/
quickjs_version=$(cat ../cxx/quickjs/VERSION)
sed '1i\
\#define CONFIG_VERSION \"'$quickjs_version'\"\
' ../cxx/quickjs/quickjs.c > ./cxx/quickjs.c
quickjs_src=(
"list.h"
"cutils.c"
"libregexp.c"
"libunicode.c"
"cutils.h"
"libregexp.h"
"libunicode.h"
"quickjs.h"
"quickjs-atom.h"
"quickjs-opcode.h"
"libregexp-opcode.h"
"libunicode-table.h"
)
for item in ${quickjs_src[*]}
do
cp ../cxx/quickjs/$item ./cxx/$item
done

View File

@@ -5,58 +5,58 @@ packages:
dependency: transitive
description:
name: async
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.5.0"
version: "2.8.2"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
version: "1.2.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "1.3.1"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
version: "1.1.2"
flutter:
dependency: "direct main"
description: flutter
@@ -66,7 +66,7 @@ packages:
dependency: "direct main"
description:
name: flutter_highlight
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.0"
flutter_qjs:
@@ -85,28 +85,28 @@ packages:
dependency: "direct main"
description:
name: highlight
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.0"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.10"
version: "0.12.11"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
version: "1.7.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
sky_engine:
@@ -118,58 +118,58 @@ packages:
dependency: transitive
description:
name: source_span
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.10.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.19"
version: "0.4.3"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
version: "2.1.1"
sdks:
dart: ">=2.12.0-259.9.beta <3.0.0"
dart: ">=2.14.0 <3.0.0"
flutter: ">=1.20.0"

View File

@@ -2,6 +2,8 @@
// Generated file. Do not edit.
//
// clang-format off
#include "generated_plugin_registrant.h"
#include <flutter_qjs/flutter_qjs_plugin.h>

View File

@@ -2,6 +2,8 @@
// Generated file. Do not edit.
//
// clang-format off
#ifndef GENERATED_PLUGIN_REGISTRANT_
#define GENERATED_PLUGIN_REGISTRANT_

View File

@@ -5,58 +5,58 @@ packages:
dependency: transitive
description:
name: async
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.5.0"
version: "2.8.2"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
version: "1.2.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "1.3.1"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
ffi:
dependency: "direct main"
description:
name: ffi
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
version: "1.1.2"
flutter:
dependency: "direct main"
description: flutter
@@ -71,21 +71,21 @@ packages:
dependency: transitive
description:
name: matcher
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.10"
version: "0.12.11"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
version: "1.7.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
sky_engine:
@@ -97,58 +97,58 @@ packages:
dependency: transitive
description:
name: source_span
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.10.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.19"
version: "0.4.3"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
sdks:
dart: ">=2.12.0-259.9.beta <3.0.0"
dart: ">=2.12.0 <3.0.0"
flutter: ">=1.20.0"