mirror of
https://github.com/wgh136/flutter_qjs.git
synced 2025-09-27 13:27:24 +00:00
fix crash when encoding Error object
This commit is contained in:
@@ -6,6 +6,11 @@
|
|||||||
* @LastEditTime: 2020-12-02 11:36:40
|
* @LastEditTime: 2020-12-02 11:36:40
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
## 0.3.7
|
||||||
|
|
||||||
|
* fixed crash when encoding Error object
|
||||||
|
* updated to latest quickjs
|
||||||
|
|
||||||
## 0.3.6
|
## 0.3.6
|
||||||
|
|
||||||
* upgrade ffi to 1.0.0.
|
* upgrade ffi to 1.0.0.
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 141 B |
Binary file not shown.
Before Width: | Height: | Size: 141 B |
@@ -1,519 +0,0 @@
|
|||||||
/* 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;
|
|
||||||
}
|
|
Binary file not shown.
Before Width: | Height: | Size: 167 B |
@@ -1,93 +0,0 @@
|
|||||||
<!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 %</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>
|
|
@@ -1,93 +0,0 @@
|
|||||||
<!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 %</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>
|
|
@@ -1,93 +0,0 @@
|
|||||||
<!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 %</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>
|
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Before Width: | Height: | Size: 141 B |
Binary file not shown.
Before Width: | Height: | Size: 141 B |
@@ -1,72 +0,0 @@
|
|||||||
<!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>
|
|
@@ -1,72 +0,0 @@
|
|||||||
<!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>
|
|
@@ -1,248 +0,0 @@
|
|||||||
<!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<JSRuntime>? _rt;</a>
|
|
||||||
<a name="19"><span class="lineNum"> 19 </span> : Pointer<JSContext>? _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<Pointer<JSValue>>();</span></a>
|
|
||||||
<a name="46"><span class="lineNum"> 46 </span><span class="lineCov"> 9 : final argc = pdata.elementAt(1).value.cast<Int32>().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 < 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<Utf8>().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<JSRuntime>();</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 > 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 <= 0) {</span></a>
|
|
||||||
<a name="137"><span class="lineNum"> 137 </span><span class="lineCov"> 3 : if (err < 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<void> 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 ?? '<eval>',</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>
|
|
@@ -1,72 +0,0 @@
|
|||||||
<!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>
|
|
@@ -1,72 +0,0 @@
|
|||||||
<!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
@@ -1,133 +0,0 @@
|
|||||||
<!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 %</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 %</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 %</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 %</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 %</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>
|
|
@@ -1,133 +0,0 @@
|
|||||||
<!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 %</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 %</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 %</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 %</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 %</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>
|
|
@@ -1,133 +0,0 @@
|
|||||||
<!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 %</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 %</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 %</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 %</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 %</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>
|
|
@@ -1,72 +0,0 @@
|
|||||||
<!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>
|
|
@@ -1,72 +0,0 @@
|
|||||||
<!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>
|
|
@@ -1,353 +0,0 @@
|
|||||||
<!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<_Decode> _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<dynamic, dynamic>? 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 < 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<dynamic, dynamic>? 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 < 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 && 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<Pointer<Utf8>>();</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<String> 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<SendPort>? _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<SendPort>();</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 && !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<Pointer>.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 && 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<dynamic> 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 && 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>
|
|
@@ -1,72 +0,0 @@
|
|||||||
<!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>
|
|
@@ -1,72 +0,0 @@
|
|||||||
<!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>
|
|
@@ -1,390 +0,0 @@
|
|||||||
<!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<JSContext>? _ctx;</a>
|
|
||||||
<a name="53"><span class="lineNum"> 53 </span><span class="lineCov"> 3 : _DartObject(Pointer<JSContext> 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<JSRuntime> rt, int val) {</span></a>
|
|
||||||
<a name="61"><span class="lineNum"> 61 </span><span class="lineCov"> 18 : return runtimeOpaques[rt]?.getRef((e) => 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 "DartObject(released)";</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() : "$message\n$stack";</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<JSValue>? _val;</a>
|
|
||||||
<a name="121"><span class="lineNum"> 121 </span> : Pointer<JSContext>? _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<JSContext> ctx, Pointer<JSValue> 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 "JSObject(released)";</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<JSContext> ctx, Pointer<JSValue> 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<dynamic> 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<JSValue> _invoke(List<dynamic> 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("InternalError: JSValue released");</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) => _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<IsolateFunction> _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) => 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 && 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 < 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>
|
|
@@ -1,72 +0,0 @@
|
|||||||
<!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>
|
|
@@ -1,72 +0,0 @@
|
|||||||
<!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>
|
|
@@ -1,325 +0,0 @@
|
|||||||
<!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<JSContext> ctx, [Pointer<JSValue>? 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<JSContext> ctx,</a>
|
|
||||||
<a name="24"><span class="lineNum"> 24 </span> : Pointer<JSValue> 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<dynamic, Pointer<JSValue>>? 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<JSValue> _jsGetPropertyValue(</span></a>
|
|
||||||
<a name="43"><span class="lineNum"> 43 </span> : Pointer<JSContext> ctx,</a>
|
|
||||||
<a name="44"><span class="lineNum"> 44 </span> : Pointer<JSValue> obj,</a>
|
|
||||||
<a name="45"><span class="lineNum"> 45 </span> : dynamic key, {</a>
|
|
||||||
<a name="46"><span class="lineNum"> 46 </span> : Map<dynamic, Pointer<JSValue>>? 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<JSValue> _dartToJs(Pointer<JSContext> ctx, dynamic val,</span></a>
|
|
||||||
<a name="57"><span class="lineNum"> 57 </span> : {Map<dynamic, Pointer<JSValue>>? 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, "name", "");</span></a>
|
|
||||||
<a name="64"><span class="lineNum"> 64 </span><span class="lineCov"> 4 : _definePropertyValue(ctx, ret, "message", val.message);</span></a>
|
|
||||||
<a name="65"><span class="lineNum"> 65 </span><span class="lineCov"> 4 : _definePropertyValue(ctx, ret, "stack", 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<Uint8>(sizeOfJSValue * 2).cast<JSValue>();</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<JSValue>.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<Uint8>(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 < 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<dynamic, dynamic> 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<JSContext> ctx, Pointer<JSValue> val,</span></a>
|
|
||||||
<a name="144"><span class="lineNum"> 144 </span> : {Map<int, dynamic>? 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<IntPtr>();</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 < 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<Pointer<JSPropertyEnum>>();</a>
|
|
||||||
<a name="222"><span class="lineNum"> 222 </span> : final plen = malloc<Uint32>();</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 < 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>
|
|
Binary file not shown.
Before Width: | Height: | Size: 117 B |
@@ -8,10 +8,13 @@ sed 's/\#include \"quickjs\/quickjs.h\"/\#include \"quickjs.h\"/g' ../cxx/ffi.h
|
|||||||
cp ../cxx/ffi.cpp ./cxx/ffi.cpp
|
cp ../cxx/ffi.cpp ./cxx/ffi.cpp
|
||||||
|
|
||||||
cp ../cxx/quickjs/*.h ./cxx/
|
cp ../cxx/quickjs/*.h ./cxx/
|
||||||
cp ../cxx/quickjs/*.c ./cxx/
|
cp ../cxx/quickjs/cutils.c ./cxx/
|
||||||
|
cp ../cxx/quickjs/libregexp.c ./cxx/
|
||||||
|
cp ../cxx/quickjs/libunicode.c ./cxx/
|
||||||
|
|
||||||
quickjs_version=$(cat ../cxx/quickjs/VERSION)
|
quickjs_version=$(cat ../cxx/quickjs/VERSION)
|
||||||
|
|
||||||
sed '1i\
|
sed '1i\
|
||||||
\#define CONFIG_VERSION \"'$quickjs_version'\"\
|
\#define CONFIG_VERSION \"'$quickjs_version'\"\
|
||||||
|
\#define DUMP_LEAKS 1\
|
||||||
' ../cxx/quickjs/quickjs.c > ./cxx/quickjs.c
|
' ../cxx/quickjs/quickjs.c > ./cxx/quickjs.c
|
Submodule cxx/quickjs updated: 9ac134fd3f...21a2b256cc
29
example/analysis_options.yaml
Normal file
29
example/analysis_options.yaml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# This file configures the analyzer, which statically analyzes Dart code to
|
||||||
|
# check for errors, warnings, and lints.
|
||||||
|
#
|
||||||
|
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
|
||||||
|
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
|
||||||
|
# invoked from the command line by running `flutter analyze`.
|
||||||
|
|
||||||
|
# The following line activates a set of recommended lints for Flutter apps,
|
||||||
|
# packages, and plugins designed to encourage good coding practices.
|
||||||
|
include: package:flutter_lints/flutter.yaml
|
||||||
|
|
||||||
|
linter:
|
||||||
|
# The lint rules applied to this project can be customized in the
|
||||||
|
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
|
||||||
|
# included above or to enable additional rules. A list of all available lints
|
||||||
|
# and their documentation is published at
|
||||||
|
# https://dart-lang.github.io/linter/lints/index.html.
|
||||||
|
#
|
||||||
|
# Instead of disabling a lint rule for the entire project in the
|
||||||
|
# section below, it can also be suppressed for a single line of code
|
||||||
|
# or a specific dart file by using the `// ignore: name_of_lint` and
|
||||||
|
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
|
||||||
|
# producing the lint.
|
||||||
|
rules:
|
||||||
|
# avoid_print: false # Uncomment to disable the `avoid_print` rule
|
||||||
|
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
|
||||||
|
|
||||||
|
# Additional information about this file can be found at
|
||||||
|
# https://dart.dev/guides/language/analysis-options
|
2
example/android/.gitignore
vendored
2
example/android/.gitignore
vendored
@@ -9,3 +9,5 @@ GeneratedPluginRegistrant.java
|
|||||||
# Remember to never publicly share your keystore.
|
# Remember to never publicly share your keystore.
|
||||||
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
|
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
|
||||||
key.properties
|
key.properties
|
||||||
|
**/*.keystore
|
||||||
|
**/*.jks
|
||||||
|
@@ -26,21 +26,27 @@ apply plugin: 'kotlin-android'
|
|||||||
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 29
|
compileSdkVersion flutter.compileSdkVersion
|
||||||
|
ndkVersion flutter.ndkVersion
|
||||||
|
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility JavaVersion.VERSION_1_8
|
||||||
|
targetCompatibility JavaVersion.VERSION_1_8
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = '1.8'
|
||||||
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
main.java.srcDirs += 'src/main/kotlin'
|
main.java.srcDirs += 'src/main/kotlin'
|
||||||
}
|
}
|
||||||
|
|
||||||
lintOptions {
|
|
||||||
disable 'InvalidPackage'
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||||
applicationId "soko.ekibun.flutter_qjs_example"
|
applicationId "soko.ekibun.flutter_qjs_example"
|
||||||
minSdkVersion 16
|
minSdkVersion flutter.minSdkVersion
|
||||||
targetSdkVersion 29
|
targetSdkVersion flutter.targetSdkVersion
|
||||||
versionCode flutterVersionCode.toInteger()
|
versionCode flutterVersionCode.toInteger()
|
||||||
versionName flutterVersionName
|
versionName flutterVersionName
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="soko.ekibun.flutter_qjs_example">
|
package="soko.ekibun.flutter_qjs_example">
|
||||||
<!-- Flutter needs it to communicate with the running application
|
<!-- The INTERNET permission is required for development. Specifically,
|
||||||
|
the Flutter tool needs it to communicate with the running application
|
||||||
to allow setting breakpoints, to provide hot reload, etc.
|
to allow setting breakpoints, to provide hot reload, etc.
|
||||||
-->
|
-->
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
|
@@ -2,9 +2,11 @@
|
|||||||
package="soko.ekibun.flutter_qjs_example">
|
package="soko.ekibun.flutter_qjs_example">
|
||||||
<application
|
<application
|
||||||
android:label="flutter_qjs_example"
|
android:label="flutter_qjs_example"
|
||||||
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher">
|
android:icon="@mipmap/ic_launcher">
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
|
android:exported="true"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop"
|
||||||
android:theme="@style/LaunchTheme"
|
android:theme="@style/LaunchTheme"
|
||||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||||
@@ -18,15 +20,6 @@
|
|||||||
android:name="io.flutter.embedding.android.NormalTheme"
|
android:name="io.flutter.embedding.android.NormalTheme"
|
||||||
android:resource="@style/NormalTheme"
|
android:resource="@style/NormalTheme"
|
||||||
/>
|
/>
|
||||||
<!-- Displays an Android View that continues showing the launch screen
|
|
||||||
Drawable until Flutter paints its first frame, then this splash
|
|
||||||
screen fades out. A splash screen is useful to avoid any visual
|
|
||||||
gap between the end of Android's launch screen and the painting of
|
|
||||||
Flutter's first frame. -->
|
|
||||||
<meta-data
|
|
||||||
android:name="io.flutter.embedding.android.SplashScreenDrawable"
|
|
||||||
android:resource="@drawable/launch_background"
|
|
||||||
/>
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN"/>
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Modify this file to customize your launch splash screen -->
|
<!-- Modify this file to customize your launch splash screen -->
|
||||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:drawable="?android:colorBackground" />
|
<item android:drawable="@android:color/white" />
|
||||||
|
|
||||||
<!-- You can insert your own image assets here -->
|
<!-- You can insert your own image assets here -->
|
||||||
<!-- <item>
|
<!-- <item>
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
|
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
|
||||||
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||||
<!-- Show a splash screen on the activity. Automatically removed when
|
<!-- Show a splash screen on the activity. Automatically removed when
|
||||||
Flutter draws its first frame -->
|
the Flutter engine draws its first frame -->
|
||||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||||
</style>
|
</style>
|
||||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
||||||
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||||
<!-- Show a splash screen on the activity. Automatically removed when
|
<!-- Show a splash screen on the activity. Automatically removed when
|
||||||
Flutter draws its first frame -->
|
the Flutter engine draws its first frame -->
|
||||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||||
</style>
|
</style>
|
||||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="soko.ekibun.flutter_qjs_example">
|
package="soko.ekibun.flutter_qjs_example">
|
||||||
<!-- Flutter needs it to communicate with the running application
|
<!-- The INTERNET permission is required for development. Specifically,
|
||||||
|
the Flutter tool needs it to communicate with the running application
|
||||||
to allow setting breakpoints, to provide hot reload, etc.
|
to allow setting breakpoints, to provide hot reload, etc.
|
||||||
-->
|
-->
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.3.50'
|
ext.kotlin_version = '1.6.10'
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
jcenter()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.5.0'
|
classpath 'com.android.tools.build:gradle:4.1.0'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,7 @@ buildscript {
|
|||||||
allprojects {
|
allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
jcenter()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
org.gradle.jvmargs=-Xmx1536M
|
org.gradle.jvmargs=-Xmx1536M
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
android.enableR8=true
|
|
||||||
|
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
|
|||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
|
||||||
|
@@ -75,7 +75,7 @@ packages:
|
|||||||
path: ".."
|
path: ".."
|
||||||
relative: true
|
relative: true
|
||||||
source: path
|
source: path
|
||||||
version: "0.3.6"
|
version: "0.3.7"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -95,6 +95,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.12.11"
|
version: "0.12.11"
|
||||||
|
material_color_utilities:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: material_color_utilities
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.4"
|
||||||
meta:
|
meta:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -108,7 +115,7 @@ packages:
|
|||||||
name: path
|
name: path
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.0"
|
version: "1.8.1"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -120,7 +127,7 @@ packages:
|
|||||||
name: source_span
|
name: source_span
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.1"
|
version: "1.8.2"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -155,7 +162,7 @@ packages:
|
|||||||
name: test_api
|
name: test_api
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.3"
|
version: "0.4.9"
|
||||||
typed_data:
|
typed_data:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -169,7 +176,7 @@ packages:
|
|||||||
name: vector_math
|
name: vector_math
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.2"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=2.14.0 <3.0.0"
|
dart: ">=2.14.0 <3.0.0"
|
||||||
flutter: ">=1.20.0"
|
flutter: ">=1.20.0"
|
||||||
|
@@ -1,13 +1,16 @@
|
|||||||
cmake_minimum_required(VERSION 3.15)
|
# Project-level configuration.
|
||||||
|
cmake_minimum_required(VERSION 3.14)
|
||||||
project(example LANGUAGES CXX)
|
project(example LANGUAGES CXX)
|
||||||
|
|
||||||
|
# The name of the executable created for the application. Change this to change
|
||||||
|
# the on-disk name of your application.
|
||||||
set(BINARY_NAME "example")
|
set(BINARY_NAME "example")
|
||||||
|
|
||||||
|
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
|
||||||
|
# versions of CMake.
|
||||||
cmake_policy(SET CMP0063 NEW)
|
cmake_policy(SET CMP0063 NEW)
|
||||||
|
|
||||||
set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
|
# Define build configuration option.
|
||||||
|
|
||||||
# Configure build options.
|
|
||||||
get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
||||||
if(IS_MULTICONFIG)
|
if(IS_MULTICONFIG)
|
||||||
set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release"
|
set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release"
|
||||||
@@ -20,7 +23,7 @@ else()
|
|||||||
"Debug" "Profile" "Release")
|
"Debug" "Profile" "Release")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
# Define settings for the Profile build mode.
|
||||||
set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
|
set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
|
set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
|
||||||
set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}")
|
set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}")
|
||||||
@@ -30,6 +33,10 @@ set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}")
|
|||||||
add_definitions(-DUNICODE -D_UNICODE)
|
add_definitions(-DUNICODE -D_UNICODE)
|
||||||
|
|
||||||
# Compilation settings that should be applied to most targets.
|
# Compilation settings that should be applied to most targets.
|
||||||
|
#
|
||||||
|
# Be cautious about adding new options here, as plugins use this function by
|
||||||
|
# default. In most cases, you should add new options to specific targets instead
|
||||||
|
# of modifying this function.
|
||||||
function(APPLY_STANDARD_SETTINGS TARGET)
|
function(APPLY_STANDARD_SETTINGS TARGET)
|
||||||
target_compile_features(${TARGET} PUBLIC cxx_std_17)
|
target_compile_features(${TARGET} PUBLIC cxx_std_17)
|
||||||
target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100")
|
target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100")
|
||||||
@@ -38,12 +45,11 @@ function(APPLY_STANDARD_SETTINGS TARGET)
|
|||||||
target_compile_definitions(${TARGET} PRIVATE "$<$<CONFIG:Debug>:_DEBUG>")
|
target_compile_definitions(${TARGET} PRIVATE "$<$<CONFIG:Debug>:_DEBUG>")
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
|
|
||||||
|
|
||||||
# Flutter library and tool build rules.
|
# Flutter library and tool build rules.
|
||||||
|
set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
|
||||||
add_subdirectory(${FLUTTER_MANAGED_DIR})
|
add_subdirectory(${FLUTTER_MANAGED_DIR})
|
||||||
|
|
||||||
# Application build
|
# Application build; see runner/CMakeLists.txt.
|
||||||
add_subdirectory("runner")
|
add_subdirectory("runner")
|
||||||
|
|
||||||
# Generated plugin build rules, which manage building the plugins and adding
|
# Generated plugin build rules, which manage building the plugins and adding
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
cmake_minimum_required(VERSION 3.15)
|
# This file controls Flutter-level build steps. It should not be edited.
|
||||||
|
cmake_minimum_required(VERSION 3.14)
|
||||||
|
|
||||||
set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
|
set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
|
||||||
|
|
||||||
@@ -23,6 +24,7 @@ list(APPEND FLUTTER_LIBRARY_HEADERS
|
|||||||
"flutter_windows.h"
|
"flutter_windows.h"
|
||||||
"flutter_messenger.h"
|
"flutter_messenger.h"
|
||||||
"flutter_plugin_registrar.h"
|
"flutter_plugin_registrar.h"
|
||||||
|
"flutter_texture_registrar.h"
|
||||||
)
|
)
|
||||||
list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/")
|
list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/")
|
||||||
add_library(flutter INTERFACE)
|
add_library(flutter INTERFACE)
|
||||||
|
@@ -6,6 +6,9 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
|||||||
flutter_qjs
|
flutter_qjs
|
||||||
)
|
)
|
||||||
|
|
||||||
|
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||||
|
)
|
||||||
|
|
||||||
set(PLUGIN_BUNDLED_LIBRARIES)
|
set(PLUGIN_BUNDLED_LIBRARIES)
|
||||||
|
|
||||||
foreach(plugin ${FLUTTER_PLUGIN_LIST})
|
foreach(plugin ${FLUTTER_PLUGIN_LIST})
|
||||||
@@ -14,3 +17,8 @@ foreach(plugin ${FLUTTER_PLUGIN_LIST})
|
|||||||
list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>)
|
list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>)
|
||||||
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
|
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
|
||||||
endforeach(plugin)
|
endforeach(plugin)
|
||||||
|
|
||||||
|
foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
|
||||||
|
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin})
|
||||||
|
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
|
||||||
|
endforeach(ffi_plugin)
|
||||||
|
@@ -1,18 +1,32 @@
|
|||||||
cmake_minimum_required(VERSION 3.15)
|
cmake_minimum_required(VERSION 3.14)
|
||||||
project(runner LANGUAGES CXX)
|
project(runner LANGUAGES CXX)
|
||||||
|
|
||||||
|
# Define the application target. To change its name, change BINARY_NAME in the
|
||||||
|
# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer
|
||||||
|
# work.
|
||||||
|
#
|
||||||
|
# Any new source files that you add to the application should be added here.
|
||||||
add_executable(${BINARY_NAME} WIN32
|
add_executable(${BINARY_NAME} WIN32
|
||||||
"flutter_window.cpp"
|
"flutter_window.cpp"
|
||||||
"main.cpp"
|
"main.cpp"
|
||||||
"run_loop.cpp"
|
|
||||||
"utils.cpp"
|
"utils.cpp"
|
||||||
"win32_window.cpp"
|
"win32_window.cpp"
|
||||||
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
|
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
|
||||||
"Runner.rc"
|
"Runner.rc"
|
||||||
"runner.exe.manifest"
|
"runner.exe.manifest"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Apply the standard set of build settings. This can be removed for applications
|
||||||
|
# that need different build settings.
|
||||||
apply_standard_settings(${BINARY_NAME})
|
apply_standard_settings(${BINARY_NAME})
|
||||||
|
|
||||||
|
# Disable Windows macros that collide with C++ standard library functions.
|
||||||
target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX")
|
target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX")
|
||||||
|
|
||||||
|
# Add dependency libraries and include directories. Add any application-specific
|
||||||
|
# dependencies here.
|
||||||
target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
|
target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
|
||||||
target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
|
target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
|
||||||
|
|
||||||
|
# Run the Flutter tool portions of the build. This must not be removed.
|
||||||
add_dependencies(${BINARY_NAME} flutter_assemble)
|
add_dependencies(${BINARY_NAME} flutter_assemble)
|
||||||
|
@@ -89,11 +89,11 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
BLOCK "040904e4"
|
BLOCK "040904e4"
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "soko.ekibun" "\0"
|
VALUE "CompanyName", "com.example" "\0"
|
||||||
VALUE "FileDescription", "A new Flutter project." "\0"
|
VALUE "FileDescription", "example" "\0"
|
||||||
VALUE "FileVersion", VERSION_AS_STRING "\0"
|
VALUE "FileVersion", VERSION_AS_STRING "\0"
|
||||||
VALUE "InternalName", "example" "\0"
|
VALUE "InternalName", "example" "\0"
|
||||||
VALUE "LegalCopyright", "Copyright (C) 2020 soko.ekibun. All rights reserved." "\0"
|
VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0"
|
||||||
VALUE "OriginalFilename", "example.exe" "\0"
|
VALUE "OriginalFilename", "example.exe" "\0"
|
||||||
VALUE "ProductName", "example" "\0"
|
VALUE "ProductName", "example" "\0"
|
||||||
VALUE "ProductVersion", VERSION_AS_STRING "\0"
|
VALUE "ProductVersion", VERSION_AS_STRING "\0"
|
||||||
|
@@ -4,9 +4,8 @@
|
|||||||
|
|
||||||
#include "flutter/generated_plugin_registrant.h"
|
#include "flutter/generated_plugin_registrant.h"
|
||||||
|
|
||||||
FlutterWindow::FlutterWindow(RunLoop* run_loop,
|
FlutterWindow::FlutterWindow(const flutter::DartProject& project)
|
||||||
const flutter::DartProject& project)
|
: project_(project) {}
|
||||||
: run_loop_(run_loop), project_(project) {}
|
|
||||||
|
|
||||||
FlutterWindow::~FlutterWindow() {}
|
FlutterWindow::~FlutterWindow() {}
|
||||||
|
|
||||||
@@ -26,14 +25,12 @@ bool FlutterWindow::OnCreate() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
RegisterPlugins(flutter_controller_->engine());
|
RegisterPlugins(flutter_controller_->engine());
|
||||||
run_loop_->RegisterFlutterInstance(flutter_controller_->engine());
|
|
||||||
SetChildContent(flutter_controller_->view()->GetNativeWindow());
|
SetChildContent(flutter_controller_->view()->GetNativeWindow());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlutterWindow::OnDestroy() {
|
void FlutterWindow::OnDestroy() {
|
||||||
if (flutter_controller_) {
|
if (flutter_controller_) {
|
||||||
run_loop_->UnregisterFlutterInstance(flutter_controller_->engine());
|
|
||||||
flutter_controller_ = nullptr;
|
flutter_controller_ = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,7 +41,7 @@ LRESULT
|
|||||||
FlutterWindow::MessageHandler(HWND hwnd, UINT const message,
|
FlutterWindow::MessageHandler(HWND hwnd, UINT const message,
|
||||||
WPARAM const wparam,
|
WPARAM const wparam,
|
||||||
LPARAM const lparam) noexcept {
|
LPARAM const lparam) noexcept {
|
||||||
// Give Flutter, including plugins, an opporutunity to handle window messages.
|
// Give Flutter, including plugins, an opportunity to handle window messages.
|
||||||
if (flutter_controller_) {
|
if (flutter_controller_) {
|
||||||
std::optional<LRESULT> result =
|
std::optional<LRESULT> result =
|
||||||
flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam,
|
flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam,
|
||||||
|
@@ -6,16 +6,13 @@
|
|||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include "run_loop.h"
|
|
||||||
#include "win32_window.h"
|
#include "win32_window.h"
|
||||||
|
|
||||||
// A window that does nothing but host a Flutter view.
|
// A window that does nothing but host a Flutter view.
|
||||||
class FlutterWindow : public Win32Window {
|
class FlutterWindow : public Win32Window {
|
||||||
public:
|
public:
|
||||||
// Creates a new FlutterWindow driven by the |run_loop|, hosting a
|
// Creates a new FlutterWindow hosting a Flutter view running |project|.
|
||||||
// Flutter view running |project|.
|
explicit FlutterWindow(const flutter::DartProject& project);
|
||||||
explicit FlutterWindow(RunLoop* run_loop,
|
|
||||||
const flutter::DartProject& project);
|
|
||||||
virtual ~FlutterWindow();
|
virtual ~FlutterWindow();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -26,9 +23,6 @@ class FlutterWindow : public Win32Window {
|
|||||||
LPARAM const lparam) noexcept override;
|
LPARAM const lparam) noexcept override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// The run loop driving events for this window.
|
|
||||||
RunLoop* run_loop_;
|
|
||||||
|
|
||||||
// The project to run.
|
// The project to run.
|
||||||
flutter::DartProject project_;
|
flutter::DartProject project_;
|
||||||
|
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
#include "flutter_window.h"
|
#include "flutter_window.h"
|
||||||
#include "run_loop.h"
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
||||||
@@ -18,10 +17,14 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
|||||||
// plugins.
|
// plugins.
|
||||||
::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
|
::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
|
||||||
|
|
||||||
RunLoop run_loop;
|
|
||||||
|
|
||||||
flutter::DartProject project(L"data");
|
flutter::DartProject project(L"data");
|
||||||
FlutterWindow window(&run_loop, project);
|
|
||||||
|
std::vector<std::string> command_line_arguments =
|
||||||
|
GetCommandLineArguments();
|
||||||
|
|
||||||
|
project.set_dart_entrypoint_arguments(std::move(command_line_arguments));
|
||||||
|
|
||||||
|
FlutterWindow window(project);
|
||||||
Win32Window::Point origin(10, 10);
|
Win32Window::Point origin(10, 10);
|
||||||
Win32Window::Size size(1280, 720);
|
Win32Window::Size size(1280, 720);
|
||||||
if (!window.CreateAndShow(L"example", origin, size)) {
|
if (!window.CreateAndShow(L"example", origin, size)) {
|
||||||
@@ -29,7 +32,11 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
|||||||
}
|
}
|
||||||
window.SetQuitOnClose(true);
|
window.SetQuitOnClose(true);
|
||||||
|
|
||||||
run_loop.Run();
|
::MSG msg;
|
||||||
|
while (::GetMessage(&msg, nullptr, 0, 0)) {
|
||||||
|
::TranslateMessage(&msg);
|
||||||
|
::DispatchMessage(&msg);
|
||||||
|
}
|
||||||
|
|
||||||
::CoUninitialize();
|
::CoUninitialize();
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
@@ -1,66 +0,0 @@
|
|||||||
#include "run_loop.h"
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
RunLoop::RunLoop() {}
|
|
||||||
|
|
||||||
RunLoop::~RunLoop() {}
|
|
||||||
|
|
||||||
void RunLoop::Run() {
|
|
||||||
bool keep_running = true;
|
|
||||||
TimePoint next_flutter_event_time = TimePoint::clock::now();
|
|
||||||
while (keep_running) {
|
|
||||||
std::chrono::nanoseconds wait_duration =
|
|
||||||
std::max(std::chrono::nanoseconds(0),
|
|
||||||
next_flutter_event_time - TimePoint::clock::now());
|
|
||||||
::MsgWaitForMultipleObjects(
|
|
||||||
0, nullptr, FALSE, static_cast<DWORD>(wait_duration.count() / 1000),
|
|
||||||
QS_ALLINPUT);
|
|
||||||
bool processed_events = false;
|
|
||||||
MSG message;
|
|
||||||
// All pending Windows messages must be processed; MsgWaitForMultipleObjects
|
|
||||||
// won't return again for items left in the queue after PeekMessage.
|
|
||||||
while (::PeekMessage(&message, nullptr, 0, 0, PM_REMOVE)) {
|
|
||||||
processed_events = true;
|
|
||||||
if (message.message == WM_QUIT) {
|
|
||||||
keep_running = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
::TranslateMessage(&message);
|
|
||||||
::DispatchMessage(&message);
|
|
||||||
// Allow Flutter to process messages each time a Windows message is
|
|
||||||
// processed, to prevent starvation.
|
|
||||||
next_flutter_event_time =
|
|
||||||
std::min(next_flutter_event_time, ProcessFlutterMessages());
|
|
||||||
}
|
|
||||||
// If the PeekMessage loop didn't run, process Flutter messages.
|
|
||||||
if (!processed_events) {
|
|
||||||
next_flutter_event_time =
|
|
||||||
std::min(next_flutter_event_time, ProcessFlutterMessages());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void RunLoop::RegisterFlutterInstance(
|
|
||||||
flutter::FlutterEngine* flutter_instance) {
|
|
||||||
flutter_instances_.insert(flutter_instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
void RunLoop::UnregisterFlutterInstance(
|
|
||||||
flutter::FlutterEngine* flutter_instance) {
|
|
||||||
flutter_instances_.erase(flutter_instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
RunLoop::TimePoint RunLoop::ProcessFlutterMessages() {
|
|
||||||
TimePoint next_event_time = TimePoint::max();
|
|
||||||
for (auto instance : flutter_instances_) {
|
|
||||||
std::chrono::nanoseconds wait_duration = instance->ProcessMessages();
|
|
||||||
if (wait_duration != std::chrono::nanoseconds::max()) {
|
|
||||||
next_event_time =
|
|
||||||
std::min(next_event_time, TimePoint::clock::now() + wait_duration);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return next_event_time;
|
|
||||||
}
|
|
@@ -1,40 +0,0 @@
|
|||||||
#ifndef RUNNER_RUN_LOOP_H_
|
|
||||||
#define RUNNER_RUN_LOOP_H_
|
|
||||||
|
|
||||||
#include <flutter/flutter_engine.h>
|
|
||||||
|
|
||||||
#include <chrono>
|
|
||||||
#include <set>
|
|
||||||
|
|
||||||
// A runloop that will service events for Flutter instances as well
|
|
||||||
// as native messages.
|
|
||||||
class RunLoop {
|
|
||||||
public:
|
|
||||||
RunLoop();
|
|
||||||
~RunLoop();
|
|
||||||
|
|
||||||
// Prevent copying
|
|
||||||
RunLoop(RunLoop const&) = delete;
|
|
||||||
RunLoop& operator=(RunLoop const&) = delete;
|
|
||||||
|
|
||||||
// Runs the run loop until the application quits.
|
|
||||||
void Run();
|
|
||||||
|
|
||||||
// Registers the given Flutter instance for event servicing.
|
|
||||||
void RegisterFlutterInstance(
|
|
||||||
flutter::FlutterEngine* flutter_instance);
|
|
||||||
|
|
||||||
// Unregisters the given Flutter instance from event servicing.
|
|
||||||
void UnregisterFlutterInstance(
|
|
||||||
flutter::FlutterEngine* flutter_instance);
|
|
||||||
|
|
||||||
private:
|
|
||||||
using TimePoint = std::chrono::steady_clock::time_point;
|
|
||||||
|
|
||||||
// Processes all currently pending messages for registered Flutter instances.
|
|
||||||
TimePoint ProcessFlutterMessages();
|
|
||||||
|
|
||||||
std::set<flutter::FlutterEngine*> flutter_instances_;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // RUNNER_RUN_LOOP_H_
|
|
@@ -20,3 +20,45 @@ void CreateAndAttachConsole() {
|
|||||||
FlutterDesktopResyncOutputStreams();
|
FlutterDesktopResyncOutputStreams();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> GetCommandLineArguments() {
|
||||||
|
// Convert the UTF-16 command line arguments to UTF-8 for the Engine to use.
|
||||||
|
int argc;
|
||||||
|
wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc);
|
||||||
|
if (argv == nullptr) {
|
||||||
|
return std::vector<std::string>();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> command_line_arguments;
|
||||||
|
|
||||||
|
// Skip the first argument as it's the binary name.
|
||||||
|
for (int i = 1; i < argc; i++) {
|
||||||
|
command_line_arguments.push_back(Utf8FromUtf16(argv[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
::LocalFree(argv);
|
||||||
|
|
||||||
|
return command_line_arguments;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Utf8FromUtf16(const wchar_t* utf16_string) {
|
||||||
|
if (utf16_string == nullptr) {
|
||||||
|
return std::string();
|
||||||
|
}
|
||||||
|
int target_length = ::WideCharToMultiByte(
|
||||||
|
CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
|
||||||
|
-1, nullptr, 0, nullptr, nullptr);
|
||||||
|
if (target_length == 0) {
|
||||||
|
return std::string();
|
||||||
|
}
|
||||||
|
std::string utf8_string;
|
||||||
|
utf8_string.resize(target_length);
|
||||||
|
int converted_length = ::WideCharToMultiByte(
|
||||||
|
CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
|
||||||
|
-1, utf8_string.data(),
|
||||||
|
target_length, nullptr, nullptr);
|
||||||
|
if (converted_length == 0) {
|
||||||
|
return std::string();
|
||||||
|
}
|
||||||
|
return utf8_string;
|
||||||
|
}
|
||||||
|
@@ -1,8 +1,19 @@
|
|||||||
#ifndef RUNNER_UTILS_H_
|
#ifndef RUNNER_UTILS_H_
|
||||||
#define RUNNER_UTILS_H_
|
#define RUNNER_UTILS_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
// Creates a console for the process, and redirects stdout and stderr to
|
// Creates a console for the process, and redirects stdout and stderr to
|
||||||
// it for both the runner and the Flutter library.
|
// it for both the runner and the Flutter library.
|
||||||
void CreateAndAttachConsole();
|
void CreateAndAttachConsole();
|
||||||
|
|
||||||
|
// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string
|
||||||
|
// encoded in UTF-8. Returns an empty std::string on failure.
|
||||||
|
std::string Utf8FromUtf16(const wchar_t* utf16_string);
|
||||||
|
|
||||||
|
// Gets the command line arguments passed in as a std::vector<std::string>,
|
||||||
|
// encoded in UTF-8. Returns an empty std::vector<std::string> on failure.
|
||||||
|
std::vector<std::string> GetCommandLineArguments();
|
||||||
|
|
||||||
#endif // RUNNER_UTILS_H_
|
#endif // RUNNER_UTILS_H_
|
||||||
|
@@ -173,7 +173,7 @@ Win32Window::MessageHandler(HWND hwnd,
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case WM_SIZE:
|
case WM_SIZE: {
|
||||||
RECT rect = GetClientArea();
|
RECT rect = GetClientArea();
|
||||||
if (child_content_ != nullptr) {
|
if (child_content_ != nullptr) {
|
||||||
// Size and position the child window.
|
// Size and position the child window.
|
||||||
@@ -181,6 +181,7 @@ Win32Window::MessageHandler(HWND hwnd,
|
|||||||
rect.bottom - rect.top, TRUE);
|
rect.bottom - rect.top, TRUE);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
case WM_ACTIVATE:
|
case WM_ACTIVATE:
|
||||||
if (child_content_ != nullptr) {
|
if (child_content_ != nullptr) {
|
||||||
|
@@ -20,6 +20,8 @@ abstract class _IsolateEncodable {
|
|||||||
dynamic _encodeData(dynamic data, {Map<dynamic, dynamic>? cache}) {
|
dynamic _encodeData(dynamic data, {Map<dynamic, dynamic>? cache}) {
|
||||||
if (cache == null) cache = Map();
|
if (cache == null) cache = Map();
|
||||||
if (cache.containsKey(data)) return cache[data];
|
if (cache.containsKey(data)) return cache[data];
|
||||||
|
if (data is Error || data is Exception)
|
||||||
|
return _encodeData(JSError(data), cache: cache);
|
||||||
if (data is _IsolateEncodable) return data._encode();
|
if (data is _IsolateEncodable) return data._encode();
|
||||||
if (data is List) {
|
if (data is List) {
|
||||||
final ret = [];
|
final ret = [];
|
||||||
|
447
pubspec.lock
447
pubspec.lock
@@ -1,6 +1,34 @@
|
|||||||
# Generated by pub
|
# Generated by pub
|
||||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||||
packages:
|
packages:
|
||||||
|
_fe_analyzer_shared:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: _fe_analyzer_shared
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "34.0.0"
|
||||||
|
analyzer:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: analyzer
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.2.0"
|
||||||
|
archive:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: archive
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.11"
|
||||||
|
args:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: args
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.3.0"
|
||||||
async:
|
async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -15,6 +43,27 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.1.0"
|
||||||
|
browser_launcher:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: browser_launcher
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.0"
|
||||||
|
built_collection:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: built_collection
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "5.1.1"
|
||||||
|
built_value:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: built_value
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "8.1.4"
|
||||||
characters:
|
characters:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -29,6 +78,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.1"
|
version: "1.3.1"
|
||||||
|
cli_util:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cli_util
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.3.5"
|
||||||
clock:
|
clock:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -43,6 +99,69 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.15.0"
|
version: "1.15.0"
|
||||||
|
completion:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: completion
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.0"
|
||||||
|
convert:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: convert
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.1"
|
||||||
|
coverage:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: coverage
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.0"
|
||||||
|
crypto:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: crypto
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.1"
|
||||||
|
csslib:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: csslib
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.17.1"
|
||||||
|
dds:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: dds
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.0"
|
||||||
|
dds_service_extensions:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: dds_service_extensions
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.3.0"
|
||||||
|
devtools_shared:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: devtools_shared
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.11.1"
|
||||||
|
dwds:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: dwds
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "12.1.0"
|
||||||
fake_async:
|
fake_async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -57,16 +176,112 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.2"
|
version: "1.1.2"
|
||||||
|
file:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: file
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "6.1.2"
|
||||||
|
fixnum:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: fixnum
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.0"
|
||||||
flutter:
|
flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
flutter_template_images:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_template_images
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "4.0.0"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
flutter_tools:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description: flutter
|
||||||
|
source: sdk
|
||||||
|
version: "0.0.0"
|
||||||
|
frontend_server_client:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: frontend_server_client
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.2"
|
||||||
|
glob:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: glob
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.2"
|
||||||
|
html:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: html
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.15.0"
|
||||||
|
http:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: http
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.13.4"
|
||||||
|
http_multi_server:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: http_multi_server
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.2.0"
|
||||||
|
http_parser:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: http_parser
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "4.0.0"
|
||||||
|
intl:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: intl
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.17.0"
|
||||||
|
io:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: io
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.3"
|
||||||
|
json_rpc_2:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: json_rpc_2
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.1"
|
||||||
|
logging:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: logging
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.2"
|
||||||
matcher:
|
matcher:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -74,6 +289,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.12.11"
|
version: "0.12.11"
|
||||||
|
material_color_utilities:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: material_color_utilities
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.4"
|
||||||
meta:
|
meta:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -81,25 +303,158 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.7.0"
|
version: "1.7.0"
|
||||||
|
mime:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: mime
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
|
multicast_dns:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: multicast_dns
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.3.2"
|
||||||
|
mustache_template:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: mustache_template
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.0"
|
||||||
|
native_stack_traces:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: native_stack_traces
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.4.5"
|
||||||
|
package_config:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_config
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.2"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path
|
name: path
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.0"
|
version: "1.8.1"
|
||||||
|
pedantic:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pedantic
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.11.1"
|
||||||
|
petitparser:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: petitparser
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "4.4.0"
|
||||||
|
platform:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: platform
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.0"
|
||||||
|
pool:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pool
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.5.0"
|
||||||
|
process:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: process
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "4.2.4"
|
||||||
|
pub_semver:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pub_semver
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0"
|
||||||
|
shelf:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shelf
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.4"
|
||||||
|
shelf_packages_handler:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shelf_packages_handler
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.0"
|
||||||
|
shelf_proxy:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shelf_proxy
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
|
shelf_static:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shelf_static
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.0"
|
||||||
|
shelf_web_socket:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shelf_web_socket
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.99"
|
version: "0.0.99"
|
||||||
|
source_map_stack_trace:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: source_map_stack_trace
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0"
|
||||||
|
source_maps:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: source_maps
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.10.10"
|
||||||
source_span:
|
source_span:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: source_span
|
name: source_span
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.1"
|
version: "1.8.2"
|
||||||
|
sse:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: sse
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "4.1.0"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -121,6 +476,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.1.0"
|
||||||
|
sync_http:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: sync_http
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.3.0"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -134,7 +496,14 @@ packages:
|
|||||||
name: test_api
|
name: test_api
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.3"
|
version: "0.4.9"
|
||||||
|
test_core:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: test_core
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.4.11"
|
||||||
typed_data:
|
typed_data:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -142,13 +511,83 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.0"
|
version: "1.3.0"
|
||||||
|
usage:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: usage
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "4.0.2"
|
||||||
|
uuid:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: uuid
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.6"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vector_math
|
name: vector_math
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
|
version: "2.1.2"
|
||||||
|
vm_service:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: vm_service
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "8.2.0"
|
||||||
|
vm_snapshot_analysis:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: vm_snapshot_analysis
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.7.1"
|
||||||
|
watcher:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: watcher
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
|
web_socket_channel:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: web_socket_channel
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.1.0"
|
||||||
|
webdriver:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: webdriver
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.0"
|
||||||
|
webkit_inspection_protocol:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: webkit_inspection_protocol
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.0"
|
||||||
|
xml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: xml
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "5.3.1"
|
||||||
|
yaml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: yaml
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.0"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=2.12.0 <3.0.0"
|
dart: ">=2.16.0 <3.0.0"
|
||||||
flutter: ">=1.20.0"
|
flutter: ">=1.20.0"
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
name: flutter_qjs
|
name: flutter_qjs
|
||||||
description: This plugin is a simple js engine for flutter using the `quickjs` project. Plugin currently supports all the platforms except web!
|
description: This plugin is a simple js engine for flutter using the `quickjs` project. Plugin currently supports all the platforms except web!
|
||||||
version: 0.3.6
|
version: 0.3.7
|
||||||
homepage: https://github.com/ekibun/flutter_qjs
|
homepage: https://github.com/ekibun/flutter_qjs
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
@@ -15,6 +15,8 @@ dependencies:
|
|||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
flutter_tools:
|
||||||
|
sdk: flutter
|
||||||
|
|
||||||
# For information on the generic Dart part of this file, see the
|
# For information on the generic Dart part of this file, see the
|
||||||
# following page: https://dart.dev/tools/pub/pubspec
|
# following page: https://dart.dev/tools/pub/pubspec
|
||||||
|
@@ -11,17 +11,25 @@ import 'dart:io';
|
|||||||
|
|
||||||
import 'package:flutter_qjs/flutter_qjs.dart';
|
import 'package:flutter_qjs/flutter_qjs.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:flutter_tools/src/base/io.dart';
|
||||||
|
import 'package:flutter_tools/src/base/logger.dart';
|
||||||
|
import 'package:flutter_tools/src/base/terminal.dart';
|
||||||
|
import 'package:flutter_tools/src/base/platform.dart';
|
||||||
|
import 'package:flutter_tools/src/windows/visual_studio.dart';
|
||||||
|
import 'package:file/local.dart';
|
||||||
|
import 'package:process/process.dart';
|
||||||
|
|
||||||
dynamic myFunction(String args, {thisVal}) {
|
dynamic myFunction(String args, {thisVal}) {
|
||||||
return [thisVal, args];
|
return [thisVal, args];
|
||||||
}
|
}
|
||||||
|
|
||||||
Future testEvaluate(qjs) async {
|
Future testEvaluate(qjs) async {
|
||||||
JSInvokable wrapFunction = await qjs.evaluate(
|
dynamic wrapFunction = await qjs.evaluate(
|
||||||
'async (a) => a',
|
'async (a) => a',
|
||||||
name: '<testWrap>',
|
name: '<testWrap>',
|
||||||
);
|
);
|
||||||
dynamic testWrap = await wrapFunction.invoke([wrapFunction]);
|
dynamic testWrap = await wrapFunction.invoke([wrapFunction]);
|
||||||
|
await wrapFunction.free();
|
||||||
final wrapNull = await testWrap.invoke([null]);
|
final wrapNull = await testWrap.invoke([null]);
|
||||||
expect(wrapNull, null, reason: 'wrap null');
|
expect(wrapNull, null, reason: 'wrap null');
|
||||||
final primities = [0, 1, 0.1, true, false, 'str'];
|
final primities = [0, 1, 0.1, true, false, 'str'];
|
||||||
@@ -39,7 +47,7 @@ Future testEvaluate(qjs) async {
|
|||||||
a['a'] = a;
|
a['a'] = a;
|
||||||
final wrapA = await testWrap.invoke([a]);
|
final wrapA = await testWrap.invoke([a]);
|
||||||
expect(wrapA['a'], wrapA, reason: 'recursive object');
|
expect(wrapA['a'], wrapA, reason: 'recursive object');
|
||||||
JSInvokable testThis = await qjs.evaluate(
|
dynamic testThis = await qjs.evaluate(
|
||||||
'(function (func, arg) { return func.call(this, arg) })',
|
'(function (func, arg) { return func.call(this, arg) })',
|
||||||
name: '<testThis>',
|
name: '<testThis>',
|
||||||
);
|
);
|
||||||
@@ -53,6 +61,7 @@ Future testEvaluate(qjs) async {
|
|||||||
name: '<promises>',
|
name: '<promises>',
|
||||||
)
|
)
|
||||||
]);
|
]);
|
||||||
|
await testWrap.free();
|
||||||
for (final promise in promises)
|
for (final promise in promises)
|
||||||
expect(promise, isInstanceOf<Future>(), reason: 'promise object');
|
expect(promise, isInstanceOf<Future>(), reason: 'promise object');
|
||||||
try {
|
try {
|
||||||
@@ -62,21 +71,32 @@ Future testEvaluate(qjs) async {
|
|||||||
expect(e, 'reject', reason: 'promise object reject');
|
expect(e, 'reject', reason: 'promise object reject');
|
||||||
}
|
}
|
||||||
expect(await promises[1], 'resolve', reason: 'promise object resolve');
|
expect(await promises[1], 'resolve', reason: 'promise object resolve');
|
||||||
testWrap.free();
|
|
||||||
wrapFunction.free();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
test('make', () async {
|
test('make', () async {
|
||||||
|
const platform = LocalPlatform();
|
||||||
final utf8Encoding = Encoding.getByName('utf-8');
|
final utf8Encoding = Encoding.getByName('utf-8');
|
||||||
var cmakePath = 'cmake';
|
String cmakePath = 'cmake';
|
||||||
if (Platform.isWindows) {
|
if (platform.isWindows) {
|
||||||
var vsDir = Directory('C:/Program Files (x86)/Microsoft Visual Studio/');
|
final stdio = Stdio();
|
||||||
vsDir = (vsDir.listSync().firstWhere((e) => e is Directory) as Directory)
|
final vs = VisualStudio(
|
||||||
.listSync()
|
fileSystem: const LocalFileSystem(),
|
||||||
.last as Directory;
|
processManager: const LocalProcessManager(),
|
||||||
cmakePath = vsDir.path +
|
platform: platform,
|
||||||
'/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/cmake.exe';
|
logger: StdoutLogger(
|
||||||
|
terminal: AnsiTerminal(
|
||||||
|
stdio: stdio,
|
||||||
|
platform: platform,
|
||||||
|
),
|
||||||
|
stdio: stdio,
|
||||||
|
outputPreferences: OutputPreferences(
|
||||||
|
wrapText: stdio.hasTerminal,
|
||||||
|
showColor: platform.stdoutSupportsAnsi,
|
||||||
|
stdio: stdio,
|
||||||
|
),
|
||||||
|
));
|
||||||
|
cmakePath = vs.cmakePath!;
|
||||||
}
|
}
|
||||||
final buildDir = './build';
|
final buildDir = './build';
|
||||||
var result = Process.runSync(
|
var result = Process.runSync(
|
||||||
@@ -102,13 +122,12 @@ void main() async {
|
|||||||
expect(result.exitCode, 0);
|
expect(result.exitCode, 0);
|
||||||
});
|
});
|
||||||
test('module', () async {
|
test('module', () async {
|
||||||
final qjs = FlutterQjs(
|
final qjs = IsolateQjs(
|
||||||
moduleHandler: (name) {
|
moduleHandler: (name) async {
|
||||||
return 'export default "test module"';
|
return 'export default "test module"';
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
qjs.dispatch();
|
await qjs.evaluate('''
|
||||||
qjs.evaluate('''
|
|
||||||
import handlerData from 'test';
|
import handlerData from 'test';
|
||||||
export default {
|
export default {
|
||||||
data: handlerData
|
data: handlerData
|
||||||
@@ -116,7 +135,7 @@ void main() async {
|
|||||||
''', name: 'evalModule', evalFlags: JSEvalFlag.MODULE);
|
''', name: 'evalModule', evalFlags: JSEvalFlag.MODULE);
|
||||||
var result = await qjs.evaluate('import("evalModule")');
|
var result = await qjs.evaluate('import("evalModule")');
|
||||||
expect(result['default']['data'], 'test module', reason: 'eval module');
|
expect(result['default']['data'], 'test module', reason: 'eval module');
|
||||||
qjs.close();
|
await qjs.close();
|
||||||
});
|
});
|
||||||
test('data conversion', () async {
|
test('data conversion', () async {
|
||||||
final qjs = FlutterQjs(
|
final qjs = FlutterQjs(
|
||||||
@@ -124,7 +143,7 @@ void main() async {
|
|||||||
);
|
);
|
||||||
qjs.dispatch();
|
qjs.dispatch();
|
||||||
await testEvaluate(qjs);
|
await testEvaluate(qjs);
|
||||||
qjs.close();
|
await qjs.close();
|
||||||
});
|
});
|
||||||
test('isolate conversion', () async {
|
test('isolate conversion', () async {
|
||||||
final qjs = IsolateQjs(
|
final qjs = IsolateQjs(
|
||||||
|
Reference in New Issue
Block a user