writtttttttttting

This commit is contained in:
2024-07-09 09:56:30 +00:00
parent f5ec1b8229
commit 7419a4d836
2 changed files with 639 additions and 6 deletions

View File

@@ -296,11 +296,11 @@ Instructions in \lambdammm VM are 32bit tagged-union data that has up to 3 opera
The VM of \lambdammm is a register machine like the Lua VM(after version 5, although the VM has no real register but the register number simply means the offset index of call stack from the base pointer at the point of execution of the VM). The first operand of most instructions is the register number in which to store the result of the calculation. The VM of \lambdammm is a register machine like the Lua VM(after version 5, although the VM has no real register but the register number simply means the offset index of call stack from the base pointer at the point of execution of the VM). The first operand of most instructions is the register number in which to store the result of the calculation.
The list of instructions is shown in Fig.\ref{fig:instruction} (basic arithmetic operations are partly omitted). The notation for the instruction follows the Lua VM paper \cite[p.13]{ierusalimschy2005}. From left to right, the name of operation, a list of operands, and pseudo-code of the operation. When using each of the three operands as unsigned 8 bits, they are denoted as \texttt{A B C}. When used with a signed integer, prefix \texttt{s} is added, and when the two operand fields are used as one 16 bits, an suffix \texttt{x} is added. For example, when B and C are merged and treated as signed 16 bits, they are denoted as \texttt{sBx}. The list of instructions is shown in Fig.\ref{fig:instruction} (basic arithmetic operations are partly omitted). The notation for the instruction follows the Lua VM paper \cite[p.13]{ierusalimschy2005}. From left to right, the name of operation, a list of operands, and pseudo-code of the operation. When using each of the three operands as unsigned 8 bits, they are denoted as \texttt{A B C}. When used with a signed integer, prefix \texttt{s} is added, and when the two operand fields are used as one 16 bits, an suffix \texttt{x} is added. For example, when B and C are merged and treated as signed 16 bits, they are denoted as \texttt{sBx}.
In pseudo-code describing an functionality, \texttt{R(A)} means that data is moved in and out through the register (call stack) according to the numerical value of the operand \texttt{A}. \texttt{K(A)} means that it retrieves the \texttt{A}-th number in the static variable field of the compiled programm. \texttt{U(A)} means that referring \texttt{A}-th Upvalue of the current function. In pseudo-code describing an functionality, \texttt{R(A)} means that data is moved in and out through the register (call stack) according to the numerical value of the operand \texttt{A}. \texttt{K(A)} means that it retrieves the \texttt{A}-th number in the static variable field of the compiled programm. \texttt{U(A)} means that referring \texttt{A}-th Upvalue of the current function.
In addition to Lua's Upvalue operation, 3 operations related to internal state variables over time, \texttt{GETSTATE}, \texttt{SETSTATE}, \texttt{SHIFTSTATE} are added.
\begin{figure*}[ht] \begin{figure*}[ht]
\tt \tt
@@ -310,13 +310,15 @@ MOVE & A B & R(A) := R(B) \\
MOVECONST & A B & R(A) := K(B) \\ MOVECONST & A B & R(A) := K(B) \\
GETUPVALUE & A B & R(A) := U(B) \\ GETUPVALUE & A B & R(A) := U(B) \\
SETUPVALUE & A B & U(B) := R(A) \\ SETUPVALUE & A B & U(B) := R(A) \\
GETSTATE & A & R(A) := *SPtr \\ GETSTATE & A & R(A) := SPtr[SPos] \\
SETSTATE & A & *Sptr := R(A) \\ SETSTATE & A & Sptr[SPos] := R(A) \\
SHIFTSTATE & sAx & Sptr += sAx \\ SHIFTSTATE & sAx & SPos += sAx \\
JMP & sAx & PC +=sAx \\ JMP & sAx & PC +=sAx \\
JMPIFNEG & A sBx & if (R(A)<0) then PC += sBx \\ JMPIFNEG & A sBx & if (R(A)<0) then PC += sBx \\
CALL & A B C & \\ CALL & A B C & R(A), ... ,R(A+C-2) := program.functions[R(A)](R(A+1),...,R(A+B-1)) \\
CALLCLS & A B C & \\ CALLCLS & A B C & Sptr := vm.closures[R(A)].Sptr; \\
\ & \ & R(A), ... ,R(A+C-2) := vm.closures[R(A)].fnproto(R(A+1),...,R(A+B-1)); \\
\ & \ & Sptr := global\_sptr \\
RETURN & A B & return R(A), R(A+1)...,R(A+B-2) \\ RETURN & A B & return R(A), R(A+1)...,R(A+B-2) \\
ADDF & A B C & R(A) := R(B) as float + R(C) as float\\ ADDF & A B C & R(A) := R(B) as float + R(C) as float\\
SUBF & A B C & R(A) := R(B) as float - R(C) as float\\ SUBF & A B C & R(A) := R(B) as float - R(C) as float\\

631
src/vmmodel.svg Normal file
View File

@@ -0,0 +1,631 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg1"
sodipodi:docname="vmmodel.svg"
inkscape:version="1.3 (0e150ed, 2023-07-21)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="0.93529095"
inkscape:cx="252.3279"
inkscape:cy="219.18313"
inkscape:window-width="1440"
inkscape:window-height="783"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0"
inkscape:current-layer="g29" />
<defs
id="defs1">
<rect
x="346.97484"
y="153.98464"
width="29.6908"
height="20.084953"
id="rect32" />
<rect
x="37.223607"
y="23.781749"
width="113.7388"
height="18.611803"
id="rect2" />
<rect
x="37.223607"
y="23.781749"
width="113.7388"
height="18.611803"
id="rect4" />
<rect
x="37.223607"
y="23.781749"
width="113.7388"
height="18.611803"
id="rect6" />
<rect
x="37.223607"
y="23.781749"
width="113.7388"
height="18.611803"
id="rect12" />
<rect
x="37.223607"
y="23.781749"
width="113.7388"
height="18.611803"
id="rect13" />
<rect
x="37.223607"
y="23.781749"
width="113.7388"
height="18.611803"
id="rect14" />
<rect
x="37.223607"
y="23.781749"
width="113.7388"
height="18.611803"
id="rect16" />
<rect
x="37.223607"
y="23.781749"
width="126.40656"
height="19.466474"
id="rect18" />
<rect
x="37.223607"
y="23.781749"
width="118.86683"
height="19.466474"
id="rect19" />
<rect
x="37.223607"
y="23.781749"
width="113.7388"
height="18.611803"
id="rect24" />
<rect
x="37.223607"
y="23.781749"
width="126.40656"
height="19.466474"
id="rect31" />
<rect
x="37.223606"
y="23.78175"
width="113.7388"
height="18.611803"
id="rect14-1" />
<rect
x="37.223607"
y="23.781749"
width="113.7388"
height="18.611803"
id="rect41" />
<rect
x="37.223607"
y="23.781749"
width="113.7388"
height="18.611803"
id="rect43" />
<rect
x="37.223607"
y="23.781749"
width="113.7388"
height="18.611803"
id="rect45" />
<rect
x="37.223607"
y="23.781749"
width="113.7388"
height="18.611803"
id="rect47" />
<rect
x="37.223607"
y="23.781749"
width="113.7388"
height="18.611803"
id="rect49" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g29">
<rect
style="fill-opacity:0;stroke:#000000;stroke-width:0.181273;stroke-opacity:1"
id="rect1"
width="78.900948"
height="98.852478"
x="11.984065"
y="14.528127" />
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,2.3570541,3.8569977)"
id="text1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;word-spacing:0px;white-space:pre;shape-inside:url(#rect2);fill:#000000;fill-opacity:1;fill-rule:nonzero"><tspan
x="37.222656"
y="36.34345"
id="tspan2">Virtual Machine</tspan></text>
<g
id="g28">
<rect
style="fill-opacity:0;stroke:#000000;stroke-width:0.238248;stroke-dasharray:none;stroke-opacity:1"
id="rect3"
width="35.489555"
height="6.4485202"
x="13.816225"
y="16.740997" />
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,5.9738008,11.661556)"
id="text3"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;word-spacing:0px;white-space:pre;shape-inside:url(#rect4);fill:#000000;fill-opacity:1;fill-rule:nonzero"><tspan
x="37.222656"
y="36.34345"
id="tspan3">Program Counter</tspan></text>
</g>
<g
id="g26">
<rect
style="fill-opacity:0;stroke:#000000;stroke-width:0.238248;stroke-dasharray:none;stroke-opacity:1"
id="rect10"
width="35.489555"
height="6.4485202"
x="13.816225"
y="74.628067" />
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,5.9738008,69.374792)"
id="text11"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;word-spacing:0px;white-space:pre;shape-inside:url(#rect12);fill:#000000;fill-opacity:1;fill-rule:nonzero"><tspan
x="37.222656"
y="36.34345"
id="tspan4">State_Ptr</tspan></text>
</g>
<g
id="g27"
transform="translate(0,20.829203)">
<rect
style="fill-opacity:0;stroke:#000000;stroke-width:0.238248;stroke-dasharray:none;stroke-opacity:1"
id="rect11"
width="35.489555"
height="6.4485202"
x="13.816225"
y="83.841324" />
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,5.9738008,78.761885)"
id="text12"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;word-spacing:0px;white-space:pre;shape-inside:url(#rect13);fill:#000000;fill-opacity:1;fill-rule:nonzero"><tspan
x="37.222656"
y="36.34345"
id="tspan5">Audio Driver</tspan></text>
</g>
<g
id="g25">
<rect
style="fill-opacity:0;stroke:#000000;stroke-width:0.264951;stroke-dasharray:none;stroke-opacity:1"
id="rect5"
width="35.236588"
height="49.041969"
x="14.029625"
y="23.997538" />
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,5.9738008,19.085404)"
id="text6"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;word-spacing:0px;white-space:pre;shape-inside:url(#rect6);fill:#000000;fill-opacity:1;fill-rule:nonzero"><tspan
x="37.222656"
y="36.34345"
id="tspan6">Call Stack</tspan></text>
<g
id="g7">
<rect
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke-width:0.1;stroke-dasharray:none;stroke:#000000;stroke-opacity:1"
id="rect7"
width="30.647167"
height="4.3781672"
x="16.180182"
y="30.266457" />
<use
x="0"
y="0"
xlink:href="#rect7"
id="use7"
transform="translate(0,5.01592)" />
<use
x="0"
y="0"
xlink:href="#rect7"
id="use8"
transform="translate(0,10.07562)" />
<use
x="0"
y="0"
xlink:href="#rect7"
id="use9"
transform="translate(-0.08389833,15.251516)" />
<use
x="0"
y="0"
xlink:href="#rect7"
id="use10"
transform="translate(-0.08389833,20.311216)" />
</g>
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,6.1655345,50.913263)"
id="text13"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;word-spacing:0px;white-space:pre;shape-inside:url(#rect14);fill:#000000;fill-opacity:1;fill-rule:nonzero"
x="4.4466538"
y="0"><tspan
x="88.53279"
y="36.34345"
id="tspan7">...</tspan></text>
</g>
<g
id="g40"
transform="translate(0,14.674112)">
<rect
style="fill-opacity:0;stroke:#000000;stroke-width:0.238248;stroke-dasharray:none;stroke-opacity:1"
id="rect40"
width="35.489555"
height="6.4485202"
x="13.816225"
y="74.628067" />
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,5.9738008,69.374792)"
id="text40"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;word-spacing:0px;white-space:pre;shape-inside:url(#rect41);fill:#000000;fill-opacity:1;fill-rule:nonzero"><tspan
x="37.222656"
y="36.34345"
id="tspan8">Global States</tspan></text>
</g>
<g
id="g42"
transform="translate(0,14.796184)">
<rect
style="fill-opacity:0;stroke:#000000;stroke-width:0.238248;stroke-dasharray:none;stroke-opacity:1"
id="rect42"
width="35.489555"
height="6.389369"
x="13.816225"
y="82.236244" />
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,5.9738008,76.982966)"
id="text42"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;word-spacing:0px;white-space:pre;shape-inside:url(#rect43);fill:#000000;fill-opacity:1;fill-rule:nonzero"><tspan
x="37.222656"
y="36.34345"
id="tspan9">Closure Storage</tspan></text>
</g>
<g
id="g44"
transform="translate(38.590832,22.070762)">
<rect
style="fill-opacity:0;stroke:#000000;stroke-width:0.238248;stroke-dasharray:none;stroke-opacity:1"
id="rect44"
width="35.489555"
height="23.929771"
x="13.816225"
y="64.695839" />
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,5.9738008,69.374792)"
id="text44"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;word-spacing:0px;white-space:pre;shape-inside:url(#rect45);fill:#000000;fill-opacity:1;fill-rule:nonzero"><tspan
x="37.222656"
y="36.34345"
id="tspan10">Closure Storage</tspan></text>
</g>
<g
id="g46"
transform="translate(0,7.3328913)">
<rect
style="fill-opacity:0;stroke:#000000;stroke-width:0.238248;stroke-dasharray:none;stroke-opacity:1"
id="rect46"
width="35.489555"
height="6.4485202"
x="13.816225"
y="74.628067" />
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,5.9738008,69.374792)"
id="text46"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;word-spacing:0px;white-space:pre;shape-inside:url(#rect47);fill:#000000;fill-opacity:1;fill-rule:nonzero"><tspan
x="37.222656"
y="36.34345"
id="tspan11">State Position</tspan></text>
</g>
<g
id="g48"
transform="translate(38.590832,-47.454835)">
<rect
style="fill-opacity:0;stroke:#000000;stroke-width:0.238248;stroke-dasharray:none;stroke-opacity:1"
id="rect48"
width="35.489555"
height="68.648582"
x="13.816225"
y="64.175438" />
</g>
<path
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.265;stroke-dasharray:0.265, 0.265;stroke-dashoffset:0"
d="M 49.332461,89.337821 52.40263,16.73876"
id="path50"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.265;stroke-dasharray:0.265, 0.265;stroke-dashoffset:0"
d="M 49.284364,95.532054 52.418467,85.339121"
id="path51"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.265;stroke-dasharray:0.265, 0.265;stroke-dashoffset:0"
d="m 49.384886,103.57377 3.021213,7.14924"
id="path52"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.265;stroke-dasharray:0.265, 0.265;stroke-dashoffset:0"
d="m 49.357043,97.289527 3.047736,-10.50488"
id="path53"
sodipodi:nodetypes="cc" />
</g>
<g
id="g43"
transform="translate(49.050909)">
<rect
style="fill-opacity:0;stroke:#000000;stroke-width:0.161687;stroke-opacity:1"
id="rect15"
width="39.322144"
height="78.605812"
x="76.421799"
y="14.518333" />
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,67.030715,3.8569977)"
id="text15"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;word-spacing:0px;white-space:pre;shape-inside:url(#rect16);fill:#000000;fill-opacity:1;fill-rule:nonzero"><tspan
x="37.222656"
y="36.34345"
id="tspan12">Program</tspan></text>
<rect
style="fill-opacity:0;stroke:#000000;stroke-width:0.264951;stroke-dasharray:none;stroke-opacity:1"
id="rect17"
width="35.236588"
height="49.041969"
x="78.477158"
y="34.238575" />
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,69.978022,28.64669)"
id="text17"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;word-spacing:0px;white-space:pre;shape-inside:url(#rect18);fill:#000000;fill-opacity:1;fill-rule:nonzero"><tspan
x="37.222656"
y="36.34345"
id="tspan13">Function Prototype0</tspan></text>
<g
id="g30">
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,69.978022,10.259078)"
id="text18"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;word-spacing:0px;white-space:pre;shape-inside:url(#rect19);fill:#000000;fill-opacity:1;fill-rule:nonzero"><tspan
x="37.222656"
y="36.34345"
id="tspan14">Static Variables</tspan></text>
<rect
style="fill-opacity:0;stroke:#000000;stroke-width:0.157291;stroke-dasharray:none;stroke-opacity:1"
id="rect20"
width="35.344246"
height="17.231428"
x="78.644989"
y="16.009102" />
<g
id="g24"
transform="translate(64.723019,-9.7527837)">
<rect
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.1;stroke-dasharray:none;stroke-opacity:1"
id="rect21"
width="30.647167"
height="4.3781672"
x="16.180182"
y="30.266457" />
<use
x="0"
y="0"
xlink:href="#rect7"
id="use21"
transform="translate(0,5.01592)" />
</g>
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,71.110208,22.09822)"
id="text24"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;word-spacing:0px;white-space:pre;shape-inside:url(#rect24);fill:#000000;fill-opacity:1;fill-rule:nonzero"
x="4.4466538"
y="0"><tspan
x="88.53279"
y="36.34345"
id="tspan15">...</tspan></text>
</g>
<rect
style="fill-opacity:0;stroke:#000000;stroke-width:0.104119;stroke-dasharray:none;stroke-opacity:1"
id="rect30"
width="35.397419"
height="7.5390997"
x="78.840042"
y="84.695305" />
<g
id="g7-3"
transform="translate(64.796386,10.163913)">
<g
id="g37">
<g
id="g33"
sodipodi:insensitive="true">
<rect
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.0498031;stroke-dasharray:none;stroke-opacity:1"
id="rect7-1"
width="7.5153742"
height="4.4283643"
x="16.155083"
y="30.241358"
inkscape:label="rect7-1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;fill-rule:nonzero"
x="84.64122"
y="43.899445"
id="text33"
transform="translate(-64.796386,-10.163913)"><tspan
sodipodi:role="line"
id="tspan33"
style="fill:#000000;fill-opacity:1"
x="84.64122"
y="43.899445">OP</tspan></text>
</g>
<g
id="g34"
transform="translate(7.5476246)">
<rect
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.0498031;stroke-dasharray:none;stroke-opacity:1"
id="rect33"
width="7.5153742"
height="4.4283643"
x="16.155083"
y="30.241358"
inkscape:label="rect7-1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;fill-rule:nonzero"
x="84.64122"
y="43.899445"
id="text34"
transform="translate(-64.796386,-10.163913)"><tspan
sodipodi:role="line"
id="tspan34"
x="84.64122"
y="43.899445">A</tspan></text>
</g>
<g
id="g35"
transform="translate(15.095249)">
<rect
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.0498031;stroke-dasharray:none;stroke-opacity:1"
id="rect34"
width="7.5153742"
height="4.4283643"
x="16.155083"
y="30.241358"
inkscape:label="rect7-1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;fill-rule:nonzero"
x="84.64122"
y="43.899445"
id="text35"
transform="translate(-64.796386,-10.163913)"><tspan
sodipodi:role="line"
id="tspan35"
x="84.64122"
y="43.899445">B</tspan></text>
</g>
<g
id="g36"
transform="translate(22.642874)">
<rect
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.0498031;stroke-dasharray:none;stroke-opacity:1"
id="rect35"
width="7.5153742"
height="4.4283643"
x="16.155083"
y="30.241358"
inkscape:label="rect7-1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;fill-rule:nonzero"
x="84.64122"
y="43.899445"
id="text36"
transform="translate(-64.796386,-10.163913)"><tspan
sodipodi:role="line"
id="tspan36"
x="84.64122"
y="43.899445">C</tspan></text>
</g>
</g>
<use
x="0"
y="0"
xlink:href="#g37"
id="use37"
transform="translate(0,4.4756926)" />
<use
x="0"
y="0"
xlink:href="#g37"
id="use38"
transform="translate(0,8.9513852)" />
<use
x="0"
y="0"
xlink:href="#g37"
id="use39"
transform="translate(0,13.383989)" />
<use
x="0"
y="0"
xlink:href="#g37"
id="use40"
transform="translate(0,17.859682)" />
</g>
<g
id="g31">
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,71.779973,81.141678)"
id="text13-0"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;word-spacing:0px;white-space:pre;shape-inside:url(#rect14-1);fill:#000000;fill-opacity:1;fill-rule:nonzero"
x="4.4466538"
y="0"><tspan
x="88.53279"
y="36.34345"
id="tspan16">...</tspan></text>
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,69.978022,79.183842)"
id="text30"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;word-spacing:0px;white-space:pre;shape-inside:url(#rect31);fill:#000000;fill-opacity:1;fill-rule:nonzero"
sodipodi:insensitive="true"><tspan
x="37.222656"
y="36.34345"
id="tspan17">Function Prototype1</tspan></text>
</g>
</g>
<text
xml:space="preserve"
transform="scale(0.26458333)"
id="text31"
style="fill:none;stroke-width:0.37795276;font-size:13.33329964px;-inkscape-font-specification:'Helvetica Neue, Normal';font-family:'Helvetica Neue';word-spacing:0px;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-dasharray:none;fill-rule:nonzero;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;white-space:pre;shape-inside:url(#rect32)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 27 KiB