From 69036e663ebf2aedfb02e4f4e6ec49489bd40151 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Fri, 4 Sep 2015 23:27:18 +0100 Subject: [PATCH 1/4] Fix conditional expression validation to consider subtypes of int/double --- lib/validate.js | 14 +++++++++++--- test/index.js | 21 +++++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/lib/validate.js b/lib/validate.js index 3d0649a..2802007 100644 --- a/lib/validate.js +++ b/lib/validate.js @@ -865,10 +865,18 @@ Vp.expression = function expression(e) { this.checkSubtype(this.expression(vars.test), ty.Int, "conditional test", vars.test.loc); var t1 = this.expression(vars.cons); var t2 = this.expression(vars.alt); - if (t1 !== t2) - this.fail("type mismatch between conditional branches", e.loc); - if (t1 !== ty.Int && t1 !== ty.Double) + + var t1supertype; + if (t1.subtype(ty.Int)) { + t1supertype = ty.Int; + } else if (t1.subtype(ty.Double)) { + t1supertype = ty.Double; + } else { this.fail("expected int or double in conditional branch, got " + t1, vars.cons.loc); + } + + if (!t2.subtype(t1supertype)) + this.fail("type mismatch between conditional branches", e.loc); return t1; }, this); diff --git a/test/index.js b/test/index.js index aa43a0d..df8c768 100644 --- a/test/index.js +++ b/test/index.js @@ -301,3 +301,24 @@ exports.testFunctionTables = asmAssert( var x = [f], y = [g], z = [f, g] return f; }, { pass: true }); + +exports.testConditionalExpression = asmAssert.one( + "conditional expression", + function f() { + return (1 ? 2 : 3)|0; + }, + { pass: true }); + +exports.testConditionalExpressionMismatchedTypes = asmAssert.one( + "conditional with consequent and alternate of differing types", + function f() { + return (1 ? 0.5 : 3)|0; + }, + { pass: false }); + +exports.testConditionalExpressionDifferentSubtypes = asmAssert.one( + "conditional with different subtypes of int", + function f() { + return (1 ? (2 < 3) : 4)|0; + }, + { pass: true }); From 92d12ae15c9ea418d2c040baecbfba4bf9b67ff3 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 17 Sep 2015 19:45:48 +0100 Subject: [PATCH 2/4] Don't fail validation on a 'for' statement with empty init clause --- lib/validate.js | 2 +- test/index.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/lib/validate.js b/lib/validate.js index 2802007..dc95adf 100644 --- a/lib/validate.js +++ b/lib/validate.js @@ -745,7 +745,7 @@ Vp.doWhileStatement = function doWhileStatement(body, test) { // (VariableDeclaration | Expression | null, Expression | null, Expression | null, Statement, Loc) -> void Vp.forStatement = function forStatement(init, test, update, body, loc) { - if (init.type === 'VariableDeclaration') + if (init !== null && init.type === 'VariableDeclaration') this.fail("illegal variable declaration in for-head", init.loc); this.optExpression(init); this.checkSubtype(this.optExpression(test) || ty.Int, ty.Int, "for loop condition", loc); diff --git a/test/index.js b/test/index.js index df8c768..a787115 100644 --- a/test/index.js +++ b/test/index.js @@ -322,3 +322,35 @@ exports.testConditionalExpressionDifferentSubtypes = asmAssert.one( return (1 ? (2 < 3) : 4)|0; }, { pass: true }); + +exports.testForWithoutInit = asmAssert.one( + "for statement without an init clause", + function f() { + var i = 0, j = 0; + for (; i|0 < 10; i = i|0 + 1) { + j = j|0 + i; + } + }, + { pass: true }); + +exports.testForWithoutTest = asmAssert.one( + "for statement without a test clause", + function f() { + var i = 0, j = 0; + for (i = 0; ; i = i|0 + 1) { + if (i|0 >= 10) break; + j = j|0 + i; + } + }, + { pass: true }); + +exports.testForWithoutUpdate = asmAssert.one( + "for statement without an update clause", + function f() { + var i = 0, j = 0; + for (i = 0; i|0 < 10;) { + j = j|0 + i; + i = i|0 + 1; + } + }, + { pass: true }); From ca69adb232c55fa6e5a60e4ef97d7cccf02228b0 Mon Sep 17 00:00:00 2001 From: David Herman Date: Sat, 6 Oct 2018 18:38:12 -0700 Subject: [PATCH 3/4] Remove spec material, which has been moved to the asm-js/spec repo. --- historic/def.pdf | Bin 251649 -> 0 bytes historic/def.tex | 1305 ----------------- historic/mathpartir.sty | 447 ------ historic/subtypes.graffle | 956 ------------ historic/subtypes.png | Bin 24992 -> 0 bytes html/Makefile | 2 - html/aot.graffle | 2886 ------------------------------------- html/aot.png | Bin 132214 -> 0 bytes html/github.css | 127 -- html/highlight.pack.js | 1 - html/index.html | 2310 ----------------------------- html/index.src.html | 2228 ---------------------------- html/subtypes.graffle | 1505 ------------------- html/subtypes.png | Bin 38209 -> 0 bytes html/whatwg.css | 287 ---- 15 files changed, 12054 deletions(-) delete mode 100644 historic/def.pdf delete mode 100644 historic/def.tex delete mode 100644 historic/mathpartir.sty delete mode 100644 historic/subtypes.graffle delete mode 100644 historic/subtypes.png delete mode 100644 html/Makefile delete mode 100644 html/aot.graffle delete mode 100644 html/aot.png delete mode 100644 html/github.css delete mode 100644 html/highlight.pack.js delete mode 100644 html/index.html delete mode 100644 html/index.src.html delete mode 100644 html/subtypes.graffle delete mode 100644 html/subtypes.png delete mode 100644 html/whatwg.css diff --git a/historic/def.pdf b/historic/def.pdf deleted file mode 100644 index ed67dd6ad731ab6921d67ee309ff7631271fd615..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 251649 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±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
Ut+AbJw)2IymK`=nz3)=Z@vxIU65AEJ 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 diff --git a/historic/def.tex b/historic/def.tex deleted file mode 100644 index a149d41..0000000 --- a/historic/def.tex +++ /dev/null @@ -1,1305 +0,0 @@ -\documentclass{article} - -\usepackage{mathpartir} -\usepackage{amssymb} -\usepackage{graphicx} -\RequirePackage{algorithm} -\RequirePackage[noend]{algpseudocode} - -\newcommand{\mod}{\mathrel{\mathrm{mod}}} -\newcommand{\imm}{\mathtt{imm}} -\newcommand{\mut}{\mathtt{mut}} -\newcommand{\funcall}[2]{{#1}\mathjs{(}{#2}\mathjs{)}} -\newcommand{\paren}[1]{\mathjs{(}{#1}\mathjs{)}} -\newcommand{\dom}{\mathit{dom}} -\newcommand{\funtype}{\mathit{fun}\mbox{-}\mathit{type}} -\newcommand{\vartype}{\mathit{var}\mbox{-}\mathit{type}} -\newcommand{\rettype}{\mathit{return}\mbox{-}\mathit{type}} -\newcommand{\imptype}{\mathit{import}\mbox{-}\mathit{type}} -\newcommand{\stdtype}{\mathit{std}\mbox{-}\mathit{type}} -\newcommand{\funty}[2]{({#1}) \rightarrow {#2}} -\newcommand{\seq}[1]{\overline{{#1}}} -\newcommand{\mathjs}[1]{\mbox{\texttt{{#1}}}} -\newcommand{\mathjssm}[1]{\mbox{\texttt{\scriptsize {#1}}}} -\newcommand{\return}[1]{\mathjs{return }{#1}\mathjs{;}} -\newcommand{\fun}[3]{\mathjs{function }{#1}\mathjs{(}{#2}\mathjs{) \char123{} }{#3}\mathjs{ \char125{}}} -\newcommand{\ternary}[3]{{#1}\,\mathjs{?}\,{#2}\,\mathjs{:}{#3}} -\newcommand{\afun}[2]{\mathjs{function}\mathjs{(}{#1}\mathjs{) \char123{} }{#2}\mathjs{ \char125{}}} -\newcommand{\var}[1]{\mathjs{var }{#1}\mathjs{;}} -\newcommand{\rel}[1]{\scriptsize [\textsc{#1}]} -\newcommand\defeq{\stackrel{\mbox{\tiny def}}{=}} -\newcommand{\while}[2]{\mathjs{while (}{#1}\mathjs{) }{#2}} -\newcommand{\dowhile}[2]{\mathjs{do }{#1}\mathjs{ while (}{#2}\mathjs{);}} -\newcommand{\for}[4]{\mathjs{for (}{#1}\mathjs{; }{#2}\mathjs{; }{#3}\mathjs{) }{#4}} -\newcommand{\switch}[2]{\mathjs{switch (}{#1}\mathjs{) \char123{} }{#2}\mathjs{ \char125{}}} -\newcommand{\switchdef}[3]{\mathjs{switch (}{#1}\mathjs{) \char123{} }{#2}\mathjs{ default:}\,{#3}\mathjs{ \char125{}}} -\newcommand{\brk}{\mathjs{break;}} -\newcommand{\brkl}[1]{\mathjs{break }{#1}\mathjs{;}} -\newcommand{\cont}{\mathjs{continue;}} -\newcommand{\contl}[1]{\mathjs{continue }{#1}\mathjs{;}} -\newcommand{\lab}[2]{{#1}\mathjs{:}\,{#2}} -\newcommand{\ifone}[2]{\mathjs{if (}{#1}\mathjs{) }{#2}} -\newcommand{\iftwo}[3]{\mathjs{if (}{#1}\mathjs{) }{#2}\mathjs{ else }{#3}} -\newcommand{\block}[1]{\mathjs{\char123{} }{#1}\mathjs{ \char125{}}} -\newcommand{\ok}{\mathrm{\mathbf{ok}}} -\newcommand{\rulebreak}{\vspace{.1in}\\} -\newcommand{\bit}{\mathtt{bit}} -\newcommand{\unsigned}{\mathtt{unsigned}} -\newcommand{\intsm}{\mathjssm{intish}} -\newcommand{\doublesm}{\mathjssm{doublish}} -\newcommand{\signed}{\mathtt{signed}} -\newcommand{\fixnum}{\mathtt{fixnum}} -\newcommand{\double}{\mathtt{double}} -\newcommand{\view}[2]{\mathtt{view}^{#1}_{#2}} -\newcommand{\extern}{\mathtt{extern}} -\newcommand{\unk}{\mathtt{unknown}} -\newcommand{\str}{\mathtt{string}} -\newcommand{\undef}{\mathtt{undefined}} -\newcommand{\void}{\mathtt{void}} -\newcommand{\nul}{\mathtt{null}} -\newcommand{\num}{\mathtt{number}} -\newcommand{\obj}{\mathtt{object}} -\newcommand{\mustret}{\mathsf{return}} -\newcommand{\seqcomp}{\mathrel{;}} -\newcommand{\getprop}[2]{{#1}\mathjs{[}{#2}\mathjs{]}} -\newcommand{\getpropsm}[2]{{#1}\mathjssm{[}{#2}\mathjssm{]}} -\newcommand{\longlong}[2]{\mathjs{[}{#1},{#2}\mathjs{]}} -\newcommand{\toint}[1]{\mathjs{\~{}\~{}}{#1}} -\newcommand{\todouble}[1]{\mathjs{+}{#1}} -\renewcommand{\int}{\mathtt{int}} -\newcommand{\dword}{\mathtt{bits64}} -\newcommand{\function}{\mathtt{function}} -\newcommand{\union}[2]{{#1}\mathrel{|}{#2}} -\newcommand{\boolish}{\mathtt{boolish}} -\newcommand{\floor}{\mathtt{floor}} -\newcommand{\imul}{\mathtt{imul}} -\newcommand{\intish}{\mathtt{intish}} -\newcommand{\doublish}{\mathtt{doublish}} -\newcommand{\Fun}{\mathtt{Function}} - -\newcommand{\progjudge}[1]{\vdash {#1}\ \ok} -\newcommand{\impjudge}[5]{{#1};{#2};{#3};{#4} \vdash {#5}\ \ok} -\newcommand{\iejudge}[4]{{#1};{#2} \vdash {#3} : {#4}} -\newcommand{\fnjudge}[2]{{#1} \vdash {#2}\ \ok} -\newcommand{\expjudge}[2]{{#1} \vdash {#2}\ \ok} -\newcommand{\stmtjudge}[5]{{#1};{#2} \vdash {#3} : {#4} / {#5}} -\newcommand{\exprjudge}[4]{{#1};{#2} \vdash {#3} : {#4}} -\newcommand{\stmtretjudge}[2]{\vdash {#1} \hookrightarrow {#2}} -\newcommand{\sjudge}[4]{{#1};{#2};{#3} \vdash {#4}\ \ok} - -\newcommand{\returns}{\mathit{returns}} -\newcommand{\breaks}{\mathit{breaks}} - -\begin{document} - -\title{\texttt{asm.js}: a High-Performance Subset of JavaScript} -\author{Dave Herman, Luke Wagner, and Alon Zakai} -\maketitle - -\section{Introduction} - -This document describes a formal definition of a subset of the -JavaScript programming language that can be used as a high-performance -compiler target language. This sublanguage or dialect, which we call -$\mathjs{asm.js}$, effectively describes a safe virtual machine for -memory-unsafe languages such as C and C++. - -Because $\mathjs{asm.js}$ is a proper subset of JavaScript, both -syntactically and semantically, the language is fully defined by a -static {\it validation} judgment, which yields a predicate that -determines whether a given JavaScript program is or is not in the -subset. No specification of a dynamic semantics is needed, since the -behavior of an $\mathjs{asm.js}$ program is simply defined by its -behavior as a JavaScript program. - -\subsection{Overview} - -The unit of compilation/validation of $\mathjs{asm.js}$ is the -$\mathjs{asm.js}$ {\it module}, which takes the form of a closed -JavaScript function beginning with the {\it prologue -directive}~\cite{es5}: -\[ -\mathjs{"use asm";} -\] -The presence of this directive serves two purposes. First, it allows -JavaScript engines that wish to provide specialized optimizations for -$\mathjs{asm.js}$ to efficiently recognize that the module should be -validated as an $\mathjs{asm.js}$, without the need for complex, -heuristic or concurrent recognition logic. (Since validation requires -a non-trivial traversal of the body of the module, it is likely too -expensive to speculatively validate {\it all} JavaScript code during -JIT compilation.) Second, by requiring the programmer or code -generator to state the intention explicitly that the code should be -recognized as $\mathjs{asm.js}$, it allows user agents to report -validation errors or performance faults to developer consoles. - -An $\mathjs{asm.js}$ module takes three optional parameters: a global -object, containing standard ECMAScript libraries, an {\it FFI object}, -containing custom imported functions and constants from external -JavaScript, and a JavaScript $\mathjs{ArrayBuffer}$ representing a -virtualized memory. The module can provide different views of the -buffer by using typed array wrappers imported from the environment: -\begin{verbatim} -function mod(global, foreign, buffer) { - "use asm"; - - var HEAP_I32 = new global.Int32Array(buffer); - var HEAP_F64 = new global.Float64Array(buffer); - // ... -} -\end{verbatim} - -The body of an $\mathjs{asm.js}$ module consists of any number of -function definitions, followed by an {\it export clause}: -\[ -\return{\mathjs{\char123{} foo:\,f, bar:\,g \char125{}}} -\] -If a module only exports a single function, it can do so directly, -without the object literal: -\[ -\return{\mathjs{foo}} -\] - -\subsection{Types} - -The $\mathjs{asm.js}$ language is statically typed: every function, -variable, and expression has a statically predictable type, according -to a type hierarchy covering a subset of JavaScript values (see -Section~\ref{sec:types}). Variables, parameters, and functions are -provided with an explicit type bound through a stylized use of -JavaScript coercions. This technique was pioneered by the Emscripten -compiler~\cite{emscripten}, and is now used by a number of compilers -that target JavaScript~\cite{mandreel,lljs}. - -For example, the following is a simple function from integers to -integers: -\begin{verbatim} -function id(x) { - x = x|0; - return x|0; -} -\end{verbatim} -Even though JavaScript provides only double-precision floating-point -numbers (doubles) in its data model, the $\mathjs{asm.js}$ type system -enforces that 32-bit integer values---a strict subset of -doubles---never overflow to larger doubles. This allows optimizing -compilers to represent these values as unboxed integers in 32-bit -registers or memory. - -Again following the practice established by Emscripten, it is possible -to do integer operations such as arithmetic and conditionals by means -of coercions: -\begin{verbatim} -function add1(x) { - x = x|0; - return ((x|0)+1)|0; -} -\end{verbatim} -While the JavaScript semantics dictates that the addition may overflow -to a larger number than a 32-bit integer, the outer coercion ensures -that the entire expression results in a 32-bit integer---the same -integer that would be produced by a signed, 32-bit addition in a -typical assembly language. The $\mathjs{asm.js}$ type system thus -ensures that integer operations can be efficiently compiled by -optimizing JavaScript engines to predictable machine instructions. - -\subsection{Validation, linking, and execution} - -The $\mathjs{asm.js}$ validator is defined as a static type system, -which can be performed by an optimizing JavaScript engine at the time -the module is parsed by the JavaScript engine. (If compilation time is -a concern, it can be delayed to runtime by hiding the source code in a -string and passed to $\mathjs{eval}$ or the $\mathjs{Function}$ -constructor.) During this phase, any static validation errors can be -reported to a developer console. - -After a $\mathjs{asm.js}$ module is compiled, its evaluation produces -a closure with an empty lexical environment. The module can be {\it -linked} by calling the function with an object representing the -imported environment and an optional buffer: -\begin{verbatim} -function mod(global, foreign, buffer) { - "use asm"; - // ... - return { f: foo, g: bar }; -} - -var foreign = { - consoleDotLog: console.log, - // ... -}; - -var buffer = new ArrayBuffer(0x100000); - -// link the module -var m = mod(window, foreign, buffer); -\end{verbatim} - -This linking phase may need to perform additional, dynamic -validation. In particular, dynamic validation can fail if, for -example, the $\mathjs{Int32Array}$ function passed in through the -environment does not turn out to construct a proper typed array -(thereby defeating typed array-based optimizations). - -The resulting module object provides access to the exported -$\mathjs{asm.js}$ functions, which have been fully validated (both -statically and dynamically) and optimized. - -\subsection{Notation conventions} - -The following notation conventions are used in this document. Optional -items in a grammar are presented in $[\mbox{square -brackets}]$. Sequences are presented with a $\seq{\mbox{horizontal -overbar}}$. The empty sequence is denoted by $\epsilon$. Integers and -integer literals are ranged over by the metavariables $i, j$; -these may also serve as sequence indices, in which case they are -natural numbers. Natural numbers are otherwise ranged over by the -metavariables $m, n$. Floating-point literals are ranged over by the -metavariable $r$. - -\subsection{Document outline} - -The remainder of this document proceeds as follows. -%% FIXME: outline - -\section{Abstract syntax} - -This section specifies the abstract syntax of $\mathjs{asm.js}$. The -grammar is presented with concrete syntax for conciseness and -readability, but should be read as describing the subset of abstract -syntax trees produced by a standard JavaScript parser. - -We make the following assumptions about canonicalization of -$\mathjs{asm.js}$ abstract syntax trees: -\begin{enumerate} -\item Parentheses are ignored in the AST. This allows parentheses to - be left out of any of the formal definitions of this spec. - -\item Empty statements ($\mathjs{;}$) are ignored in the AST. This - allows empty statements to be left out of any of the formal - definitions of this spec. - -\item The identifiers $\mathjs{arguments}$ and $\mathjs{eval}$ do not - appear in $\mathjs{asm.js}$ programs. If either of these identifiers - appears anywhere, static validation must fail. -\end{enumerate} - -In various places in this document, the meta-variables $f$, $g$, $x$, -$y$, and $z$ are used to range over JavaScript identifiers. - -We syntactically distinguish integer literals $i, j$ from -floating-point literals $r$. A floating-point literal is a JavaScript -number literal that contains a $\mathjs{.}$ character. - -\subsection{Modules} - -An $\mathjs{asm.js}$ module has the following syntax: -\[ -\begin{array}{rcl} -\mathit{mod} & ::= & \mathjs{function }[f]\mathjs{(}[\mathit{global}[, \mathit{foreign}[, \mathit{buffer}]]]\mathjs{) \char123{}} \\ - & & \qquad\mathjs{"use asm";} \\ - & & \qquad\seq{\var{\seq{x \mathjs{ = } \mathit{imp}}}} \\ - & & \qquad\seq{\mathit{fn}_g} \\ - & & \qquad\seq{\var{\seq{y \mathjs{ = } v}}} \\ - & & \qquad\mathit{exp} \\ - & & \mathjs{\char125{}} \\ -%% \fun{[m]}{[g[, e[, b]]]}{\mathjs{"use asm"; } \seq{\mathit{imp}_x}\ \seq{\mathit{fn}_f}\ \seq{\var{\seq{y \mathjs{ = } v}}}\ \mathit{exp}} -\end{array} -\] -The syntax consists of: -\begin{enumerate} -\item an optional module name; -\item up to three optional parameters; -\item a $\mathjs{"use asm";}$ prologue directive; -\item a sequence of import statements; -\item a sequence of function declarations; -\item a sequence of global variable declarations; and -\item a single export statement. -\end{enumerate} - -An import expression is either an FFI function binding, a -type-annotated (coerced) FFI value, or a heap view: -\[ -\begin{array}{rcl} -\mathit{imp} & ::= & \mathit{global}\mathjs{.}x \\ - & | & \mathit{global}\mathjs{.Math.}x \\ - & | & \mathjs{new }\funcall{\mathit{global}\mathjs{.}x}{\mathit{buffer}} \\ - & | & \mathit{foreign}\mathjs{.}x\mathjs{|0} \\ - & | & \mathjs{+}\mathit{foreign}\mathjs{.}x \\ - & | & \mathit{foreign}\mathjs{.}x \\ -\end{array} -\] -(We assume that the metavariables $\mathit{global}$, -$\mathit{foreign}$, and $\mathit{buffer}$ stand for fixed variables -names used consistently throughout the imports.) - -A function declaration has the following syntax: -\[ -\mathit{fn}_f ::= \fun{f}{\seq{x}}{\seq{x\mathjs{ = }\mathit{ann}_x\mathjs{;}}\ \seq{\var{\seq{y\mathjs{ = }v}}}\ \mathit{ss}} -\] -The syntax consists of type annotations for the parameters, a sequence -of local variable declarations, and a sequence of statements. - -Type annotations are either $\int$ or $\double$ coercions: -\[ -\mathit{ann}_x ::= x\mathjs{|0} ~|~ \todouble{x} -\] - -An export statement returns either a single function or an object -literal containing multiple functions: -\[ -\begin{array}{rcl} -\mathit{exp} & ::= & \return{f} \\ - & | & \return{\mathjs{\char123{} } \seq{x \mathjs{:} f} \mathjs{ \char125{}}} \\ -\end{array} -\] - -\subsection{Statements} - -The set of legal statements in $\mathjs{asm.js}$ includes blocks, -expression statements, conditionals, returns, loops, $\mathjs{switch}$ -blocks, $\mathjs{break}$ and $\mathjs{continue}$, and labeled -statements: -\[ -\begin{array}{rcl} -s & ::= & \block{\mathit{ss}} \\ - & | & e\mathjs{;} \\ - & | & \ifone{e}{s} \\ - & | & \iftwo{e}{s}{s} \\ - & | & \return{[\mathit{re}]} \\ - & | & \while{e}{s} \\ - & | & \dowhile{s}{e} \\ - & | & \for{[e]}{[e]}{[e]}{s} \\ - & | & \switch{e}{\seq{c}\ [d]} \\ - & | & \brkl{[\mathit{lab}]} \\ - & | & \contl{[\mathit{lab}]} \\ - & | & \lab{\mathit{lab}}{s} \\ -\\ -\mathit{ss} & ::= & \seq{s} \\ -\end{array} -\] - -Return arguments always have their type explicitly manifest: either a -$\signed$ or $\double$ coercion or a literal: -\[ -\mathit{re} ::= e\mathjs{|0} ~|~ \todouble{e} ~|~ v -\] - -The contents of $\mathjs{switch}$ blocks are restricted: in addition -to requiring the (optional) $\mathjs{default}$ clause to be the last -clause, each $\mathjs{case}$ clause is syntactically restricted to -contain only literal values: -\[ -\begin{array}{rcl} -c & ::= & \mathjs{case }v\mathjs{:}\,\mathit{ss} \\ -d & ::= & \mathjs{default:}\,\mathit{ss} \\ -\mathit{cd} & ::= & c ~|~ d \\ -\end{array} -\] - -\subsection{Expressions} - -Expressions include literals, lvalues, assignments, function calls, -unary expressions, binary expressions, and sequence expressions: -\[ -\begin{array}{rcl} -e & ::= & v \\ - & | & \mathit{lval} \\ - & | & \mathit{lval}\mathjs{ = }e \\ - & | & \funcall{f}{\seq{e}} \\ - & | & \mathit{unop}\ e \\ - & | & e\ \mathit{binop}\ e \\ - & | & \ternary{e}{e}{e} \\ - & | & \paren{\seq{e}} \\ -\\ -\mathit{unop} & ::= & \mathjs{+} ~|~ \mathjs{\~{}} ~|~ \mathjs{!} \\ -\\ -\mathit{binop} & ::= & \mathjs{+} ~|~ \mathjs{-} ~|~ \mathjs{*} ~|~ \mathjs{/} ~|~ \mathjs{\%} \\ - & | & \mathjs{|} ~|~ \mathjs{\&} ~|~ \mathjs{\^{}} ~|~ \mathjs{<<} ~|~ \mathjs{>>} ~|~ \mathjs{>>>} \\ - & | & \mathjs{<} ~|~ \mathjs{<=} ~|~ \mathjs{>} ~|~ \mathjs{>=} ~|~ \mathjs{!=} ~|~ \mathjs{==} \\ -\end{array} -\] - -Literals are either doubles or integers: -\[ -v ::= r ~|~ i -\] - -Lvalues are either variables or typed array dereference -expressions. The latter requires a mask to force the byte offset into -a valid range and a shift to convert the offset into a proper index -for the size of the typed array. -\[ -\mathit{lval} ::= x ~|~ \getprop{x}{i} ~|~ \getprop{x}{e\mathjs{ \& }\mathit{mask}} ~|~ \getprop{x}{\paren{e\mathjs{ \& }\mathit{mask}}\mathjs{ >> }i} -\] -The $\mathit{mask}$ is a non-negative integer $2^k - 1$ where $k \in -[3, 31]$. The same $\mathit{mask}$ must be used consistently -throughout the program. - -\section{Types} -\label{sec:types} - -The $\mathjs{asm.js}$ validator relies on a static type system that -classifies and constraints the syntax beyond the grammar. - -\subsection{Expression types} - -The set of {\it expression types} classifies the results of expression -evaluation and constrains the allowable values of variables. -\[ -\begin{array}{rcl} -\sigma, \tau & ::= & \fixnum ~|~ \signed ~|~ \unsigned ~|~ \int ~|~ \intish \\ - & | & \double ~|~ \doublish ~|~ \extern ~|~ \unk ~|~ \void \\ -%% \sigma, \tau & ::= & \double ~|~ \signed ~|~ \unsigned ~|~ \fixnum ~|~ \extern \\ -%% & | & \bit ~|~ \int ~|~ \boolish ~|~ \intish ~|~ \void ~|~ \unk \\ -\end{array} -\] - -These types are arranged in a subtyping hierarchy, defined by: -\[ -\begin{array}{rcl} -\fixnum & <: & \signed, \unsigned \\ -\signed, \unsigned & <: & \int, \extern \\ -\double & <: & \extern, \doublish \\ -\unk & <: & \intish, \doublish \\ -\int & <: & \intish \\ -\end{array} -\] - -Figure~\ref{fig:subtypes} depicts this subtyping hierarchy -visually. Note that some types are presented in white boxes and others -in gray boxes. The white boxes represent types that may escape into -external JavaScript; the gray types are internal to the -$\mathjs{asm.js}$ module and cannot escape. This allows an optimizing -implementation to use unboxed representations that would otherwise be -illegal. What follows is an explanation of each type. - -\begin{figure}[tb] -\centering -\includegraphics[scale=0.5]{subtypes} -\caption{The hierarchy of expression types.} -\label{fig:subtypes} -\end{figure} - -\subsubsection*{The $\extern$ type} - -This abstract type represents the root of all types that can escape -back into ordinary JavaScript. Any type that is a subtype of $\extern$ -must carry enough information in its internal representation in an -optimizing virtual machine to faithfully convert back into a dynamic -JavaScript value. - -\subsubsection*{The $\double$ type} - -This is the type of double-precision floating-point values. An -optimizing engine can represent these as unboxed 64-bit floats. If -they escape into external JavaScript they must of course be wrapped -back up as JavaScript values according to the JavaScript engine's -value representation. - -\subsubsection*{The $\signed$ and $\unsigned$ types} - -These are the types of signed and unsigned 32-bit integers, -respectively. For an optimizing engine, their representation can be -the same: an unboxed 32-bit integer. If a value escapes into external -JavaScript, the sign is used to determine which JavaScript value it -represents. For example, the bit pattern $\mathjs{0xffffffff}$ -represents either the JavaScript value $\mathjs{-1}$ or -$\mathjs{4294967295}$, depending on the signedness of the type. - -\subsubsection*{The $\fixnum$ type} - -This type represents integers in the range $[0, 2^{31})$, which are -both valid signed and unsigned integers. Literals in this range are -given the type $\fixnum$ rather than $\signed$ or $\unsigned$, since -either way they have the same representation as an unboxed 32-bit -integer. - -\subsubsection*{The $\int$ type} - -This is the type of 32-bit integers whose sign is not known. Again, -optimizing engines can represent them as unboxed 32-bit integers. But -because the sign is not known, they cannot be allowed to escape to -external JavaScript, as it is impossible to determine exactly which -JavaScript value they represent. While this might not seem like a very -useful type, the JavaScript bitwise coercions can be used to force an -$\int$ value back to $\signed$ or $\unsigned$ without any loss of -data. - -The conditional operators also produce the $\int$ type, even though, -according to the JavaScript semantics, they produce boolean -values. Since boolean values convert to the integer values -$\mathjs{0}$ and $\mathjs{1}$, it is sound to represent the boolean -values in an optimizing engine as integers, even while allowing them -to be stored in integer values and passed to integer -arithmetic. Similarly, integer values can be treated as ``boolish'' in -JavaScript when used in conditional contexts, so it is safe to store -boolean values as unboxed integers even when being used in the test -expression of an $\mathjs{if}$ statement and the like. - -\subsubsection*{The $\intish$ type} - -The JavaScript arithmetic operations can be performed on 32-bit -integer values, but their results may produce non-integer values. For -example, addition and subtraction can overflow to large numbers that -exceed the 32-bit integer range, and integer division can produce a -non-integer value. However, if the result is coerced back to an -integer, the resulting arithmetic operation behaves identically to the -typical corresponding machine operation (i.e., integer addition, -subtraction, or division). The $\intish$ type represents the result of -a JavaScript integer artihmetic operation that must be coerced back to -integer with an explicit coercion. Because this type can only be used -as an argument to a coercion (or silently ignored in an expression -statement), $\mathjs{asm.js}$ integer arithmetic can always be -implemented in an optimizing engine by the machine integer artithmetic -operations. - -The one arithmetic operation that does not quite fit into this story -is multiplication. Multiplying two large integers can results in a -large enough double that some lower bits of precision are lost, so -that coercing the result back to integer does {\it not} behave -identically to the machine operation. The use of the proposed ES6 -$\mathjs{Math.imul}$ function~\cite{imul} as an FFI function is -recommended as the proper means of implementing integer -multiplication. - -In short: - -\begin{quote} -The $\intish$ type represents the result of integer operations that -must be dropped or immediately coerced via $\mathit{ToInt32}$ or -$\mathit{ToUint32}$. -\end{quote} - -\subsubsection*{The $\doublish$ type} - -Similarly, the $\doublish$ type represents operations that are -expected to produce a $\double$ but may produce additional junk that -must be coerced back to a number via $\mathit{ToNumber}$. In -particular, reading from the typed array may produce -$\mathjs{undefined}$, and calling FFI functions may produce an -arbitrary JavaScript value. Thus: - -\begin{quote} -The $\doublish$ type represents the result of numeric operations that -must be dropped or immediately coerced via $\mathit{ToNumber}$. -\end{quote} - -\subsubsection*{The $\unk$ type} - -Calling an external JavaScript function through the FFI results in an -arbitrary JavaScript value. Because $\mathjs{asm.js}$ is designed to -avoid dealing with general values, the result must be coerced to one -of the other types before it can be used. The $\unk$ type represents -one of these result values before being coerced to an integer or -double. - -\subsubsection*{The $\void$ type} - -A function that returns $\mathjs{undefined}$ is considered to have the -$\void$ result type. The $\mathjs{undefined}$ value is not actually a -first-class value in $\mathjs{asm.js}$. It can only be ignored via an -expression statement. This avoids having to represent it at all as -data. - -\subsection{Global types} - -Validation tracks the types not only of expressions and local -variables but also global variables, FFI imports, and functions. In -addition to variables of expression type, globals may also be typed -array views on the module's buffer, imported FFI constants and -functions, and functions defined in the $\mathjs{asm.js}$ module. -\[ -\gamma ::= \tau ~|~ \view{n}{\tau} ~|~ (\funty{\seq{\sigma}}{\tau}) \land \cdots \land (\funty{\seq{\sigma'}}{\tau'}) ~|~ \Fun -\] - -The type of a typed array tracks the number of bytes per element and -the elements' value type ($\intish$ or $\doublish$). A function type -may be overloaded to allow different parameter types, potentially -providing different result types for each overloading. - -\subsection{Operator types} - -Every operator, unary or binary, has an overloaded function type. -This overloading corresponds to the different machine operations used -in an optimizing engine to implement the various cases. Whereas -JavaScript generally needs to choose the behavior of operators -dynamically, $\mathjs{asm.js}$ makes it possible to resolve the -overloaded operators statically based on the types of the operands. - -The types of the arithmetic operators are as follows: -\[ -\begin{array}{rcc@{\ }l} -\mathjs{+} & : & & \funty{\double, \double}{\double} \\ -% & & \land & \funty{\int, \int}{\intish} \\ -\mathjs{-} & : & & \funty{\doublish, \doublish}{\double} \\ -% & & \land & \funty{\int, \int}{\intish} \\ -\mathjs{*} & : & & \funty{\doublish, \doublish}{\double} \\ -\mathjs{/} & : & & \funty{\doublish, \doublish}{\double} \\ - & & \land & \funty{\signed, \signed}{\intish} \\ - & & \land & \funty{\unsigned, \unsigned}{\intish} \\ -\mathjs{\%} & : & & \funty{\doublish, \doublish}{\double} \\ - & & \land & \funty{\signed, \signed}{\int} \\ - & & \land & \funty{\unsigned, \unsigned}{\int} \\ -\end{array} -\] -%% Note that some operations produce the type $\intish$, indicating that -%% their result must be immediately coerced back to an integer. Note also -%% that some operations accept $\doublish$ arguments, because they coerce -%% them immediately with $\mathit{ToNumber}$. (This is not the case for -%% the binary $\mathjs{+}$ operator, which therefore requires its -%% argument to be a true $\double$.) -The type of addition and subtraction only deals with floating-point -arithmetic; for integer addition and subtraction see -Section~\ref{sec:exprjudge}. Similarly, the $\mathjs{*}$ operator -provides only floating-point multiplication; integer multiplication -can be implemented via the $\imul$ function. The $\mathjs{/}$ operator -does provide both floating-point and integer division; for the latter -it produces the type $\intish$, which requires a coercion via the -bitwise operators to produce the proper integer result. The -$\mathjs{\%}$ operator works as either a floating-point or integer -operator and produces the correct result without any need for a -coercion. - -The bitwise operators are one of only two places in the language that -can consume an $\intish$ expression. Every one of these operators can -be composed with the arithmetic operators to produce the correct -behavior of integer arithmetic. -\[ -\begin{array}{rcc@{\ }l} -\mathjs{|}, \mathjs{\&}, \mathjs{\^{}}, \mathjs{<<}, \mathjs{>>} - & : & & \funty{\intish, \intish}{\signed} \\ -\mathjs{>>>} & : & & \funty{\intish, \intish}{\unsigned} \\ -\end{array} -\] - -The conditional operators rely on the sign of their input and produce -a boolean result: -\[ -\begin{array}{rcc@{\ }l} -\mathjs{<}, \mathjs{<=}, \mathjs{>}, \mathjs{>=}, \mathjs{==}, \mathjs{!=} - & : & & \funty{\signed, \signed}{\int} \\ - & & \land & \funty{\unsigned, \unsigned}{\int} \\ - & & \land & \funty{\double, \double}{\int} \\ -\end{array} -\] - -Finally, the unary operators have function types as well; unary -operations can also serve as coercions: the $\mathjs{+}$ operator -converts integers and the results of typed array reads and FFI calls -to $\double$, and the $\mathjs{\~{}}$ operator can be used to coerce -$\intish$ expressions, similar to the two-argument bitwise operators. -\[ -\begin{array}{rcc@{\ }l} -\mathjs{+} & : & & \funty{\signed}{\double} \\ - & & \land & \funty{\unsigned}{\double} \\ - & & \land & \funty{\doublish}{\double} \\ -\mathjs{-} & : & & \funty{\int}{\intish} \\ - & & \land & \funty{\doublish}{\double} \\ -\mathjs{\~{}} & : & & \funty{\intish}{\signed} \\ -\end{array} -\] - -\section{Validation} - -This section describes the $\mathjs{asm.js}$ validation process, which -is essentially a static type system. - -\subsection{Standard libraries} - -The JavaScript $\mathjs{Math}$ API is recognized as a typed standard -library; most of its functions are allowed as imports with the same -name and are given appropriate function types. These functions must be -passed into the import environment under their respective names (e.g., -$\mathjs{Math.sin}$ under the name $g\mathjs{.Math.sin}$). Building in -support for these standard functions allows optimizing engines to -build special support for them---particularly the $\imul$ operation, -which can be implemented with hardware multiplication instructions. -\[ -\begin{array}{rcl} -M(\mathtt{acos}), M(\mathtt{asin}), M(\mathtt{atan}) & = & \funty{\doublish}{\double} \\ -M(\mathtt{cos}), M(\mathtt{sin}), M(\mathtt{tan}) & = & \funty{\doublish}{\double} \\ -M(\mathtt{ceil}), M(\mathtt{floor}) & = & \funty{\doublish}{\double} \\ -M(\mathtt{exp}), M(\mathtt{log}), M(\mathtt{sqrt}) & = & \funty{\doublish}{\double} \\ -M(\mathtt{abs}) & = & \funty{\signed}{\unsigned} \\ - & \land & \funty{\doublish}{\double} \\ -M(\mathtt{atan2}), M(\mathtt{pow}) & = & \funty{\doublish, \doublish}{\double} \\ -M(\imul) & = & \funty{\int, \int}{\signed} \\ -M(\mathtt{random}) & = & \funty{}{\double} \\ -M(\mathtt{E}) & = & \double \\ -M(\mathtt{LN10}), M(\mathtt{LN2}), M(\mathtt{LOG2E}), M(\mathtt{LOG10E}) & = & \double \\ -M(\mathtt{PI}) & = & \double \\ -M(\mathtt{SQRT1\_2}), M(\mathtt{SQRT2}) & = & \double \\ -\end{array} -\] - -\subsection{View types} - -The typed array constructors are also recognized as imports in the -import environment, each under its standard name. Calling the various -typed arrays constructors on the buffer produces typed array views of -various types. -\[ -\begin{array}{rcl} -V(\mathtt{Uint8Array}), V(\mathtt{Int8Array}) & = & \view{1}{\intsm} \\ -V(\mathtt{Uint16Array}), V(\mathtt{Int16Array}) & = & \view{2}{\intsm} \\ -V(\mathtt{Uint32Array}), V(\mathtt{Int32Array}) & = & \view{4}{\intsm} \\ -V(\mathtt{Float32Array}) & = & \view{4}{\doublesm} \\ -V(\mathtt{Float64Array}) & = & \view{8}{\doublesm} \\ -\end{array} -\] - -\subsection{Global constants} - -\[ -\begin{array}{rcl} -G(\mathtt{Infinity}), G(\mathtt{NaN}) & = & \double \\ -\end{array} -\] - -\subsection{Annotations} - -Type annotations are provided in the form of explicit -coercions. Variables in $\mathjs{asm.js}$ are always taken to have the -type $\double$ or $\int$, never $\signed$ or $\unsigned$. This is -because they are intended to be representable as unboxed 32-bit words -in memory or registers, which are agnostic about what sign to -interpret the bits with. - -\[ -\begin{array}{rcl} -\vartype(\todouble{x}), \vartype(r) & = & \double \\ -\vartype(x\mathjs{|0}), \vartype(i) & = & \int \mbox{ $(-2^{31} \leq i < 2^{32})$} -\end{array} -\] - -Function return types are determined by explicit coercions in their -return statements. Function return types are always explicit about -their sign so that they can be exported to external JavaScript. - -\[ -\begin{array}{rcl} -\rettype(\todouble{e}), \rettype(r) & = & \double \\ -\rettype(e\mathjs{|0}), \rettype(i) & = & \signed \mbox{ $(-2^{31} \leq i < 2^{31})$} \\ -\rettype(\epsilon) & = & \void \\ -\end{array} -\] - -The type of a function can be extracted by looking at its parameter -annotations and return statements. - -\[ -\begin{array}{l} -\funtype(\fun{f}{\seq{x}}{\seq{x\mathjs{ = }\mathit{ann}_x\mathjs{;}}\ \seq{\var{\seq{y\mathjs{ = }v}}}\ \mathit{ss}\ \return{[\mathit{re}]}}) = \funty{\seq{\sigma}}{\tau} \\ -\qquad \mbox{where } \forall i . \vartype(\mathit{ann}_{x_i}) = \sigma_i \\ -\qquad \mbox{and } \rettype([\mathit{re}]) = \tau \\ -\funtype(\fun{f}{\seq{x}}{\seq{x\mathjs{ = }\mathit{ann}_x\mathjs{;}}\ \seq{\var{\seq{y\mathjs{ = }v}}}\ \mathit{ss}\ s}) = \funty{\seq{\sigma}}{\void} \\ -\qquad \mbox{where } \forall i . \vartype(\mathit{ann}_{x_i}) = \sigma_i \\ -\qquad \mbox{and } s \not= \return{[\mathit{re}]} \\ -\funtype(\fun{f}{\seq{x}}{\seq{x\mathjs{ = }\mathit{ann}_x\mathjs{;}}\ \seq{\var{\seq{y\mathjs{ = }v}}}\ \epsilon}) = \funty{\seq{\sigma}}{\void} \\ -\qquad \mbox{where } \forall i . \vartype(\mathit{ann}_{x_i}) = \sigma_i \\ -\end{array} -\] - -The types of import expressions are determined by the standard library -metafunctions $G$, $M$, and $V$ or by their coercion. A foreign import -with no coercion is assumed to be a function. - -\[ -\begin{array}{l} -\imptype(\mathit{global}\mathjs{.}x) = G(x) \\ -\imptype(\mathit{global}\mathjs{.Math.}x) = M(x) \\ -\imptype(\mathjs{new }\funcall{\mathit{global}\mathjs{.}x}{\mathit{buffer}}) = V(y) \\ -\imptype(\mathit{foreign}\mathjs{.}x\mathjs{|0}) = \signed \\ -\imptype(\mathjs{+}\mathit{foreign}\mathjs{.}x) = \double \\ -\imptype(\mathit{foreign}\mathjs{.}x) = \Fun \\ -\end{array} -\] - -\subsection{Module validation} - -Module validation takes an $\mathjs{asm.js}$ module and constructs a -{\it global environment} $\Delta$, which is used to track the types of -all globals: imports, buffer views, global variables, and functions. -\[ -\begin{array}{rcl} -\mu & ::= & \mut ~|~ \imm \\ -\Delta & ::= & \{ \seq{x : \mu\,\gamma} \} \\ -\end{array} -\] -Validation then uses this environment to check the imports, exports, -and function definitions. - -\newsavebox{\modjudge} -\begin{lrbox}{\modjudge} -\begin{minipage}[t]{3in} -\vspace{-.25in} -\[ -\begin{array}{rll} - & \mathjs{function }[f]\mathjs{(}[\mathit{global}[, \mathit{foreign}[, \mathit{buffer}]]]\mathjs{) \char123{}} \\ - & \qquad\mathjs{"use asm";} \\ - & \qquad\seq{\var{\seq{x \mathjs{ = } \mathit{imp}}}} \\ -\vdash & \qquad\seq{\mathit{fn}_g} & \ok \\ - & \qquad\seq{\var{\seq{y \mathjs{ = } v}}} \\ - & \qquad\mathit{exp} \\ - & \mathjs{\char125{}} \\ -\end{array} -\] -\end{minipage} -\end{lrbox} - -\[ -\begin{array}{c} -\multicolumn{1}{r}{\fbox{$\progjudge{\mathit{mod}}$}} -\rulebreak -\inferrule* [lab=\rel{T-Module}] - {\Delta = \{ \seq{x : \imm\,\imptype(\mathit{imp})}, \seq{g : \imm\,\funtype(\mathit{fn}_g)}, \seq{y : \mut\,\vartype(v)} \} \\\\ - %%\forall i . \impjudge{[g]}{[e]}{[b]}{\Delta}{\mathit{imp}_x} \\ - \seq{x}, \seq{y}, \seq{g}, [f], [\mathit{global}], [\mathit{foreign}], [\mathit{buffer}]\ \mbox{distinct} \\ - \forall i . \fnjudge{\Delta}{\mathit{fn}_f} \\ - \forall i . \expjudge{\Delta}{\mathit{exp}}} - {\usebox{\modjudge}} -% {\progjudge{\fun{[m]}{[g[, e[, b]]}{\mathjs{"use asm";}\ \seq{\mathit{imp}_x}\ \seq{\mathit{fn}_f}\ \seq{\var{\seq{y \mathjs{ = } v}}}\ \mathit{exp}}}} -\end{array} -\] - -For simplicity of the specification, we leave as an assumption that -the same $\mathit{global}$, $\mathit{foreign}$, and $\mathit{buffer}$ -variables are used consistently throughout the module. An actual -validator must check this assumption. Similarly, we assume the -existence of a single $\mathit{mask}$ constant used throughout the -module, which a real validator would have to check. - -%% \subsection{Import validation} - -%% Declarations in the import section of an $\mathjs{asm.js}$ module can -%% be known library functions, unknown FFI functions, typed array views, -%% or imported constants. - -%% \[ -%% \begin{array}{c} -%% \multicolumn{1}{r}{\fbox{$\impjudge{[g]}{[e]}{[b]}{\Delta}{\mathit{imp}}$}} -%% \rulebreak -%% \inferrule* [lab=\rel{T-ImportStd}] -%% {\iejudge{[g]}{[e]}{\mathit{ie}}{\Delta(x)}} -%% {\impjudge{[g]}{[e]}{[b]}{\Delta}{\var{x \mathjs{ = } \mathit{ie}}}} -%% \qquad -%% \inferrule* [lab=\rel{T-ImportFFI}] -%% {\iejudge{[g]}{[e]}{\mathit{ie}}{\epsilon} \\\\ -%% \Delta(x) = \Fun} -%% {\impjudge{[g]}{[e]}{[b]}{\Delta}{\var{x \mathjs{ = } \mathit{ie}}}} -%% \\ \\ -%% \inferrule* [lab=\rel{T-ImportInt}] -%% {\iejudge{[g]}{[e]}{\mathit{ie}}{\tau} \\\\ -%% \tau <: \intish \\ -%% \Delta(x) = \signed} -%% {\impjudge{[g]}{[e]}{[b]}{\Delta}{\var{x \mathjs{ = } \mathit{ie}\mathjs{|0}}}} -%% \qquad -%% \inferrule* [lab=\rel{T-ImportDouble}] -%% {\iejudge{[g]}{[e]}{\mathit{ie}}{\tau} \\\\ -%% \tau <: \doublish \\ -%% \Delta(x) = \double} -%% {\impjudge{[g]}{[e]}{[b]}{\Delta}{\var{x \mathjs{ = +}\mathit{ie}}}} -%% \\ \\ -%% \inferrule* [lab=\rel{T-ImportView}] -%% {\Delta(x) = V(y)} -%% {\impjudge{g}{[e]}{b}{\Delta}{\var{x \mathjs{ = new } g\mathjs{.}y(b)}}} -%% %% \\ \\ -%% %% \inferrule* [lab=\rel{T-ImportStd}] -%% %% {\Delta(x) = M(y)} -%% %% {\impjudge{[g]}{[e]}{[b]}{\Delta}{\var{x \mathjs{ = } e\mathjs{.}y}}} -%% %% \qquad -%% %% \inferrule* [lab=\rel{T-ImportFFI}] -%% %% {y \not\in\dom(M), \dom(A) \\\\ -%% %% \Delta(x) = \Fun} -%% %% {\impjudge{[g]}{e}{[b]}{\Delta}{\var{x \mathjs{ = } c\mathjs{.}y}}} -%% %% \\ \\ -%% %% \inferrule* [lab=\rel{T-View}] -%% %% {\Delta(x) = \view{n}{A(y)}} -%% %% {\impjudge{[g]}{e}{b}{\Delta}{\var{x \mathjs{ = new } c\mathjs{.}y(b)}}} -%% %% \\ \\ -%% %% \inferrule* [lab=\rel{T-ImportInt}] -%% %% {\Delta(x) = \int} -%% %% {\impjudge{[g]}{e}{[b]}{\Delta}{\var{x \mathjs{ = }c\mathjs{.}y\mathjs{|0}}}} -%% %% \qquad -%% %% \inferrule* [lab=\rel{T-ImportDouble}] -%% %% {\Delta(x) = \double} -%% %% {\impjudge{[g]}{e}{[b]}{\Delta}{\var{x \mathjs{ = +}c\mathjs{.}y}}} -%% \end{array} -%% \] - -%% \[ -%% \begin{array}{c} -%% \multicolumn{1}{r}{\fbox{$\iejudge{[g]}{[e]}{\mathit{ie}}{[\gamma]}$}} -%% \rulebreak -%% \inferrule* [lab=\rel{T-Global}] -%% {y \in \dom(G)} -%% {\iejudge{g}{[e]}{g\mathjs{.}y}{G(y)}} -%% \qquad -%% \inferrule* [lab=\rel{T-Math}] -%% {y \in \dom(M)} -%% {\iejudge{g}{[e]}{g\mathjs{.Math.}y}{M(y)}} -%% \qquad -%% \inferrule* [lab=\rel{T-FFI}] -%% { } -%% {\iejudge{[g]}{e}{e\mathjs{.}y}{\epsilon}} -%% \end{array} -%% \] - -\subsection{Function validation} - -Function validation proceeds in several steps. First, a local -environment is constructed with bindings for the parameters and local -variables, based on their annotations and initializers, -respectively. Next, the body of the function is checked in this -environment. Finally, if the function has a non-$\void$ return type, -the body is checked to ensure that all control flow paths definitely -return a value (see Section~\ref{sec:cfa}). - -\[ -\begin{array}{c} -\multicolumn{1}{r}{\fbox{$\fnjudge{\Delta}{\mathit{fn}}$}} -\rulebreak -\inferrule* [lab=\rel{T-Function}] - {\seq{x}, \seq{y}\ \mbox{distinct} \\ - \Delta(f) = \imm\,\funty{\seq{\sigma}}{\tau} \\ - \seq{\sigma} = \seq{\vartype(\mathit{ann}_x)} \\\\ - \sjudge{\Delta}{\{ \seq{x : \sigma}, \seq{y : \vartype(v)} \}}{\tau}{\mathit{ss}}} - {\fnjudge{\Delta}{\fun{f}{\seq{x}}{\seq{x\mathjs{ = }\mathit{ann}_x\mathjs{;}}\ \seq{\var{\seq{y\mathjs{ = }v}}}\ \mathit{ss}}}} -\end{array} -\] - -\subsection{Export validation} - -Export validation ensures that all exports are functions. - -\[ -\begin{array}{c} -\multicolumn{1}{r}{\fbox{$\expjudge{\Delta}{\mathit{exp}}$}} -\rulebreak -\inferrule* [lab=\rel{T-Singleton}] - {\Delta(f) = \imm\,\funty{\seq{\sigma}}{\tau}} - {\expjudge{\Delta}{\return{f}}} -\qquad -\inferrule* [lab=\rel{T-Module}] - {\forall f . \Delta(f) = \imm\,\funty{\seq{\sigma}}{\tau}} - {\expjudge{\Delta}{\return{\mathjs{\char123{} } \seq{x \mathjs{:} f} \mathjs{ \char125{}}}}} -\end{array} -\] - -\subsection{Statement list validation} - -\[ -\begin{array}{c} -\multicolumn{1}{r}{\fbox{$\sjudge{\Delta}{\Gamma}{\tau}{\mathit{ss}}$}} -\rulebreak -\inferrule* [lab=\rel{T-Statements}] - {\forall i . \sjudge{\Delta}{\Gamma}{\tau}{s_i}} - {\sjudge{\Delta}{\Gamma}{\tau}{\seq{s}}} -\end{array} -\] - - -\subsection{Statement validation} - -\newsavebox{\switchcontrol} -\begin{lrbox}{\switchcontrol} -\begin{minipage}[t]{2.87in} -\vspace{-.25in} -\[ -\varepsilon = \left\{ \begin{array}{ll} - \mustret & \mbox{if}\ \varepsilon_n = \mustret \land \forall i . \varepsilon_i \cup \emptyset = \emptyset \\ - \bigcup \varepsilon_i - \{ \epsilon \} & \mbox{otherwise} - \end{array} \right. -\] -\end{minipage} -\end{lrbox} - -\[ -\begin{array}{c} -\multicolumn{1}{r}{\fbox{$\sjudge{\Delta}{\Gamma}{\tau}{s}$}} -\rulebreak -\inferrule* [lab=\rel{T-Block}] - {\sjudge{\Delta}{\Gamma}{\tau}{\mathit{ss}}} - {\sjudge{\Delta}{\Gamma}{\tau}{\block{\mathit{ss}}}} -\qquad -\inferrule* [lab=\rel{T-ExprStmt}] - {\exprjudge{\Delta}{\Gamma}{e}{\sigma}} - {\sjudge{\Delta}{\Gamma}{\tau}{e\mathjs{;}}} -\qquad -\inferrule* [lab=\rel{T-EmptyStatement}] - { } - {\sjudge{\Delta}{\Gamma}{\tau}{\mathjs{;}}} -\\ \\ -\inferrule* [lab=\rel{T-If}] - {\exprjudge{\Delta}{\Gamma}{e}{\boolish} \\\\ - \sjudge{\Delta}{\Gamma}{\tau}{s}} - {\sjudge{\Delta}{\Gamma}{\tau}{\ifone{e}{s}}} -\qquad -\inferrule* [lab=\rel{T-IfElse}] - {\exprjudge{\Delta}{\Gamma}{e}{\boolish} \\\\ - \sjudge{\Delta}{\Gamma}{\tau}{s_1} \\ - \sjudge{\Delta}{\Gamma}{\tau}{s_2}} - {\sjudge{\Delta}{\Gamma}{\tau}{\iftwo{e}{s_1}{s_2}}} -\\ \\ -\inferrule* [lab=\rel{T-ReturnExpr}] - {\exprjudge{\Delta}{\Gamma}{\mathit{re}}{\tau} \\\\ - \rettype(\mathit{re}) = \tau} - {\sjudge{\Delta}{\Gamma}{\tau}{\return{\mathit{re}}}} -%% \qquad -%% \inferrule* [lab=\rel{T-ReturnDouble}] -%% {\exprjudge{\Delta}{\Gamma}{e}{\double}} -%% {\sjudge{\Delta}{\Gamma}{\double}{\return{\mathjs{+}e}}} -\qquad -\inferrule* [lab=\rel{T-ReturnVoid}] - { } - {\sjudge{\Delta}{\Gamma}{\void}{\mathtt{return;}}} -\\ \\ -\inferrule* [lab=\rel{T-While}] - {\exprjudge{\Delta}{\Gamma}{e}{\int} \\\\ - \sjudge{\Delta}{\Gamma}{\tau}{s}} - {\sjudge{\Delta}{\Gamma}{\tau}{\while{e}{s}}} -\qquad -\inferrule* [lab=\rel{T-DoWhile}] - {\sjudge{\Delta}{\Gamma}{\tau}{s} \\\\ - \exprjudge{\Delta}{\Gamma}{e}{\int}} - {\sjudge{\Delta}{\Gamma}{\tau}{\dowhile{s}{e}}} -\\ \\ -\inferrule* [lab=\rel{T-For}] - {[\exprjudge{\Delta}{\Gamma}{e_1}{\sigma_1}] \\ - [\exprjudge{\Delta}{\Gamma}{e_2}{\int}] \\ - [\exprjudge{\Delta}{\Gamma}{e_3}{\sigma_3}] \\\\ - \sjudge{\Delta}{\Gamma}{\tau}{s}} - {\sjudge{\Delta}{\Gamma}{\tau}{\for{[e_1]}{[e_2]}{[e_3]}{s}}} -\\ \\ -\inferrule* [lab=\rel{T-Break}] - { } - {\sjudge{\Delta}{\Gamma}{\tau}{\brkl{[\mathit{lab}]}}} -\qquad -\inferrule* [lab=\rel{T-Continue}] - { } - {\sjudge{\Delta}{\Gamma}{\tau}{\contl{[\mathit{lab}]}}} -\qquad -\inferrule* [lab=\rel{T-Label}] - {\sjudge{\Delta}{\Gamma}{\tau}{s}} - {\sjudge{\Delta}{\Gamma}{\tau}{\lab{\mathit{lab}}{s}}} -\\ \\ -\inferrule* [lab=\rel{T-Switch}] - {\exprjudge{\Delta}{\Gamma}{e}{\sigma} \\ - \sigma \in \{ \signed, \unsigned \} \\ - \forall i . \exprjudge{\Delta}{\Gamma}{v_i}{\sigma} \\\\ - \forall i . \sjudge{\Delta}{\Gamma}{\tau}{\mathit{ss}_i} \\ - [\sjudge{\Delta}{\Gamma}{\tau}{\mathit{ss}}]} - {\sjudge{\Delta}{\Gamma}{\tau}{\switch{e}{\seq{\mathjs{case }v_i\mathjs{:}\,\mathit{ss}_i}\ [\mathjs{default:}\,\mathit{ss}]}}} -\end{array} -\] - -\subsection{Case validation} - -\[ -\begin{array}{c} -\multicolumn{1}{r}{\fbox{$\sjudge{\Delta}{\Gamma}{\tau}{\mathit{cd}}$}} -\rulebreak -\inferrule* [lab=\rel{T-Case}] - {\sjudge{\Delta}{\Gamma}{\tau}{\mathit{ss}}} - {\sjudge{\Delta}{\Gamma}{\tau}{\mathjs{case }v\mathjs{:}\,\mathit{ss}}} -\qquad -\inferrule* [lab=\rel{T-Default}] - {\sjudge{\Delta}{\Gamma}{\tau}{\mathit{ss}}} - {\sjudge{\Delta}{\Gamma}{\tau}{\mathjs{default:}\,\mathit{ss}}} -\end{array} -\] - -%% \subsection{Must-return analysis} -%% \label{sec:cfa} - -%% \[ -%% \begin{array}{rcl} -%% \breaks(\seq{s}) & = & \bigcup_i \breaks(s_i) \\ -%% \breaks(\block{\mathit{ss}}) & = & \breaks(\mathit{ss}) \\ -%% \breaks(\ifone{e}{s}) & = & \breaks(s) \\ -%% \breaks(\iftwo{e}{s_1}{s_2}) & = & \breaks(s_1) \cup \breaks(s_2) \\ -%% \breaks(\while{e}{s}) & = & \breaks(s) - \{ \epsilon \} \\ -%% \breaks(\dowhile{s}{e}) & = & \breaks(s) - \{ \epsilon \} \\ -%% \breaks(\for{[e_1]}{[e_2]}{[e_3]}{s}) & = & \breaks(s) - \{ \epsilon \} \\ -%% \breaks(\brk) & = & \{ \epsilon \} \\ -%% \breaks(\brkl{\mathit{lab}}) & = & \{ \mathit{lab} \} \\ -%% \breaks(\lab{\mathit{lab}}{s}) & = & \breaks(s) - \{ \mathit{lab} \} \\ -%% \breaks(\switch{e}{\seq{\mathit{cd}}}) & = & \bigcup_i \breaks(\mathit{cd}_i) - \{ \epsilon \} \\ -%% \breaks(s) \mbox{ (otherwise)} & = & \emptyset \\ -%% \breaks(\mathjs{case }v\mathjs{:}\,\mathit{ss}) & = & \breaks(\mathit{ss}) \\ -%% \breaks(\mathjs{default:}\,\mathit{ss}) & = & \breaks(\mathit{ss}) \\ -%% \end{array} -%% \] - -%% \[ -%% \begin{array}{l} -%% \returns(\seq{s}) \\ -%% \qquad \mbox{if } \returns(s_m) \land \forall i < m . \breaks(s_m) = \emptyset \mbox{ for some } m \\ -%% \returns(\block{\mathit{ss}}) \\ -%% \qquad \mbox{if } \returns(ss) \\ -%% \returns(\iftwo{e}{s_1}{s_2}) \\ -%% \qquad \mbox{if } \returns(s_1) \land \returns(s_2) \\ -%% \returns(\dowhile{s}{e}) \\ -%% \qquad \mbox{if } \returns(s) \\ -%% \returns(\switch{e}{\seq{\mathit{cd}}}) \\ -%% \qquad \mbox{if } \returns(cd_n) \land \forall i . \breaks(cd_i) = \emptyset \\ -%% \returns(\mathjs{case }v\mathjs{:}\,\mathit{ss}) \\ -%% \qquad \mbox{if } \returns(\mathit{ss}) \\ -%% \returns(\mathjs{default:}\,\mathit{ss}) \\ -%% \qquad \mbox{if } \returns(\mathit{ss}) -%% \end{array} -%% \] - -\subsection{Expression validation} -\label{sec:exprjudge} - -\[ -(\Delta\cdot\Gamma)(x) = \left\{\begin{array}{ll} - \Gamma(x) & \mbox{if}\ x \in\dom(\Gamma) \\ - \gamma & \mbox{if}\ \Delta(x) = \mu\,\gamma \\ - \end{array} \right. -\] - -\[ -\begin{array}{lr} -\mbox{Expression validation} & \hfil \fbox{$\exprjudge{\Delta}{\Gamma}{e}{\tau}$} -\rulebreak -\multicolumn{2}{c}{ -\begin{array}{c} -\inferrule* [lab=\rel{T-Signed}] - {-2^{31} \leq i < 0} - {\exprjudge{\Delta}{\Gamma}{i}{\signed}} -\qquad -\inferrule* [lab=\rel{T-Fixnum}] - {0 \leq i < 2^{31}} - {\exprjudge{\Delta}{\Gamma}{i}{\fixnum}} -\qquad -\inferrule* [lab=\rel{T-Unsigned}] - {2^{31} \leq i < 2^{32}} - {\exprjudge{\Delta}{\Gamma}{i}{\unsigned}} -\\ \\ -\inferrule* [lab=\rel{T-Double}] - { } - {\exprjudge{\Delta}{\Gamma}{r}{\double}} -\qquad -\inferrule* [lab=\rel{T-VarRef}] - {(\Delta\cdot\Gamma)(x) = \tau} - {\exprjudge{\Delta}{\Gamma}{x}{\tau}} -\\ \\ -\inferrule* [lab=\rel{T-SetLocal}] - {\exprjudge{\Delta}{\Gamma}{e}{\tau} \\ - \tau <: \Gamma(x)} - {\exprjudge{\Delta}{\Gamma}{x\mathjs{ = }e}{\tau}} -\qquad -\inferrule* [lab=\rel{T-SetGlobal}] - {x \not\in\dom(\Gamma) \\ - \Delta(x) = \mut\,\sigma \\\\ - \exprjudge{\Delta}{\Gamma}{e}{\tau} \\ - \tau <: \sigma} - {\exprjudge{\Delta}{\Gamma}{x\mathjs{ = }e}{\tau}} -\\ \\ -\inferrule* [lab=\rel{T-LoadImm}] - {(\Delta\cdot\Gamma)(x) = \view{n}{\tau} \\\\ - i \equiv 0 \mod n \\ - 0 \leq i \leq \mathit{mask} \\\\ - \exprjudge{\Delta}{\Gamma}{e}{\intish}} - {\exprjudge{\Delta}{\Gamma}{\getprop{x}{i}}{\tau}} -\qquad -\inferrule* [lab=\rel{T-StoreImm}] - {(\Delta\cdot\Gamma)(x) = \view{n}{\tau} \\\\ - i \equiv 0 \mod n \\ - 0 \leq i \leq \mathit{mask} \\\\ - \exprjudge{\Delta}{\Gamma}{e_1}{\intish} \\ - \exprjudge{\Delta}{\Gamma}{e_2}{\tau}} - {\exprjudge{\Delta}{\Gamma}{\getprop{x}{i}\mathjs{ = }e_2}{\tau}} -\\ \\ -\inferrule* [lab=\rel{T-LoadByte}] - {(\Delta\cdot\Gamma)(x) = \view{1}{\intsm} \\\\ - \exprjudge{\Delta}{\Gamma}{e}{\intish}} - {\exprjudge{\Delta}{\Gamma}{\getprop{x}{e\mathjs{ \& } \mathit{mask}}}{\tau}} -\qquad -\inferrule* [lab=\rel{T-StoreByte}] - {(\Delta\cdot\Gamma)(x) = \view{1}{\intsm} \\\\ - \exprjudge{\Delta}{\Gamma}{e_1}{\intish} \\ - \exprjudge{\Delta}{\Gamma}{e_2}{\tau}} - {\exprjudge{\Delta}{\Gamma}{\getprop{x}{e_1\mathjs{ \& } \mathit{mask}}\mathjs{ = }e_2}{\tau}} -\\ \\ -\inferrule* [lab=\rel{T-Load}] - {(\Delta\cdot\Gamma)(x) = \view{n}{\tau} \\\\ - \mathit{shift} = \log_2(n) \\ - n > 1 \\\\ - \exprjudge{\Delta}{\Gamma}{e}{\intish}} - {\exprjudge{\Delta}{\Gamma}{\getprop{x}{\paren{e\mathjs{ \& } \mathit{mask}}\mathjs{ >> } \mathit{shift}}}{\tau}} -\qquad -\inferrule* [lab=\rel{T-Store}] - {(\Delta\cdot\Gamma)(x) = \view{n}{\tau} \\\\ - \mathit{shift} = \log_2(n) \\ - n > 1 \\\\ - \exprjudge{\Delta}{\Gamma}{e_1}{\intish} \\ - \exprjudge{\Delta}{\Gamma}{e_2}{\tau}} - {\exprjudge{\Delta}{\Gamma}{\getprop{x}{\paren{e_1\mathjs{ \& } \mathit{mask}}\mathjs{ >> } \mathit{shift}}\mathjs{ = }e_2}{\tau}} -\end{array} -} -\end{array} -\] - -\[ -\begin{array}{lr} -\mbox{Expression validation (cont'd)} & \hfil \fbox{$\exprjudge{\Delta}{\Gamma}{e}{\tau}$} -\rulebreak -\multicolumn{2}{c}{ -\begin{array}{c} -\inferrule* [lab=\rel{T-FunCall}] - {(\Delta\cdot\Gamma)(f) = \_ \land \funty{\seq{\sigma}}{\tau} \land \_ \\\\ - \forall i . \exprjudge{\Delta}{\Gamma}{e_i}{\sigma_i}} - {\exprjudge{\Delta}{\Gamma}{\funcall{f}{\seq{e}}}{\tau}} -\qquad -\inferrule* [lab=\rel{T-FFICall}] - {(\Delta\cdot\Gamma)(f) = \Fun \\\\ - %(\Delta\cdot\Gamma)(f) = \_ \land \funty{\ldots\sigma}{\tau} \land \_ \\\\ - \forall i . \exprjudge{\Delta}{\Gamma}{e_i}{\extern}} - {\exprjudge{\Delta}{\Gamma}{\funcall{f}{\seq{e}}}{\unk}} -\\ \\ -\inferrule* [lab=\rel{T-Unop}] - {\mathit{unop} : \_ \land \funty{\sigma}{\tau} \land \_ \\\\ - \exprjudge{\Delta}{\Gamma}{e}{\sigma}} - {\exprjudge{\Delta}{\Gamma}{\mathit{unop}\ e}{\tau}} -\qquad -\inferrule* [lab=\rel{T-Binop}] - {\mathit{binop} : \_ \land \funty{\sigma_1, \sigma_2}{\tau} \land \_ \\\\ - \exprjudge{\Delta}{\Gamma}{e_1}{\sigma_1} \\ - \exprjudge{\Delta}{\Gamma}{e_2}{\sigma_2}} - {\exprjudge{\Delta}{\Gamma}{e_1\ \mathit{binop}\ e_2}{\tau}} -\\ \\ -\inferrule* [lab=\rel{T-Multiary}] - {\forall i < n . \oplus_i \in \{ +, - \} \\ - n \leq 2^{20} \\\\ - \forall i \leq n . \exprjudge{\Delta}{\Gamma}{e_i}{\int}} - {\exprjudge{\Delta}{\Gamma}{e_1 \oplus_1 \ldots \oplus_{n-1} e_n}{\intish}} -\qquad -\inferrule* [lab=\rel{T-Cond}] - {\tau \in \{ \int, \double \} \\\\ - \exprjudge{\Delta}{\Gamma}{e_1}{\int} \\\\ - \exprjudge{\Delta}{\Gamma}{e_2}{\tau} \\ - \exprjudge{\Delta}{\Gamma}{e_3}{\tau}} - {\exprjudge{\Delta}{\Gamma}{\ternary{e_1}{e_2}{e_3}}{\tau}} -\\ \\ -\inferrule* [lab=\rel{T-Paren}] - {\forall i \leq n . \exprjudge{\Delta}{\Gamma}{e_i}{\tau_i}} - {\exprjudge{\Delta}{\Gamma}{\paren{\seq{e}}}{\tau_n}} -\qquad -\inferrule* [lab=\rel{T-Sub}] - {\exprjudge{\Delta}{\Gamma}{e}{\sigma} \\ - \sigma <: \tau} - {\exprjudge{\Delta}{\Gamma}{e}{\tau}} -\qquad -\inferrule* [lab=\rel{T-Cast}] - {\exprjudge{\Delta}{\Gamma}{e}{\double}} - {\exprjudge{\Delta}{\Gamma}{\mathjs{\~{}\~{}}e}{\signed}} -\end{array} -} -\end{array} -\] - -\end{document} diff --git a/historic/mathpartir.sty b/historic/mathpartir.sty deleted file mode 100644 index 6b526e2..0000000 --- a/historic/mathpartir.sty +++ /dev/null @@ -1,447 +0,0 @@ -% Mathpartir --- Math Paragraph for Typesetting Inference Rules -% -% Copyright (C) 2001, 2002, 2003, 2004, 2005 Didier R�my -% -% Author : Didier Remy -% Version : 1.2.0 -% Bug Reports : to author -% Web Site : http://pauillac.inria.fr/~remy/latex/ -% -% Mathpartir is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2, or (at your option) -% any later version. -% -% Mathpartir is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details -% (http://pauillac.inria.fr/~remy/license/GPL). -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% File mathpartir.sty (LaTeX macros) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mathpartir} - [2005/12/20 version 1.2.0 Math Paragraph for Typesetting Inference Rules] - -%% - -%% Identification -%% Preliminary declarations - -\RequirePackage {keyval} - -%% Options -%% More declarations - -%% PART I: Typesetting maths in paragraphe mode - -%% \newdimen \mpr@tmpdim -%% Dimens are a precious ressource. Uses seems to be local. -\let \mpr@tmpdim \@tempdima - -% To ensure hevea \hva compatibility, \hva should expands to nothing -% in mathpar or in inferrule -\let \mpr@hva \empty - -%% normal paragraph parametters, should rather be taken dynamically -\def \mpr@savepar {% - \edef \MathparNormalpar - {\noexpand \lineskiplimit \the\lineskiplimit - \noexpand \lineskip \the\lineskip}% - } - -\def \mpr@rulelineskip {\lineskiplimit=0.3em\lineskip=0.2em plus 0.1em} -\def \mpr@lesslineskip {\lineskiplimit=0.6em\lineskip=0.5em plus 0.2em} -\def \mpr@lineskip {\lineskiplimit=1.2em\lineskip=1.2em plus 0.2em} -\let \MathparLineskip \mpr@lineskip -\def \mpr@paroptions {\MathparLineskip} -\let \mpr@prebindings \relax - -\newskip \mpr@andskip \mpr@andskip 2em plus 0.5fil minus 0.5em - -\def \mpr@goodbreakand - {\hskip -\mpr@andskip \penalty -1000\hskip \mpr@andskip} -\def \mpr@and {\hskip \mpr@andskip} -\def \mpr@andcr {\penalty 50\mpr@and} -\def \mpr@cr {\penalty -10000\mpr@and} -\def \mpr@eqno #1{\mpr@andcr #1\hskip 0em plus -1fil \penalty 10} - -\def \mpr@bindings {% - \let \and \mpr@andcr - \let \par \mpr@andcr - \let \\\mpr@cr - \let \eqno \mpr@eqno - \let \hva \mpr@hva - } -\let \MathparBindings \mpr@bindings - -% \@ifundefined {ignorespacesafterend} -% {\def \ignorespacesafterend {\aftergroup \ignorespaces} - -\newenvironment{mathpar}[1][] - {$$\mpr@savepar \parskip 0em \hsize \linewidth \centering - \vbox \bgroup \mpr@prebindings \mpr@paroptions #1\ifmmode $\else - \noindent $\displaystyle\fi - \MathparBindings} - {\unskip \ifmmode $\fi\egroup $$\ignorespacesafterend} - -\newenvironment{mathparpagebreakable}[1][] - {\begingroup - \par - \mpr@savepar \parskip 0em \hsize \linewidth \centering - \mpr@prebindings \mpr@paroptions #1% - \vskip \abovedisplayskip \vskip -\lineskip% - \ifmmode \else $\displaystyle\fi - \MathparBindings - } - {\unskip - \ifmmode $\fi \par\endgroup - \vskip \belowdisplayskip - \noindent - \ignorespacesafterend} - -% \def \math@mathpar #1{\setbox0 \hbox {$\displaystyle #1$}\ifnum -% \wd0 < \hsize $$\box0$$\else \bmathpar #1\emathpar \fi} - -%%% HOV BOXES - -\def \mathvbox@ #1{\hbox \bgroup \mpr@normallineskip - \vbox \bgroup \tabskip 0em \let \\ \cr - \halign \bgroup \hfil $##$\hfil\cr #1\crcr \egroup \egroup - \egroup} - -\def \mathhvbox@ #1{\setbox0 \hbox {\let \\\qquad $#1$}\ifnum \wd0 < \hsize - \box0\else \mathvbox {#1}\fi} - - -%% Part II -- operations on lists - -\newtoks \mpr@lista -\newtoks \mpr@listb - -\long \def\mpr@cons #1\mpr@to#2{\mpr@lista {\\{#1}}\mpr@listb \expandafter -{#2}\edef #2{\the \mpr@lista \the \mpr@listb}} - -\long \def\mpr@snoc #1\mpr@to#2{\mpr@lista {\\{#1}}\mpr@listb \expandafter -{#2}\edef #2{\the \mpr@listb\the\mpr@lista}} - -\long \def \mpr@concat#1=#2\mpr@to#3{\mpr@lista \expandafter {#2}\mpr@listb -\expandafter {#3}\edef #1{\the \mpr@listb\the\mpr@lista}} - -\def \mpr@head #1\mpr@to #2{\expandafter \mpr@head@ #1\mpr@head@ #1#2} -\long \def \mpr@head@ #1#2\mpr@head@ #3#4{\def #4{#1}\def#3{#2}} - -\def \mpr@flatten #1\mpr@to #2{\expandafter \mpr@flatten@ #1\mpr@flatten@ #1#2} -\long \def \mpr@flatten@ \\#1\\#2\mpr@flatten@ #3#4{\def #4{#1}\def #3{\\#2}} - -\def \mpr@makelist #1\mpr@to #2{\def \mpr@all {#1}% - \mpr@lista {\\}\mpr@listb \expandafter {\mpr@all}\edef \mpr@all {\the - \mpr@lista \the \mpr@listb \the \mpr@lista}\let #2\empty - \def \mpr@stripof ##1##2\mpr@stripend{\def \mpr@stripped{##2}}\loop - \mpr@flatten \mpr@all \mpr@to \mpr@one - \expandafter \mpr@snoc \mpr@one \mpr@to #2\expandafter \mpr@stripof - \mpr@all \mpr@stripend - \ifx \mpr@stripped \empty \let \mpr@isempty 0\else \let \mpr@isempty 1\fi - \ifx 1\mpr@isempty - \repeat -} - -\def \mpr@rev #1\mpr@to #2{\let \mpr@tmp \empty - \def \\##1{\mpr@cons ##1\mpr@to \mpr@tmp}#1\let #2\mpr@tmp} - -%% Part III -- Type inference rules - -\newif \if@premisse -\newbox \mpr@hlist -\newbox \mpr@vlist -\newif \ifmpr@center \mpr@centertrue -\def \mpr@htovlist {% - \setbox \mpr@hlist - \hbox {\strut - \ifmpr@center \hskip -0.5\wd\mpr@hlist\fi - \unhbox \mpr@hlist}% - \setbox \mpr@vlist - \vbox {\if@premisse \box \mpr@hlist \unvbox \mpr@vlist - \else \unvbox \mpr@vlist \box \mpr@hlist - \fi}% -} -% OLD version -% \def \mpr@htovlist {% -% \setbox \mpr@hlist -% \hbox {\strut \hskip -0.5\wd\mpr@hlist \unhbox \mpr@hlist}% -% \setbox \mpr@vlist -% \vbox {\if@premisse \box \mpr@hlist \unvbox \mpr@vlist -% \else \unvbox \mpr@vlist \box \mpr@hlist -% \fi}% -% } - -\def \mpr@item #1{$\displaystyle #1$} -\def \mpr@sep{2em} -\def \mpr@blank { } -\def \mpr@hovbox #1#2{\hbox - \bgroup - \ifx #1T\@premissetrue - \else \ifx #1B\@premissefalse - \else - \PackageError{mathpartir} - {Premisse orientation should either be T or B} - {Fatal error in Package}% - \fi \fi - \def \@test {#2}\ifx \@test \mpr@blank\else - \setbox \mpr@hlist \hbox {}% - \setbox \mpr@vlist \vbox {}% - \if@premisse \let \snoc \mpr@cons \else \let \snoc \mpr@snoc \fi - \let \@hvlist \empty \let \@rev \empty - \mpr@tmpdim 0em - \expandafter \mpr@makelist #2\mpr@to \mpr@flat - \if@premisse \mpr@rev \mpr@flat \mpr@to \@rev \else \let \@rev \mpr@flat \fi - \def \\##1{% - \def \@test {##1}\ifx \@test \empty - \mpr@htovlist - \mpr@tmpdim 0em %%% last bug fix not extensively checked - \else - \setbox0 \hbox{\mpr@item {##1}}\relax - \advance \mpr@tmpdim by \wd0 - %\mpr@tmpdim 1.02\mpr@tmpdim - \ifnum \mpr@tmpdim < \hsize - \ifnum \wd\mpr@hlist > 0 - \if@premisse - \setbox \mpr@hlist - \hbox {\unhbox0 \hskip \mpr@sep \unhbox \mpr@hlist}% - \else - \setbox \mpr@hlist - \hbox {\unhbox \mpr@hlist \hskip \mpr@sep \unhbox0}% - \fi - \else - \setbox \mpr@hlist \hbox {\unhbox0}% - \fi - \else - \ifnum \wd \mpr@hlist > 0 - \mpr@htovlist - \mpr@tmpdim \wd0 - \fi - \setbox \mpr@hlist \hbox {\unhbox0}% - \fi - \advance \mpr@tmpdim by \mpr@sep - \fi - }% - \@rev - \mpr@htovlist - \ifmpr@center \hskip \wd\mpr@vlist\fi \box \mpr@vlist - \fi - \egroup -} - -%%% INFERENCE RULES - -\@ifundefined{@@over}{% - \let\@@over\over % fallback if amsmath is not loaded - \let\@@overwithdelims\overwithdelims - \let\@@atop\atop \let\@@atopwithdelims\atopwithdelims - \let\@@above\above \let\@@abovewithdelims\abovewithdelims - }{} - -%% The default - -\def \mpr@@fraction #1#2{\hbox {\advance \hsize by -0.5em - $\displaystyle {#1\mpr@over #2}$}} -\def \mpr@@nofraction #1#2{\hbox {\advance \hsize by -0.5em - $\displaystyle {#1\@@atop #2}$}} - -\let \mpr@fraction \mpr@@fraction - -%% A generic solution to arrow - -\def \mpr@make@fraction #1#2#3#4#5{\hbox {% - \def \mpr@tail{#1}% - \def \mpr@body{#2}% - \def \mpr@head{#3}% - \setbox1=\hbox{$#4$}\setbox2=\hbox{$#5$}% - \setbox3=\hbox{$\mkern -3mu\mpr@body\mkern -3mu$}% - \setbox3=\hbox{$\mkern -3mu \mpr@body\mkern -3mu$}% - \dimen0=\dp1\advance\dimen0 by \ht3\relax\dp1\dimen0\relax - \dimen0=\ht2\advance\dimen0 by \dp3\relax\ht2\dimen0\relax - \setbox0=\hbox {$\box1 \@@atop \box2$}% - \dimen0=\wd0\box0 - \box0 \hskip -\dimen0\relax - \hbox to \dimen0 {$% - \mathrel{\mpr@tail}\joinrel - \xleaders\hbox{\copy3}\hfil\joinrel\mathrel{\mpr@head}% - $}}} - -%% Old stuff should be removed in next version -\def \mpr@@nothing #1#2 - {$\lower 0.01pt \mpr@@nofraction {#1}{#2}$} -\def \mpr@@reduce #1#2{\hbox - {$\lower 0.01pt \mpr@@fraction {#1}{#2}\mkern -15mu\rightarrow$}} -\def \mpr@@rewrite #1#2#3{\hbox - {$\lower 0.01pt \mpr@@fraction {#2}{#3}\mkern -8mu#1$}} -\def \mpr@infercenter #1{\vcenter {\mpr@hovbox{T}{#1}}} - -\def \mpr@empty {} -\def \mpr@inferrule - {\bgroup - \ifnum \linewidth<\hsize \hsize \linewidth\fi - \mpr@rulelineskip - \let \and \qquad - \let \hva \mpr@hva - \let \@rulename \mpr@empty - \let \@rule@options \mpr@empty - \let \mpr@over \@@over - \mpr@inferrule@} -\newcommand {\mpr@inferrule@}[3][] - {\everymath={\displaystyle}% - \def \@test {#2}\ifx \empty \@test - \setbox0 \hbox {$\vcenter {\mpr@hovbox{B}{#3}}$}% - \else - \def \@test {#3}\ifx \empty \@test - \setbox0 \hbox {$\vcenter {\mpr@hovbox{T}{#2}}$}% - \else - \setbox0 \mpr@fraction {\mpr@hovbox{T}{#2}}{\mpr@hovbox{B}{#3}}% - \fi \fi - \def \@test {#1}\ifx \@test\empty \box0 - \else \vbox -%%% Suggestion de Francois pour les etiquettes longues -%%% {\hbox to \wd0 {\RefTirName {#1}\hfil}\box0}\fi - {\hbox {\RefTirName {#1}}\box0}\fi - \egroup} - -\def \mpr@vdotfil #1{\vbox to #1{\leaders \hbox{$\cdot$} \vfil}} - -% They are two forms -% \inferrule [label]{[premisses}{conclusions} -% or -% \inferrule* [options]{[premisses}{conclusions} -% -% Premisses and conclusions are lists of elements separated by \\ -% Each \\ produces a break, attempting horizontal breaks if possible, -% and vertical breaks if needed. -% -% An empty element obtained by \\\\ produces a vertical break in all cases. -% -% The former rule is aligned on the fraction bar. -% The optional label appears on top of the rule -% The second form to be used in a derivation tree is aligned on the last -% line of its conclusion -% -% The second form can be parameterized, using the key=val interface. The -% folloiwng keys are recognized: -% -% width set the width of the rule to val -% narrower set the width of the rule to val\hsize -% before execute val at the beginning/left -% lab put a label [Val] on top of the rule -% lskip add negative skip on the right -% left put a left label [Val] -% Left put a left label [Val], ignoring its width -% right put a right label [Val] -% Right put a right label [Val], ignoring its width -% leftskip skip negative space on the left-hand side -% rightskip skip negative space on the right-hand side -% vdots lift the rule by val and fill vertical space with dots -% after execute val at the end/right -% -% Note that most options must come in this order to avoid strange -% typesetting (in particular leftskip must preceed left and Left and -% rightskip must follow Right or right; vdots must come last -% or be only followed by rightskip. -% - -%% Keys that make sence in all kinds of rules -\def \mprset #1{\setkeys{mprset}{#1}} -\define@key {mprset}{andskip}[]{\mpr@andskip=#1} -\define@key {mprset}{lineskip}[]{\lineskip=#1} -\define@key {mprset}{lessskip}[]{\lineskip=0.5\lineskip} -\define@key {mprset}{flushleft}[]{\mpr@centerfalse} -\define@key {mprset}{center}[]{\mpr@centertrue} -\define@key {mprset}{rewrite}[]{\let \mpr@fraction \mpr@@rewrite} -\define@key {mprset}{atop}[]{\let \mpr@fraction \mpr@@nofraction} -\define@key {mprset}{myfraction}[]{\let \mpr@fraction #1} -\define@key {mprset}{fraction}[]{\def \mpr@fraction {\mpr@make@fraction #1}} -\define@key {mprset}{sep}{\def\mpr@sep{#1}} - -\newbox \mpr@right -\define@key {mpr}{flushleft}[]{\mpr@centerfalse} -\define@key {mpr}{center}[]{\mpr@centertrue} -\define@key {mpr}{rewrite}[]{\let \mpr@fraction \mpr@@rewrite} -\define@key {mpr}{myfraction}[]{\let \mpr@fraction #1} -\define@key {mpr}{fraction}[]{\def \mpr@fraction {\mpr@make@fraction #1}} -\define@key {mpr}{left}{\setbox0 \hbox {$\TirName {#1}\;$}\relax - \advance \hsize by -\wd0\box0} -\define@key {mpr}{width}{\hsize #1} -\define@key {mpr}{sep}{\def\mpr@sep{#1}} -\define@key {mpr}{before}{#1} -\define@key {mpr}{lab}{\let \RefTirName \TirName \def \mpr@rulename {#1}} -\define@key {mpr}{Lab}{\let \RefTirName \TirName \def \mpr@rulename {#1}} -\define@key {mpr}{narrower}{\hsize #1\hsize} -\define@key {mpr}{leftskip}{\hskip -#1} -\define@key {mpr}{reduce}[]{\let \mpr@fraction \mpr@@reduce} -\define@key {mpr}{rightskip} - {\setbox \mpr@right \hbox {\unhbox \mpr@right \hskip -#1}} -\define@key {mpr}{LEFT}{\setbox0 \hbox {$#1$}\relax - \advance \hsize by -\wd0\box0} -\define@key {mpr}{left}{\setbox0 \hbox {$\TirName {#1}\;$}\relax - \advance \hsize by -\wd0\box0} -\define@key {mpr}{Left}{\llap{$\TirName {#1}\;$}} -\define@key {mpr}{right} - {\setbox0 \hbox {$\;\TirName {#1}$}\relax \advance \hsize by -\wd0 - \setbox \mpr@right \hbox {\unhbox \mpr@right \unhbox0}} -\define@key {mpr}{RIGHT} - {\setbox0 \hbox {$#1$}\relax \advance \hsize by -\wd0 - \setbox \mpr@right \hbox {\unhbox \mpr@right \unhbox0}} -\define@key {mpr}{Right} - {\setbox \mpr@right \hbox {\unhbox \mpr@right \rlap {$\;\TirName {#1}$}}} -\define@key {mpr}{vdots}{\def \mpr@vdots {\@@atop \mpr@vdotfil{#1}}} -\define@key {mpr}{after}{\edef \mpr@after {\mpr@after #1}} - -\newcommand \mpr@inferstar@ [3][]{\setbox0 - \hbox {\let \mpr@rulename \mpr@empty \let \mpr@vdots \relax - \setbox \mpr@right \hbox{}% - $\setkeys{mpr}{#1}% - \ifx \mpr@rulename \mpr@empty \mpr@inferrule {#2}{#3}\else - \mpr@inferrule [{\mpr@rulename}]{#2}{#3}\fi - \box \mpr@right \mpr@vdots$} - \setbox1 \hbox {\strut} - \@tempdima \dp0 \advance \@tempdima by -\dp1 - \raise \@tempdima \box0} - -\def \mpr@infer {\@ifnextchar *{\mpr@inferstar}{\mpr@inferrule}} -\newcommand \mpr@err@skipargs[3][]{} -\def \mpr@inferstar*{\ifmmode - \let \@do \mpr@inferstar@ - \else - \let \@do \mpr@err@skipargs - \PackageError {mathpartir} - {\string\inferrule* can only be used in math mode}{}% - \fi \@do} - - -%%% Exports - -% Envirnonment mathpar - -\let \inferrule \mpr@infer - -% make a short name \infer is not already defined -\@ifundefined {infer}{\let \infer \mpr@infer}{} - -\def \TirNameStyle #1{\small \textsc{#1}} -\def \tir@name #1{\hbox {\small \TirNameStyle{#1}}} -\let \TirName \tir@name -\let \DefTirName \TirName -\let \RefTirName \TirName - -%%% Other Exports - -% \let \listcons \mpr@cons -% \let \listsnoc \mpr@snoc -% \let \listhead \mpr@head -% \let \listmake \mpr@makelist - - - - -\endinput diff --git a/historic/subtypes.graffle b/historic/subtypes.graffle deleted file mode 100644 index c6014d1..0000000 --- a/historic/subtypes.graffle +++ /dev/null @@ -1,956 +0,0 @@ - - - - - ActiveLayerIndex - 0 - ApplicationVersion - - com.omnigroup.OmniGraffle - 139.16.0.171715 - - AutoAdjust - - BackgroundGraphic - - Bounds - {{0, 0}, {576, 733}} - Class - SolidGraphic - ID - 2 - Style - - shadow - - Draws - NO - - stroke - - Draws - NO - - - - BaseZoom - 0 - CanvasOrigin - {0, 0} - ColumnAlign - 1 - ColumnSpacing - 36 - CreationDate - 2012-10-24 05:05:27 +0000 - Creator - David Herman - DisplayScale - 1 0/72 in = 1.0000 in - GraphDocumentVersion - 8 - GraphicsList - - - Class - LineGraphic - Head - - ID - 107 - - ID - 109 - Points - - {163.5, 443} - {103, 319} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 57 - Info - 1 - - - - Class - LineGraphic - Head - - ID - 107 - Info - 1 - - ID - 113 - Points - - {195.5, 346} - {103, 319} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 7 - Info - 1 - - - - Bounds - {{68, 249}, {70, 70}} - Class - ShapedGraphic - ID - 107 - Magnets - - {0, 0.5} - - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 doublish} - - - - Bounds - {{438, 346}, {70, 70}} - Class - ShapedGraphic - ID - 104 - Magnets - - {0, -0.5} - - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 void} - - - - Class - LineGraphic - Head - - ID - 60 - Position - 0.95704245567321777 - - ID - 103 - Points - - {328.5, 443} - {294.29327151179314, 417.15985208749771} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 3 - Info - 1 - - - - Class - LineGraphic - Head - - ID - 4 - Info - 2 - - ID - 93 - Points - - {381.5, 535} - {434.5, 513} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 91 - - - - Class - LineGraphic - Head - - ID - 3 - Info - 2 - - ID - 92 - Points - - {381.5, 535} - {328.5, 513} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 91 - Info - 1 - - - - Bounds - {{346.5, 535}, {70, 70}} - Class - ShapedGraphic - ID - 91 - Magnets - - {0, -0.5} - {0, 0.5} - - Shape - Rectangle - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 fixnum} - - - - Class - LineGraphic - Head - - ID - 71 - - ID - 112 - Points - - {195.5, 346} - {288, 319} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 7 - Info - 1 - - - - Class - LineGraphic - Head - - ID - 71 - Info - 1 - - ID - 72 - Points - - {380.5, 346} - {288, 319} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 5 - - - - Bounds - {{253, 249}, {70, 70}} - Class - ShapedGraphic - ID - 71 - Magnets - - {0, 0.5} - - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 intish} - - - - Class - LineGraphic - Head - - ID - 11 - - ID - 60 - Points - - {434.5, 443} - {288, 416} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 4 - Info - 1 - - - - Class - LineGraphic - Head - - ID - 11 - - ID - 58 - Points - - {163.5, 443} - {288, 416} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 57 - Info - 1 - - - - Bounds - {{128.5, 443}, {70, 70}} - Class - ShapedGraphic - ID - 57 - Magnets - - {0, -0.5} - - Shape - Rectangle - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 double} - - - - Class - LineGraphic - Head - - ID - 5 - - ID - 20 - Points - - {434.5, 443} - {380.5, 416} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 4 - Info - 1 - - - - Class - LineGraphic - Head - - ID - 5 - Info - 2 - - ID - 18 - Points - - {328.5, 443} - {380.5, 416} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 3 - Info - 1 - - - - Bounds - {{253, 346}, {70, 70}} - Class - ShapedGraphic - ID - 11 - Magnets - - {0, 0.5} - {0, -0.5} - - Shape - Rectangle - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 extern} - - - - Bounds - {{160.5, 346}, {70, 70}} - Class - ShapedGraphic - ID - 7 - Magnets - - {0, -0.5} - {0, 0.49999999999999956} - - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 unknown} - - - - Bounds - {{345.5, 346}, {70, 70}} - Class - ShapedGraphic - ID - 5 - Magnets - - {0, -0.5} - {0, 0.5} - - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 int} - - - - Bounds - {{399.5, 443}, {70, 70}} - Class - ShapedGraphic - ID - 4 - Magnets - - {0, -0.5} - {0, 0.5} - - Shape - Rectangle - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 unsigned} - - - - Bounds - {{293.5, 443}, {70, 70}} - Class - ShapedGraphic - ID - 3 - Magnets - - {0, -0.5} - {0, 0.5} - - Shape - Rectangle - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 signed} - - - - GridInfo - - GuidesLocked - NO - GuidesVisible - YES - HPages - 1 - ImageCounter - 1 - KeepToScale - - Layers - - - Lock - NO - Name - Layer 1 - Print - YES - View - YES - - - LayoutInfo - - Animate - NO - circoMinDist - 18 - circoSeparation - 0.0 - layoutEngine - dot - neatoSeparation - 0.0 - twopiSeparation - 0.0 - - LinksVisible - NO - MagnetsVisible - NO - MasterSheets - - ModificationDate - 2013-01-15 05:36:58 +0000 - Modifier - David Herman - NotesVisible - NO - Orientation - 2 - OriginVisible - NO - PageBreaks - YES - PrintInfo - - NSBottomMargin - - float - 41 - - NSHorizonalPagination - - coded - BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG - - NSLeftMargin - - float - 18 - - NSPaperSize - - size - {612, 792} - - NSPrintReverseOrientation - - int - 0 - - NSPrinter - - coded - BAtzdHJlYW10eXBlZIHoA4QBQISEhAlOU1ByaW50ZXIAhIQITlNPYmplY3QAhZKEhIQITlNTdHJpbmcBlIQBKw1NVFYyLUh5cGVyaW9uhoY= - - NSPrinterName - - string - MTV2-Hyperion - - NSRightMargin - - float - 18 - - NSTopMargin - - float - 18 - - - PrintOnePage - - ReadOnly - NO - RowAlign - 1 - RowSpacing - 36 - SheetTitle - Canvas 1 - SmartAlignmentGuidesActive - YES - SmartDistanceGuidesActive - YES - UniqueID - 1 - UseEntirePage - - VPages - 1 - WindowInfo - - CurrentSheet - 0 - ExpandedCanvases - - - name - Canvas 1 - - - Frame - {{40, 73}, {1005, 673}} - ListView - - OutlineWidth - 142 - RightSidebar - - ShowRuler - - Sidebar - - SidebarWidth - 120 - VisibleRegion - {{-147, 138}, {870, 534}} - Zoom - 1 - ZoomValues - - - Canvas 1 - 1 - 0.5 - - - - - diff --git a/historic/subtypes.png b/historic/subtypes.png deleted file mode 100644 index fdc478393f55d569ec9be5602c5eacfef0eb1d07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24992 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 - - - - ApplicationVersion - - com.omnigroup.OmniGraffle - 139.16.0.171715 - - CreationDate - 2013-02-05 00:30:07 +0000 - Creator - David Herman - GraphDocumentVersion - 8 - GuidesLocked - NO - GuidesVisible - YES - ImageCounter - 1 - LinksVisible - NO - MagnetsVisible - NO - MasterSheets - - ModificationDate - 2013-02-05 02:01:46 +0000 - Modifier - David Herman - NotesVisible - NO - OriginVisible - NO - PageBreaks - YES - PrintInfo - - NSBottomMargin - - float - 41 - - NSHorizonalPagination - - coded - BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG - - NSLeftMargin - - float - 18 - - NSPaperSize - - size - {612, 792} - - NSPrintReverseOrientation - - int - 0 - - NSPrinter - - coded - BAtzdHJlYW10eXBlZIHoA4QBQISEhAlOU1ByaW50ZXIAhIQITlNPYmplY3QAhZKEhIQITlNTdHJpbmcBlIQBKw1NVFYyLUh5cGVyaW9uhoY= - - NSPrinterName - - string - MTV2-Hyperion - - NSRightMargin - - float - 18 - - NSTopMargin - - float - 18 - - - ReadOnly - NO - Sheets - - - ActiveLayerIndex - 0 - AutoAdjust - - BackgroundGraphic - - Bounds - {{0, 0}, {576, 733}} - Class - SolidGraphic - FontInfo - - Font - Helvetica - Size - 11 - - ID - 2 - Style - - shadow - - Draws - NO - - stroke - - Draws - NO - - - - BaseZoom - 0 - CanvasOrigin - {0, 0} - ColumnAlign - 1 - ColumnSpacing - 36 - DisplayScale - 1 0/72 in = 1 0/72 in - GraphicsList - - - Bounds - {{237.44252562522888, 107.83473449611662}, {52, 24}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - FontInfo - - Color - - w - 0 - - Font - Helvetica - Size - 12 - - ID - 52 - Line - - ID - 27 - Position - 0.44252562522888184 - RotationType - 0 - - Shape - Rectangle - Style - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 compile} - - Wrap - NO - - - Bounds - {{377.56691652782985, 569.02245956890829}, {29, 24}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - FontInfo - - Color - - w - 0 - - Font - Helvetica - Size - 12 - - ID - 51 - Line - - ID - 42 - Position - 0.43549069762229919 - RotationType - 0 - - Shape - Rectangle - Style - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 call} - - Wrap - NO - - - Bounds - {{134.5, 444.00000013452996}, {29, 24}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - FontInfo - - Color - - w - 0 - - Font - Helvetica - Size - 12 - - ID - 50 - Line - - ID - 41 - Position - 0.44654077291488647 - RotationType - 0 - - Shape - Rectangle - Style - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 call} - - Wrap - NO - - - Bounds - {{386.61223285313872, 429.82491346534033}, {36, 24}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - FontInfo - - Color - - w - 0 - - Font - Helvetica - Size - 12 - - ID - 49 - Line - - ID - 38 - Position - 0.47824451327323914 - RotationType - 0 - - Shape - Rectangle - Style - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 pass} - - Wrap - NO - - - Bounds - {{252.21298050501559, 388.07991023910773}, {26, 24}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - FontInfo - - Color - - w - 0 - - Font - Helvetica - Size - 12 - - ID - 48 - Line - - ID - 34 - Position - 0.53825199604034424 - RotationType - 0 - - Shape - Rectangle - Style - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 fail} - - Wrap - NO - - - Bounds - {{377.56749568208238, 321.04651663910857}, {29, 24}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - FontInfo - - Color - - w - 0 - - Font - Helvetica - Size - 12 - - ID - 47 - Line - - ID - 33 - Position - 0.43590256571769714 - RotationType - 0 - - Shape - Rectangle - Style - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 link} - - Wrap - NO - - - Bounds - {{308.2677336460626, 206.24097881942564}, {36, 24}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - FontInfo - - Color - - w - 0 - - Font - Helvetica - Size - 12 - - ID - 45 - Line - - ID - 26 - Position - 0.49703007936477661 - RotationType - 0 - - Shape - Rectangle - Style - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 pass} - - Wrap - NO - - - Bounds - {{192.00115339767984, 210.00151812586623}, {26, 24}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - FontInfo - - Color - - w - 0 - - Font - Helvetica - Size - 12 - - ID - 44 - Line - - ID - 25 - Position - 0.49317824840545654 - RotationType - 0 - - Shape - Rectangle - Style - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 fail} - - Wrap - NO - - - Bounds - {{134.06417065858841, 323.99194068215047}, {29, 24}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - FontInfo - - Color - - w - 0 - - Font - Helvetica - Size - 12 - - ID - 43 - Line - - ID - 32 - Position - 0.56417065858840942 - RotationType - 0 - - Shape - Rectangle - Style - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 link} - - Wrap - NO - - - Class - LineGraphic - Head - - ID - 40 - Info - 2 - - ID - 42 - Points - - {391.45454465425928, 555.58181865046595} - {392.86070987641898, 614.00015239982883} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 36 - - - - Class - LineGraphic - Head - - ID - 39 - - ID - 41 - Points - - {149, 420.50001569726555} - {149, 500} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 30 - Info - 1 - - - - Bounds - {{347.87274169921875, 614.50000762939453}, {90, 36}} - Class - ShapedGraphic - ID - 40 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - - Shape - Rectangle - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 execute} - VerticalPad - 0 - - - - Bounds - {{104, 500}, {90, 36}} - Class - ShapedGraphic - ID - 39 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - - Shape - Rectangle - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 interpret} - VerticalPad - 0 - - - - Class - LineGraphic - Head - - ID - 37 - - ID - 38 - Points - - {415.37274169921875, 407.75} - {392.87272644042969, 478.99998305181191} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 31 - Info - 6 - - - - Class - Group - Graphics - - - Class - LineGraphic - ID - 36 - Points - - {391.45454465425928, 555.58181865046595} - {429.74545288085938, 555.58181865046595} - - Style - - stroke - - HeadArrow - 0 - Legacy - - LineType - 1 - TailArrow - 0 - - - - - Bounds - {{356, 479.00000219726593}, {73.745452880859375, 76.581816453200091}} - Class - ShapedGraphic - ID - 37 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - {0.35562666177031677, -0.35146732521269541} - - Shape - Circle - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 executable} - VerticalPad - 0 - - - - ID - 35 - - - Class - LineGraphic - Head - - ID - 30 - Info - 3 - - ID - 34 - Points - - {370.37274169921875, 407.75} - {175.00001299999994, 393.50000219726564} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 31 - Info - 5 - - - - Class - LineGraphic - Head - - ID - 31 - - ID - 33 - Points - - {391.45454465425951, 307.58181818181822} - {392.86070987564023, 366.00014479883106} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 20 - - - - Class - LineGraphic - Head - - ID - 30 - Info - 2 - - ID - 32 - Points - - {148, 296.50000219726564} - {149, 366.49998869726574} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 23 - - - - Bounds - {{347.87274169921875, 366.5}, {90, 55.000000000000014}} - Class - ShapedGraphic - ID - 31 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - {-0.25, 0.25} - {0.25, 0.25} - - Shape - Diamond - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 runtime checks} - VerticalPad - 0 - - - - Class - Group - Graphics - - - Class - LineGraphic - ID - 29 - Points - - {148, 420.50000219726564} - {175, 420.50000219726564} - - Style - - stroke - - HeadArrow - 0 - Legacy - - LineType - 1 - TailArrow - 0 - - - - - Bounds - {{123, 366.50000219726564}, {52, 54}} - Class - ShapedGraphic - ID - 30 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - {0.35562666177031677, -0.35146732521269541} - - Shape - Circle - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 AST} - VerticalPad - 0 - - - - ID - 28 - - - Class - LineGraphic - Head - - ID - 3 - - ID - 27 - Points - - {263, 93.507999999999981} - {264, 153} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 17 - - - - Class - LineGraphic - Head - - ID - 21 - Info - 5 - - ID - 26 - Points - - {286.5, 194.25} - {366.51071825851517, 242.51866585235047} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 3 - Info - 6 - - - - Class - LineGraphic - Head - - ID - 24 - Info - 5 - - ID - 25 - Points - - {241.5, 194.25} - {167.49258641205648, 250.52076663578009} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 3 - Info - 5 - - - - Class - Group - Graphics - - - Class - LineGraphic - ID - 23 - Points - - {148, 296.50000219726564} - {175, 296.50000219726564} - - Style - - stroke - - HeadArrow - 0 - Legacy - - LineType - 1 - TailArrow - 0 - - - - - Bounds - {{123, 242.50000219726564}, {52, 54}} - Class - ShapedGraphic - ID - 24 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - {0.35562666177031677, -0.35146732521269541} - - Shape - Circle - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 AST} - VerticalPad - 0 - - - - ID - 22 - - - Class - Group - Graphics - - - Class - LineGraphic - ID - 20 - Points - - {391.45454465425951, 307.58181818181822} - {429.74545288085943, 307.58181818181822} - - Style - - stroke - - HeadArrow - 0 - Legacy - - LineType - 1 - TailArrow - 0 - - - - - Bounds - {{356.00000000000006, 231.00000000000017}, {73.745452880859304, 76.581818181818193}} - Class - ShapedGraphic - ID - 21 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - {-0.35747299870141269, -0.34959007077890236} - - Shape - Circle - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 AST + executable} - VerticalPad - 0 - - - - ID - 19 - - - Class - Group - Graphics - - - Class - LineGraphic - ID - 17 - Points - - {263, 93.507999999999981} - {290, 93.507999999999981} - - Style - - stroke - - HeadArrow - 0 - Legacy - - LineType - 1 - TailArrow - 0 - - - - - Bounds - {{238, 39.507999999999967}, {52, 54}} - Class - ShapedGraphic - ID - 18 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - - Shape - Circle - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 AST} - VerticalPad - 0 - - - - ID - 16 - - - Bounds - {{219, 153}, {90, 55.000000000000014}} - Class - ShapedGraphic - ID - 3 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - {-0.25, 0.25} - {0.25, 0.25} - - Shape - Diamond - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 type\ -check} - VerticalPad - 0 - - - - GridInfo - - HPages - 1 - KeepToScale - - Layers - - - Lock - NO - Name - Layer 1 - Print - YES - View - YES - - - LayoutInfo - - Animate - NO - circoMinDist - 18 - circoSeparation - 0.0 - layoutEngine - dot - neatoSeparation - 0.0 - twopiSeparation - 0.0 - - Orientation - 2 - PrintOnePage - - RowAlign - 1 - RowSpacing - 36 - SheetTitle - Canvas 1 - UniqueID - 1 - VPages - 1 - - - ActiveLayerIndex - 0 - AutoAdjust - - BackgroundGraphic - - Bounds - {{0, 0}, {1152, 733}} - Class - SolidGraphic - ID - 2 - Style - - shadow - - Draws - NO - - stroke - - Draws - NO - - - - BaseZoom - 0 - CanvasOrigin - {0, 0} - ColumnAlign - 1 - ColumnSpacing - 36 - DisplayScale - 1 0/72 in = 1.0000 in - GraphicsList - - - Bounds - {{648.6817626953125, 146.29090881347651}, {19, 14}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - ID - 72 - Shape - Rectangle - Style - - fill - - Draws - NO - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Pad - 0 - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 call} - VerticalPad - 0 - - Wrap - NO - - - Bounds - {{504.24546813964844, 322}, {19, 14}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - ID - 71 - Shape - Rectangle - Style - - fill - - Draws - NO - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Pad - 0 - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 call} - VerticalPad - 0 - - Wrap - NO - - - Bounds - {{463.74545288085938, 228.5}, {16, 14}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - ID - 70 - Shape - Rectangle - Style - - fill - - Draws - NO - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Pad - 0 - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 fail} - VerticalPad - 0 - - Wrap - NO - - - Bounds - {{510.24542236328125, 146.29090881347656}, {26, 14}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - ID - 69 - Shape - Rectangle - Style - - fill - - Draws - NO - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Pad - 0 - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 pass} - VerticalPad - 0 - - Wrap - NO - - - Bounds - {{374.74545288085938, 322.00001525878906}, {19, 14}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - ID - 68 - Shape - Rectangle - Style - - fill - - Draws - NO - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Pad - 0 - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 link} - VerticalPad - 0 - - Wrap - NO - - - Bounds - {{374.74545288085938, 146.29090881347656}, {19, 14}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - ID - 67 - Shape - Rectangle - Style - - fill - - Draws - NO - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Pad - 0 - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 link} - VerticalPad - 0 - - Wrap - NO - - - Bounds - {{231, 286}, {16, 14}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - ID - 66 - Shape - Rectangle - Style - - fill - - Draws - NO - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Pad - 0 - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 fail} - VerticalPad - 0 - - Wrap - NO - - - Bounds - {{221, 177.79090881347656}, {26, 14}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - ID - 65 - Shape - Rectangle - Style - - fill - - Draws - NO - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Pad - 0 - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 pass} - VerticalPad - 0 - - Wrap - NO - - - Bounds - {{97.436370849609375, 219}, {42, 14}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - ID - 64 - Shape - Rectangle - Style - - fill - - Draws - NO - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Pad - 0 - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 compile} - VerticalPad - 0 - - Wrap - NO - - - Class - LineGraphic - Head - - ID - 30 - Info - 4 - - ID - 61 - Points - - {348.87275469921866, 308.00000439453129} - {427.74543988085946, 308.00000219726564} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 24 - Info - 3 - - - - Class - LineGraphic - Head - - ID - 39 - - ID - 60 - Points - - {479.74546588085929, 308.00000219726564} - {547.7454833984375, 308.5} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 30 - - - - Class - LineGraphic - Head - - ID - 40 - Info - 4 - - ID - 59 - Points - - {629.61818249886312, 173.29091042386594} - {686.74539184570312, 173.79090881347656} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 37 - - - - Class - LineGraphic - Head - - ID - 30 - - ID - 58 - Points - - {453.74545288085938, 201.29090881347656} - {453.74545288085938, 280.99998869726574} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 31 - - - - Class - LineGraphic - Head - - ID - 37 - Info - 4 - - ID - 57 - Points - - {498.74545288085938, 173.79090881347656} - {555.8726927452775, 173.29091042386594} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 31 - Info - 3 - - - - Class - LineGraphic - Head - - ID - 31 - - ID - 56 - Points - - {359.74547131722244, 173.29090909090911} - {408.74545288085938, 173.79090881347656} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 21 - Info - 3 - - - - Class - LineGraphic - Head - - ID - 24 - - ID - 55 - Points - - {214.5, 249.25} - {296.87272869921884, 308.00000439453129} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 3 - Info - 6 - - - - Class - LineGraphic - Head - - ID - 21 - - ID - 54 - Points - - {214.49999999999994, 221.74999999999994} - {285.99998156363694, 173.29090909090911} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 3 - Info - 7 - - - - Class - LineGraphic - Head - - ID - 3 - Info - 4 - - ID - 53 - Points - - {89.872754699218689, 235} - {147, 235.5} - - Style - - stroke - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 18 - Info - 3 - - - - Bounds - {{686.74539184570312, 155.79090881347656}, {90, 36}} - Class - ShapedGraphic - ID - 40 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - - Shape - Rectangle - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 execute} - VerticalPad - 0 - - - - Class - Group - Graphics - - - Class - LineGraphic - ID - 36 - Points - - {591.3272558358999, 211.58181865046589} - {629.6181640625, 211.58181865046589} - - Style - - stroke - - HeadArrow - 0 - Legacy - - LineType - 1 - TailArrow - 0 - - - - - Bounds - {{555.87271118164062, 135.0000021972659}, {73.745452880859375, 76.581816453200091}} - Class - ShapedGraphic - ID - 37 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - {0.35562666177031677, -0.35146732521269541} - - Shape - Circle - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 executable} - VerticalPad - 0 - - - - ID - 35 - - - Bounds - {{408.74545288085938, 146.29090881347656}, {90, 55.000000000000014}} - Class - ShapedGraphic - ID - 31 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - {-0.25, 0.25} - {0.25, 0.25} - {0.24999999999999911, -0.25000000000000044} - - Shape - Diamond - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 runtime checks} - VerticalPad - 0 - - - - Class - Group - Graphics - - - Class - LineGraphic - ID - 20 - Points - - {321.45454465425951, 211.58181818181811} - {359.74545288085943, 211.58181818181811} - - Style - - stroke - - HeadArrow - 0 - Legacy - - LineType - 1 - TailArrow - 0 - - - - - Bounds - {{286.00000000000006, 135}, {73.745452880859304, 76.581818181818193}} - Class - ShapedGraphic - ID - 21 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - {-0.35747299870141269, -0.34959007077890236} - - Shape - Circle - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 AST + executable} - VerticalPad - 0 - - - - ID - 19 - - - Bounds - {{547.7454833984375, 290.5}, {90, 36}} - Class - ShapedGraphic - ID - 39 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - - Shape - Rectangle - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 interpret} - VerticalPad - 0 - - - - Class - Group - Graphics - - - Class - LineGraphic - ID - 29 - Points - - {452.74545288085938, 335.00000219726564} - {479.74545288085938, 335.00000219726564} - - Style - - stroke - - HeadArrow - 0 - Legacy - - LineType - 1 - TailArrow - 0 - - - - - Bounds - {{427.74545288085938, 281.00000219726564}, {52, 54}} - Class - ShapedGraphic - ID - 30 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - {0.35562666177031677, -0.35146732521269541} - - Shape - Circle - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 AST} - VerticalPad - 0 - - - - ID - 28 - - - Class - Group - Graphics - - - Class - LineGraphic - ID - 23 - Points - - {321.87274169921875, 335.00000439453129} - {348.87274169921875, 335.00000439453129} - - Style - - stroke - - HeadArrow - 0 - Legacy - - LineType - 1 - TailArrow - 0 - - - - - Bounds - {{296.87274169921875, 281.00000439453129}, {52, 54}} - Class - ShapedGraphic - ID - 24 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - {0.35562666177031677, -0.35146732521269541} - - Shape - Circle - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 AST} - VerticalPad - 0 - - - - ID - 22 - - - Bounds - {{147, 208}, {90, 55.000000000000014}} - Class - ShapedGraphic - ID - 3 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - {-0.25, 0.25} - {0.25, 0.25} - {0.24999999999999956, -0.25000000000000089} - - Shape - Diamond - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 type\ -check} - VerticalPad - 0 - - - - Class - Group - Graphics - - - Class - LineGraphic - ID - 17 - Points - - {62.87274169921875, 262} - {89.87274169921875, 262} - - Style - - stroke - - HeadArrow - 0 - Legacy - - LineType - 1 - TailArrow - 0 - - - - - Bounds - {{37.87274169921875, 208}, {52, 54}} - Class - ShapedGraphic - ID - 18 - Magnets - - {0, 1} - {0, -1} - {1, 0} - {-1, 0} - - Shape - Circle - Style - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs20 \cf0 AST} - VerticalPad - 0 - - - - ID - 16 - - - GridInfo - - HPages - 2 - KeepToScale - - Layers - - - Lock - NO - Name - Layer 1 - Print - YES - View - YES - - - LayoutInfo - - Animate - NO - circoMinDist - 18 - circoSeparation - 0.0 - layoutEngine - dot - neatoSeparation - 0.0 - twopiSeparation - 0.0 - - Orientation - 2 - PrintOnePage - - RowAlign - 1 - RowSpacing - 36 - SheetTitle - Canvas 2 - UniqueID - 2 - VPages - 1 - - - SmartAlignmentGuidesActive - YES - SmartDistanceGuidesActive - YES - UseEntirePage - - WindowInfo - - CurrentSheet - 1 - ExpandedCanvases - - - name - Canvas 1 - - - Frame - {{57, 11}, {1106, 735}} - ListView - - OutlineWidth - 142 - RightSidebar - - ShowRuler - - Sidebar - - SidebarWidth - 120 - VisibleRegion - {{0, 0}, {971, 596}} - Zoom - 1 - ZoomValues - - - Canvas 1 - 1 - 2 - - - Canvas 2 - 1 - 1 - - - - - diff --git a/html/aot.png b/html/aot.png deleted file mode 100644 index 20ce539e347554f93491d767ecf3a7a55e91f949..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132214 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⋘^xo~e~frX)QM^`e%E8u3S|z!=Kq9=%Q{BBK*Y8Bn_KKz8x8qrIh`%>>-{ zBN^YSMwq~w_n-)HunT zX?fGzVR7I?q2?E8yQ}3A6>yykO}&N0uYrRC?Ia(#b?hLve5!0AAKwRoRV82}y48A1 z=Av;G=@yMe`A@83L;M&6M^q4_Dl$0Jg4|3#nwl9V*n-^M6FY`o(&%h=j=6F8m_Z|S zJg?aVQ>+h_JW)P4wBTTs6h27|pZ0ju5z@3~5!ap0bkRd*q3mUCFT;tpJ-ebVN(+o5 z5@v0yzhRmJLtQ&hPgkTz2YI7P3q#Wy%z0?~-laAQ;jqPFR4}ROq2_a9Wbr7iyiwSF zeQC;v(XGZs)h*lef#DKw+lQ|6MffnNBehwOc?)Ohh4}1=rSe8{bce$2GV?ZtzI$Eo z$ciy^*H_K=N&b&no|ONGgLlrN#d|W3{3PfAIV9pg*O8>EhL>G9(ak&_^)zGg04!!< zKH0vzzpi~-JFdOD^<$yK$0#!cwNqgRNQFE6@u;i@3xV54q8tC{EL@6r!6OVJr@Axb z?D=N?=Hyhmr9^J?V%*B+JI#VvcnvP;x_)&ab336#t~lvIn=%rObVDP|UgARM0taX5 z`Y%YyGr+^l>J>XGY*M{W);iSAfK)!DC>p>L6?KZ<>7dN|rh`=<#5^ zh2yDg(cere%PBV5V|R3ne&w%Xarrfx-C$Epwvdx!!;JkWHVXSe zn_&2uTW)=D+f4Qi@h&Fz`De)l_O@jMQF)92JANiF6!osCdFtq-COUUnu94O^XT#_Q z@Ulou6#Fhp;Y!@C&+3wu4L3=OIWj3}Q4r^HS~2~|=?3>4Ckt|uo;DplnBOA`OGnRF z8N*j;QvP#5h*zVonYBOdz(}SmxW}QPZ!}2mb;bkTuXI8t9`%__#_JOa*$u;7H2waF z`*q4xxTZ0GO!m8mI!VT|`F!!Vwe$?QX3z0k`(o<@)LXt&aK#-(*n1m4$~1fE&iH!!iM9M7Fw zL2r=2G7aL4+5af7Oe}%VFWZHdF`WtudnLM4lVYGz^^opVg|7RIGaLRu@;V?ZrWM^C zHn!LXSpo1z3#a-H!}v<&F&l4#M;e;ZZSn^NEb48eMI0xv@aX&l?yGbPVekH@GWK_7 zLDX=}RI|@E`qiyat{EQ^1B`X~121H$AXqh)64V{3#~P+GlP-qJWU($mEC;HmSRidK zi6WF+lG0?B2Vzn#%QoS2po1i!$((VawkNJF)JbZ^1uQS=s4(hU_@0I-je{{hqg8G9 zf})eAiwFv8!W7x@QB8DvoBu8zlZq)%?8KA2mibG%3+AZ#uav6>*Ug3M{CK(FFcQ-z zA5Hl=bGu#G(-UWky6a=Q{0{7z!OXr#-}EYJWozT~3k*(0eUvEFY_6U>O&7elj!f|Z zdNC{B^BnMr|l;YVUf1wNhPQlC>(0b@|()LnTgZLjQjnJJ}B6a z2W;Ou50(u)+*=XXmgF2OHs0_5N z0|nQ1e)J=2SkgGvE^pfS)3)I{yq+-MXpOD$)TAio zn-A~NnQG{5#DeWFX|yQ>&K5^@2f0#L`Dw=lk@#VukQ8*a&*Kr+VW!U z@cd}ra$X?9MW}nQ*eEIH^Xi2fM_!F4fZr)Eh2<4nld{%jU2{F61v>L|@KBIn%!Ox{Xi4If*nGpmD=?R?8s{F-x=SJkTZ@(Gdr8h5H zkZ6dNSRU6v${Xco3>2-Rl005??oV@-)yMgXtxfx_GlB}5WwOoBXs(&=7tDP+2)E;p z0{%%ymw`j+%98wehda^Uhhk-@D9B zyY`dIeZe2LGvW=Lx?GmH@E{_6b?||4@C2njyOBHw{(jd#<0E0Xvhmt~K^w7ap zaky}@6&{MTG%l*_$siR6T^a>5R+?uRa4WhH0p+KD2Z;Iwbs7Td~#c4x_0Go20|>b!r%s5n7EKl^#gv7ei>| z-Jcm8%*xIcq^+cy^d_G`dCGUx%q~`~GwEMX&+LR)a21`Fm&V2?TFF+tSg5T#OtzMV z7fiP&Efmu4>WOf$LZL-|p$;1NdzJnI`5!S=*JrQQnXT+`qfodfI_L~A5fQl@4<$?i z=iuX?=^ejc@cFn7MvPvZ?KTcxZ&zftyA?es5qy9?m(7DC7;t}?2qhbAUiYi1C1a7* zCmVS2`oV7k=s)+RZ133IasP7Gw0Zrj80A&vqHt#NtCQVYM87F_OnH9oy@tk&1UF66 z5a^`pu1zW)+V*m1W`dJ9UbmarhDP))n1ff!KfWq-&)*8&d3?TEYrm*NOPkhX)vEh) zPQ-LDF$s}`laE;_`2Tqg!g7QWAO5yi26B@}8QriOImm@s3ia4$>Np?LKVAr+3^XP; z%7O&fIq2Bs0a-jk=$S$$dL*PX=@qonLQFbg_Mcvnh3+|5UQE@eEcO0Thvn*Oo4iM* z%enZ9(&~yNAnh3BiUs0E7PT;|+rY0yW~BePnGfCb=cq4_tKFVPU zx*w=CZ|HxzqVsl|rwWSFnjm@JkcvYu6ky<_xpMF{KJQZa;V)73=clLio!ge>XXA*% zF+`m8yUXLE81>rY@~yd)>8sy!HI_gj?#sxb%HlIHrf#R2kjh18cY}9|8r^t6ch%h|W7-K2*ZTL9j zVE@_o{HupEud8z?tB&YPS!*oeRwg|bs=jce-m|y4P7zp&Ila03{!~{#Q#@&1G-$2U z=qM@>)8qZ3#5L#ele_a6WTYk#H1q$2^FMLWUW@_m|DhOy&gBOd# zH)LM?8Y{OUME>f{f8{m+_>kAiT;?d#CITtclG)qd%~EIun=a%tqG_h%p^9cuRLd6m^VpcP?+RPT%TnRNFQXwr44!9&05X|oP-CT$QMD+ zs)#NhQR}!*v?1i2Yn-icfuAq|E?RKD@3D+Te%{w&^N-keoV#(en(D|gLd!qnRwczf zNFk$z?^o2bjwyTbT%W$T*I~S2SAg6P(Z!0!_-6}mvlEt@AOF$36D`6PuGJCW>4&Tc zL-GHmVye4bPPHge1noQfYVnFOv9U0F=F^h`yufoj=sZ2;UX*g1msZTxob?ime~L$eOB1KF5AsFL zUr2Q}IXM<#QBTpw=}3&*f~+~Y)ebQ$5XG6itS`2s4TGNJB|UkpbbjFa+BdOY-qfZ` zqK18&N7vwXS7Vp^k4$B&@4m(P<7z>cwj^dKx|DY&C;qORXmfmgIxSkd3QS)(#u`i- z6vW!(D>g%9f9vN%!r2Y(W{tAV644qll~A_?+bQzgQbpzPh8W!O*#j1{64@oQb$|2y zaWmN=OtAZ%na^cJpI5!f-Cmad_8Rh>UQ)1zQh-dLn8@?%3|pCh{~{Mtt7fgHc*veR8O?0*Pv|VSFV|M#m9_H>%k^lH78=oI@@JT}b6A)qutk5{c;qk%S~i#o0|>{mS2LL_yCT+!grFY=q$7>I)-cxH3XU`!V6jxe}y~!t$=Pdnpt=<0g zNp>0b9x+?iTf8PShnsysF?RY@bC>^4|D)Ssk#0Oj3w8z08b~RBLDAN`z4@|bvx!G& zt)w#BxkyXfP|1ntno;&I8~U%BZx3MC`KX3cTV+Nyp;~#zT|r!Edf07Tnt!6WkI#uvbU1m9o!yvFId z7!Hnqld@g|e|{iuSM;3rZtf4jTWhs1Vx+HbrDnFV`73>W zU}Qc*DoejHl*T@j=ndg^Y}O2Ri${GY$)Ob_)pskiC1f|rLT4ugN!@E`QqAm+(`?}n zurbThf|#t?4oR0sOEcKsgIY`bVe77#|D@=`Ap`!+r<9{m`I2zQe7q65<`Xsxrrjxd zgsDd6yUus$?YN&HHeat(Rc=*)49!}7)#BH&^ANkX60yG`( z2i_f~{|d*m7JvKhV9sZc)H_8eR=pCtj?p?rSgZQbHj<&&CrLl}jNOX2*!iO3MD!)e zXf^p2Q`~ucywb2$Z+?h<&qrmvC@wh9m7yPs?-aS`hQzxJs|6_e-0;=uA-~|3DlQmj z%%rl7rn__(YNSYZkqkog!Q(ATgv>>KyO+|3T>}ZwPjl~%jA}#AoY)YESV>^Y^|(zX zw_1*<0Li8J@i4|l&n<|j#w#V8YJviKaPL~JZo?N01U z7Fp)q=t5GKv=>O=fyeN@c9VBQYK*w_b7)mLHr8 z_Jt8VxpF0Qotp5aEkaoD=!QyLQF@S0Wo(NR{OKNTYCL}*Hu7O|;VzZb7y&oAZ%5|G z&Lu7#$oL{45#%%H4|8Yep%cE`eBgMRB;yCEEjVM@pUQ(uBX+DsPD7Sk&x8rcl?xn^ z=bWD9ixJ?WP<$4Yp#cl?@e%mI{>(&s;cT_nj-a5hCetiAsmY zWzN&7MykjlCDtJWQq0xH_$U0U0s;qb-^L|eE4#c+ z2v&DnSAd6iw|2DBB(zfmQt)ETu{UBVaF4Pvco#Bd&O1DDO=}Qxa~nnRbWgC2 z;+Pp?#K*abaQcjA}X!F2A&vTc?M z1M*;k#Le%4b*nz#E7Gk}rr;(cw#{aTII6xK>v0jDl^7LaeD#YKwHOzOasv!3hv6lFI6l|zI@3jjyWqg z^N8vvbKpEM^w*%J#;!S2YdK+j>cb*$&cX1?b89mo1Dz?cXm)<{T0&XDKWiPGU#~?~X@?h2VL=a=aWL|=!5B~+ zz+@Qh${H6kDh5_MtJwOH5*K4UnRsNJm*yxB{cZO%rLW4XV8VPIv$*4`M`M-6n+lrk z_ivc2i5%wO{!2BVh|H8g=DnH0&w01o#F79sE$dO|+1Pb&SOLg(V(iIZcir!7JQdH| z%6f9NOmXtv=11WR1%-NzeC9}3K2|Udae>w2HVBzZ<{o__Ixv}v<5^SUsaL0e`96; zwV=n(C1*TOkTbE3ryJ>=E;V-rVlkT*^R3#Ygb^BYW)GXuhWRxF!zlXS!X~ntIh|5f zShL%D!_Ou6Te4JliY@|p z35PtF_VM!aULGDh6bp)GV%pM{{o<=ZW0xS1x0mC1sMj_rVGbc?FTe85(nvs&OdB=P z`1)r#(_EKXi8&R}-?@kZtF9W6lP(Sa8Lt1Q9s9`3 zHOvr^4&3D*cIWT~9uC7+A*D@TT1!_$F%0QLYy!!%vF=5PQHKh=syvSr^;8v=S~U{< zSm~9W+-3bGmGiEPz23*xnf>My%#=yBo1mN$6Mj&9JB%xF)U>Wh7xjT@WrFoI zBcm}K>Hx%iD+JZ!RhOw2j&A*6ROe?fYp(z4VMd|{Opo$MG>D7Z1XanB6|C_9kX>Y| z>3xK`H(mWa4#C`#f@gH#e`7U0C6ad@-Y^Kqce9ep9wuu3om93V4O}fscUQlOE-S{@ zCWVQ~=rz=BZ)*#ZWc*Z< zszJu&b@{cmkSoh2wc;LqAi0h984P|kWhm!k_lJZRifG0VMs6A9=G)KhZjX+QQo2KsWx2i^2vboPT?G0GqHUYcYH zzk$=$h78ZlBxV#hHXTBL>h-hgR}0uilF9YNzhRtou`ee^=reNX(C5zFVcUCDxI{AX z*tE{FPO*llWkpHCyN)zlIhQn97x|GR*|SZO6!%_)hF=OVc=Eh~%#US+9&am41yAO^ z`SGt$jFC$eF~2x5HSBw>k>*4O$v}PMs>JWJ73}P1|F7uttpBz5!`C71UkKn7^iavc zg1}L6yM%&=uvtbZamRUfWhIgfB-hh?qUYH8+363lPz0KZv1h6=)E_G8^6Aw2F*^+P zEaE0%dMNb07{}!)Zs(HMv6t`Z=7IG+!rD}MwBnq59d!3k2rYQ3E|Fk`7ZvDEt@7ZH zF;g|mU2Nd$Uv7SDeaUHcZn)f8_;#V4zHihn+9Sj9_VsYf_V;)CDi9W8LEd1)ux?~U z??K?w+T{$@U!VgY=Z^=m>B;vGo$0m-UGB+%##u%AEYAr#s&MrO>0>39igwRgy^M)F z0e0Phg4IP|^yx-aHWI+3FV)!j#}1QR)Dsei+Q)k&&(uB1T06=@^mu9NK)@t>8e_-5;|vN;i^2wv9SmZZ^s-dc@4l zl~sIyvw9Oht+DEW!mh+Ei`9EM$=t)a#|^VII#ATn7(2Cq>i3-LRkJRddLJ*13B*O!xKVYx= z-%}kqbh}izdy>R~&fU9bJJ%moK`7$F^+luc(Q-{@gkw5U-G*yVBSvvOuOoL619D&1 zBa+0|w8sn7r1BCA_pq6%4AMApUscO1_dsR zi2-gZx;1*Dl3wGUb8G#Ntcksd+l_U{yEG2QK2!2BSXvmK%{A1OrVLzhMVOD@R7+be zfILq<#kT+adzty~1cUNs4XojkLs^#%Y6n?8a>Ls3fs_-4YNd^M!rvbGik{MraU;DB zibx>Z(}#y^7G$3CFx}->zETm|jik@YzH`L+F=)o@a7TSes>*k^V z^d;aL>fXsm@q_a$7h7-aLBCwJDjE6Ez~!=7yU?{#9_IL*oWRJ0Rf_z|s1L~GpN-wT zdCUZ;fg@UPZroqLG$IQ`~HDvtH?8 z^|sybG@118x2E&w5ZC7G8SV7hn90049z}pXE$4#3TUSbGgB3#f901dFf0nLdh_DRm#47{2n9|N7=K+cMgiv}oXaAAQ z)8z(rvF!di!0)5DXwIyJ{e9Z%LJ)#OcemvKxm9?Tl89Ei$u$mpUanMQ(fz_KEu7@_rTR z6b6WdlFk{6*J}r{M1AOOBVN{FPTz*id~0D_uk1=ZU~r@uOD!^6KW#K&OJZ+f_g854 z4M-#soN&PM5E#!^o-#Bn@A|egLdgM-AMAeH@0K%U8UrKtNS&X}|Fg8SG|{XZO_Tj4 zys5(vataJX_tCcEyXt2LfAArDEXae^$V6w@pe%c1TFC7}GLFkaKJc`4iY{`IYi`g^ zAlxv~x&I6AX#kG1R-VH>nL^z(ZXDbUNGeSW8So&k<5G|p!z%^1X8Ijo>oe}bXii%h z!YBU{mk0!oGd@u5iR1<&_7i2^QQm#us=BS5R$PHsdpew;=Gl6p14S}Pk zRP<(g*`_?iN&|R{k*M zRz*xk0rYqP_VdbM}o_VZ=t)H@DD zHx?l1RiXVg+86Jgk0&Toe{B5fjdO5bbnC#48miQ8) zMJ7((fyV9ZnHLk__=qFa2`FSCpMm9H;1$tY|7IOpRPOoeEqSRhL!S1rc)P95?lebA zXj^mc`~gMa89jlS4NRP2;n`0i2{E z6y(hV>`njv2xNw7L;eC|YRw}Bj`7mbpy59Ll=fmx1dT=ZLB`+(!n>wFDI=3&HuO&i zpd10af;s6tMX3XQO(pJyrQRH<;nG8%wGa{u@_h$LJVzFAr7L__i1d>hK`ifgTyJeS zgWi9ml$Y$}-VW+Yrf2ZywmKOt=K;MZMYU@=`iq1*vH5f`AC?4xerA593CM)=VY#-x z?(u^*L_<*F@d9kmqIIX9lDwAEgN6n%k z0jA0Jzho+|N<+rpZds3mc87t_!|i#^Zquds>Gx_z2*+m6^}TQilJwrFw4kpbW*q8NgcLK4!ca6 zXCLEhHuTu5VCW#QFrw)7OvMY!>7s%`6#bZf@kKCVC;Bj`nszDTw$)_N70Ga%1!?;C zn9V%CpMl*LcGl{AztFOC>*@sW_Wy0~(bWt46JRI27eNz0;R08>($j^u0_(`>OK&s* zX|~K(^_{Bt>H$d^sZBk#OyWR|-6W*$XRQ*2%B#s7m@6TH=)d>tMQe9pL`Lg9=R@_E zb34#0iw}uGHQ%$TMN;0^LVvNW?Z6oJ7oNM}`-^J(v?r}TJ+#)MgKNezS~jW(GaQ+e zacwy{A9>^X{iV{-eK*%zYudmRMgu#0pNtM?o$9qmvtL^IS>1_4=#{h z#QgsPmm;N2D$88THSUKMs0KYLG?3ZVnU?Wg@w?onH}dnhbArEVd1(JKYZOv!1+Hc!DzazUA}>`bp- zVW(?W0r4>Um5C`H+4E?6T}XaE^YKC=pr%HMn058DKlH*sKH^X?=>dtXw29OPqzHky zchq8v_Kjz@Pj{{eR`?Y})GGIrj7FjNAW4qtE7h#TNny*1YhLH5Fl|r{!8l1jME^ws zSzb4{8=u|I4I=WV1gZuq`8=n&wA&yjC_n7$uC}1T*oq^pO54Ee2!4V&)Kc%UOczmd zRD^QOlS1PrI2B-R=fZPsVAO?zCIn&ZoJBppjdm}7Ho8@cP*@#9`pg zW~#hY&4nmuMKZ8?3T;u7LcQo>X_phIG@&jiNG%0P#VhL2e5?nfYoy}8oLD1UX_!mv z;#vlak2xX2v34W*!UE{PCMIwIr+U=8*AtrO)Ro^htZ?_Dbw`wURj_Sw7wMl*_rLEt zrKr@qmBPJ61kv(U>$~Un{@X%t`v*HQ!lgd#Q7N^*f;V#K5ZTdfqPI?QeVItO?#=aM zfK_78pQEu}OMBWBqFXI(-AmI^!l{)FBW_v@6II`+CQ9@| zUho2lH;T|ec7l;)j9GV`L^q&7aD}0^h0reZ|KkXb*QuD@AjX7MfBA! zi*xBYNB^+v-?aeXx?h}mud{}UtSt}@uy4+}G3jgZ*FMOGnb9%$DS!$qfRlV{U5c+)fQYs0XtA0l1l^Mx zI-xQSMa+~SC$sb3H-lIkE1n-XE$~NOW^>nfb=sfxxDgaz?fm2=27k_4dv7eC6jY)%|eimZQW0i?-5KNyA z$Q}m$Kt+@2FEb94;iUP$?0gSdMxM}o^>VRBwXpO6IbrcUo>ue8MS`hDXvSKU7l$DM zjnSZy4p^2Fvlo$>Fi@fJ9Wgsfoc38PR6k4GL$BhD72NMv(Idn9(u z8|V=xWHP~g0%8$BJ4Z}zF@_2yQgcz*)m;{JUmC0m`yZEQ^79uLEc0Bj>>bgv~VUNzXu{wA@ydoGQh$?8#~ z$g1O-Znek0_+9m3^|vN1jE*d$j=J;B%=GZ_J-<&5Yo84h7?^*yCe`jBg;B@SO1uSV z+zhsV?{9G*@WZ^7*3CRy9Wvn528%%bv>kqg+eg?FU)x{X|3v9*@}BgUxmxsc`$KE* zK)SOl=N&%r)9h_U^z_WoO2|A8m!U_Am~Yn?BR{Ub#i>rJm-Woi&X!B41o|WXjYGN9 zuB}4#2$<*pPf7-#_-!_F8bpypW5=9}R-`r~J-KpKV>wZvoO6{=T!&pUohGUksjd}) z6rZo(71_bQ`Wv;fwoT*U7`K1Bt}N|ICI?THf|zzxts_Mg<;Z^Idh%1HGSOUhl`_#4 zceA#tI@tlo2Y){Ow;UgL0Pu-p{(I`oRTBzdK>top`xptd*jZ-{{hmAbEE(O diff --git a/html/github.css b/html/github.css deleted file mode 100644 index 47fc265..0000000 --- a/html/github.css +++ /dev/null @@ -1,127 +0,0 @@ -/* - -github.com style (c) Vasily Polovnyov - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #333; - background: #f8f8f8; -} - -.hljs-comment, -.hljs-template_comment, -.diff .hljs-header, -.hljs-javadoc { - color: #998; - font-style: italic; -} - -.hljs-keyword, -.css .rule .hljs-keyword, -.hljs-winutils, -.javascript .hljs-title, -.nginx .hljs-title, -.hljs-subst, -.hljs-request, -.hljs-status { - color: #333; - font-weight: bold; -} - -.hljs-number, -.hljs-hexcolor, -.ruby .hljs-constant { - color: #099; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-phpdoc, -.tex .hljs-formula { - color: #d14; -} - -.hljs-title, -.hljs-id, -.coffeescript .hljs-params, -.scss .hljs-preprocessor { - color: #900; - font-weight: bold; -} - -.javascript .hljs-title, -.lisp .hljs-title, -.clojure .hljs-title, -.hljs-subst { - font-weight: normal; -} - -.hljs-class .hljs-title, -.haskell .hljs-type, -.vhdl .hljs-literal, -.tex .hljs-command { - color: #458; - font-weight: bold; -} - -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-rules .hljs-property, -.django .hljs-tag .hljs-keyword { - color: #000080; - font-weight: normal; -} - -.hljs-attribute, -.hljs-variable, -.lisp .hljs-body { - color: #008080; -} - -.hljs-regexp { - color: #009926; -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.lisp .hljs-keyword, -.tex .hljs-special, -.hljs-prompt { - color: #990073; -} - -.hljs-built_in, -.lisp .hljs-title, -.clojure .hljs-built_in { - color: #0086b3; -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-doctype, -.hljs-shebang, -.hljs-cdata { - color: #999; - font-weight: bold; -} - -.hljs-deletion { - background: #fdd; -} - -.hljs-addition { - background: #dfd; -} - -.diff .hljs-change { - background: #0086b3; -} - -.hljs-chunk { - color: #aaa; -} diff --git a/html/highlight.pack.js b/html/highlight.pack.js deleted file mode 100644 index 15b173a..0000000 --- a/html/highlight.pack.js +++ /dev/null @@ -1 +0,0 @@ -var hljs=new function(){function j(v){return v.replace(/&/gm,"&").replace(//gm,">")}function t(v){return v.nodeName.toLowerCase()}function h(w,x){var v=w&&w.exec(x);return v&&v.index==0}function r(w){var v=(w.className+" "+(w.parentNode?w.parentNode.className:"")).split(/\s+/);v=v.map(function(x){return x.replace(/^lang(uage)?-/,"")});return v.filter(function(x){return i(x)||x=="no-highlight"})[0]}function o(x,y){var v={};for(var w in x){v[w]=x[w]}if(y){for(var w in y){v[w]=y[w]}}return v}function u(x){var v=[];(function w(y,z){for(var A=y.firstChild;A;A=A.nextSibling){if(A.nodeType==3){z+=A.nodeValue.length}else{if(t(A)=="br"){z+=1}else{if(A.nodeType==1){v.push({event:"start",offset:z,node:A});z=w(A,z);v.push({event:"stop",offset:z,node:A})}}}}return z})(x,0);return v}function q(w,y,C){var x=0;var F="";var z=[];function B(){if(!w.length||!y.length){return w.length?w:y}if(w[0].offset!=y[0].offset){return(w[0].offset"}function E(G){F+=""}function v(G){(G.event=="start"?A:E)(G.node)}while(w.length||y.length){var D=B();F+=j(C.substr(x,D[0].offset-x));x=D[0].offset;if(D==w){z.reverse().forEach(E);do{v(D.splice(0,1)[0]);D=B()}while(D==w&&D.length&&D[0].offset==x);z.reverse().forEach(A)}else{if(D[0].event=="start"){z.push(D[0].node)}else{z.pop()}v(D.splice(0,1)[0])}}return F+j(C.substr(x))}function m(y){function v(z){return(z&&z.source)||z}function w(A,z){return RegExp(v(A),"m"+(y.cI?"i":"")+(z?"g":""))}function x(D,C){if(D.compiled){return}D.compiled=true;D.k=D.k||D.bK;if(D.k){var z={};var E=function(G,F){if(y.cI){F=F.toLowerCase()}F.split(" ").forEach(function(H){var I=H.split("|");z[I[0]]=[G,I[1]?Number(I[1]):1]})};if(typeof D.k=="string"){E("keyword",D.k)}else{Object.keys(D.k).forEach(function(F){E(F,D.k[F])})}D.k=z}D.lR=w(D.l||/\b[A-Za-z0-9_]+\b/,true);if(C){if(D.bK){D.b="\\b("+D.bK.split(" ").join("|")+")\\b"}if(!D.b){D.b=/\B|\b/}D.bR=w(D.b);if(!D.e&&!D.eW){D.e=/\B|\b/}if(D.e){D.eR=w(D.e)}D.tE=v(D.e)||"";if(D.eW&&C.tE){D.tE+=(D.e?"|":"")+C.tE}}if(D.i){D.iR=w(D.i)}if(D.r===undefined){D.r=1}if(!D.c){D.c=[]}var B=[];D.c.forEach(function(F){if(F.v){F.v.forEach(function(G){B.push(o(F,G))})}else{B.push(F=="self"?D:F)}});D.c=B;D.c.forEach(function(F){x(F,D)});if(D.starts){x(D.starts,C)}var A=D.c.map(function(F){return F.bK?"\\.?("+F.b+")\\.?":F.b}).concat([D.tE,D.i]).map(v).filter(Boolean);D.t=A.length?w(A.join("|"),true):{exec:function(F){return null}};D.continuation={}}x(y)}function c(S,L,J,R){function v(U,V){for(var T=0;T";U+=Z+'">';return U+X+Y}function N(){if(!I.k){return j(C)}var T="";var W=0;I.lR.lastIndex=0;var U=I.lR.exec(C);while(U){T+=j(C.substr(W,U.index-W));var V=E(I,U);if(V){H+=V[1];T+=w(V[0],j(U[0]))}else{T+=j(U[0])}W=I.lR.lastIndex;U=I.lR.exec(C)}return T+j(C.substr(W))}function F(){if(I.sL&&!f[I.sL]){return j(C)}var T=I.sL?c(I.sL,C,true,I.continuation.top):e(C);if(I.r>0){H+=T.r}if(I.subLanguageMode=="continuous"){I.continuation.top=T.top}return w(T.language,T.value,false,true)}function Q(){return I.sL!==undefined?F():N()}function P(V,U){var T=V.cN?w(V.cN,"",true):"";if(V.rB){D+=T;C=""}else{if(V.eB){D+=j(U)+T;C=""}else{D+=T;C=U}}I=Object.create(V,{parent:{value:I}})}function G(T,X){C+=T;if(X===undefined){D+=Q();return 0}var V=v(X,I);if(V){D+=Q();P(V,X);return V.rB?0:X.length}var W=z(I,X);if(W){var U=I;if(!(U.rE||U.eE)){C+=X}D+=Q();do{if(I.cN){D+=""}H+=I.r;I=I.parent}while(I!=W.parent);if(U.eE){D+=j(X)}C="";if(W.starts){P(W.starts,"")}return U.rE?0:X.length}if(A(X,I)){throw new Error('Illegal lexeme "'+X+'" for mode "'+(I.cN||"")+'"')}C+=X;return X.length||1}var M=i(S);if(!M){throw new Error('Unknown language: "'+S+'"')}m(M);var I=R||M;var D="";for(var K=I;K!=M;K=K.parent){if(K.cN){D+=w(K.cN,D,true)}}var C="";var H=0;try{var B,y,x=0;while(true){I.t.lastIndex=x;B=I.t.exec(L);if(!B){break}y=G(L.substr(x,B.index-x),B[0]);x=B.index+y}G(L.substr(x));for(var K=I;K.parent;K=K.parent){if(K.cN){D+=""}}return{r:H,value:D,language:S,top:I}}catch(O){if(O.message.indexOf("Illegal")!=-1){return{r:0,value:j(L)}}else{throw O}}}function e(y,x){x=x||b.languages||Object.keys(f);var v={r:0,value:j(y)};var w=v;x.forEach(function(z){if(!i(z)){return}var A=c(z,y,false);A.language=z;if(A.r>w.r){w=A}if(A.r>v.r){w=v;v=A}});if(w.language){v.second_best=w}return v}function g(v){if(b.tabReplace){v=v.replace(/^((<[^>]+>|\t)+)/gm,function(w,z,y,x){return z.replace(/\t/g,b.tabReplace)})}if(b.useBR){v=v.replace(/\n/g,"
")}return v}function p(z){var y=b.useBR?z.innerHTML.replace(/\n/g,"").replace(/
|
]*>/g,"\n").replace(/<[^>]*>/g,""):z.textContent;var A=r(z);if(A=="no-highlight"){return}var v=A?c(A,y,true):e(y);var w=u(z);if(w.length){var x=document.createElementNS("http://www.w3.org/1999/xhtml","pre");x.innerHTML=v.value;v.value=q(w,u(x),y)}v.value=g(v.value);z.innerHTML=v.value;z.className+=" hljs "+(!A&&v.language||"");z.result={language:v.language,re:v.r};if(v.second_best){z.second_best={language:v.second_best.language,re:v.second_best.r}}}var b={classPrefix:"hljs-",tabReplace:null,useBR:false,languages:undefined};function s(v){b=o(b,v)}function l(){if(l.called){return}l.called=true;var v=document.querySelectorAll("pre code");Array.prototype.forEach.call(v,p)}function a(){addEventListener("DOMContentLoaded",l,false);addEventListener("load",l,false)}var f={};var n={};function d(v,x){var w=f[v]=x(this);if(w.aliases){w.aliases.forEach(function(y){n[y]=v})}}function k(){return Object.keys(f)}function i(v){return f[v]||f[n[v]]}this.highlight=c;this.highlightAuto=e;this.fixMarkup=g;this.highlightBlock=p;this.configure=s;this.initHighlighting=l;this.initHighlightingOnLoad=a;this.registerLanguage=d;this.listLanguages=k;this.getLanguage=i;this.inherit=o;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE]};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE]};this.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/};this.CLCM={cN:"comment",b:"//",e:"$",c:[this.PWM]};this.CBCM={cN:"comment",b:"/\\*",e:"\\*/",c:[this.PWM]};this.HCM={cN:"comment",b:"#",e:"$",c:[this.PWM]};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.CSSNM={cN:"number",b:this.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0};this.RM={cN:"regexp",b:/\//,e:/\/[gim]*/,i:/\n/,c:[this.BE,{b:/\[/,e:/\]/,r:0,c:[this.BE]}]};this.TM={cN:"title",b:this.IR,r:0};this.UTM={cN:"title",b:this.UIR,r:0}}();hljs.registerLanguage("javascript",function(a){return{aliases:["js"],k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document"},c:[{cN:"pi",b:/^\s*('|")use strict('|")/,r:10},a.ASM,a.QSM,a.CLCM,a.CBCM,a.CNM,{b:"("+a.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[a.CLCM,a.CBCM,a.RM,{b:/;/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:true,c:[a.inherit(a.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,c:[a.CLCM,a.CBCM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+a.IR,r:0}]}}); \ No newline at end of file diff --git a/html/index.html b/html/index.html deleted file mode 100644 index d80959b..0000000 --- a/html/index.html +++ /dev/null @@ -1,2310 +0,0 @@ - - - -asm.js - - - - - - - - - -
- -

Abstract

- -

This specification defines asm.js, a strict subset -of JavaScript that can be used as a low-level, efficient target -language for compilers. This sublanguage effectively describes a sandboxed -virtual machine for memory-unsafe languages like C or C++. A -combination of static and dynamic validation allows JavaScript engines -to employ an ahead-of-time (AOT) optimizing compilation strategy for -valid asm.js code. - -

Status

- -

This specification is working towards a candidate draft for asm.js -version 1. Mozilla's SpiderMonkey JavaScript engine provides an -optimizing implementation of this draft. - -

Changelog

- -
    -
  • 18 August 2014 -
      -
    • better "putting it all together" example -
    -
  • 23 July 2014 -
      -
    • formatting cleanups -
    • added variadic function types to the Global Types section -
    -
  • 22 July 2014 -
      -
    • clarified formal structure with explicit validation rule names -
    • moved function table validation from annotations section to validation section -
    • separated case and default validation rules -
    • eliminated unused expected case type parameter -
    • corrected type checks to subtype checks in AdditiveExpression, BitwiseXORExpression, BitwiseANDExpression, BitwiseORExpression, and ConditionalExpression -
    -
  • 8 July 2014 -
      -
    • minor editorial bugfixes -
    • non-function foreign imports are mut -
    • tightened the language on linking restrictions -
    -
  • 7 July 2014 -
      -
    • added 32-bit floating point types -
    • renamed doublish to double? for symmetry with float? -
    • separated heap access checking into a separate validation section -
    • separated load and store types for heap views -
    • added Math.fround and singleton fround type -
    • added a Float Coercions section -
    • added uncoerced CallExpression nodes to Expression for float coercions -
    • added float coercions to initializers, return type annotations, and legal function calls -
    • added restriction preventing float coercions of FFI calls -
    • added float support for operators and Math functions -
    • added float to legal result types for ConditionalExpression -
    • added variadic Math.min and Math.max -
    • eliminated the allowance for 1-byte views to elide their index shift (to future-proof for large heaps) -
    • simplified and generalized link-time restrictions on heap size -
    -
  • 12 December 2013 -
      -
    • return type of Math.abs is signed -
    -
  • 11 October 2013 -
      -
    • unsigned is not an extern type -
    • added missing ! operator to UnaryExpression operators -
    • added note about ~~ to Unary Operators section -
    • added note about parenthesis agnosticism to Syntax section -
    • added note about ASI to Syntax section -
    • added -NumericLiteral cases everywhere -
    • function calls require explicit coercions -
    • eliminated type unknown, which is no longer needed -
    • return type of integer % is intish -
    -
- -

Table of Contents

- - - -
    -
  1. 1 Introduction
  2. -
  3. 2 Types -
      -
    1. 2.1 Value Types -
        -
      1. 2.1.1 void
      2. -
      3. 2.1.2 double
      4. -
      5. 2.1.3 signed
      6. -
      7. 2.1.4 unsigned
      8. -
      9. 2.1.5 int
      10. -
      11. 2.1.6 fixnum
      12. -
      13. 2.1.7 intish
      14. -
      15. 2.1.8 double?
      16. -
      17. 2.1.9 float
      18. -
      19. 2.1.10 float?
      20. -
      21. 2.1.11 floatish
      22. -
      23. 2.1.12 extern
    2. -
    3. 2.2 Global Types
  4. -
  5. 3 Environments -
      -
    1. 3.1 Global Environment
    2. -
    3. 3.2 Variable Environment
    4. -
    5. 3.3 Environment Lookup
  6. -
  7. 4 Syntax
  8. -
  9. 5 Annotations -
      -
    1. 5.1 Parameter Type Annotations
    2. -
    3. 5.2 Return Type Annotations
    4. -
    5. 5.3 Function Type Annotations
    6. -
    7. 5.4 Variable Type Annotations
    8. -
    9. 5.5 Global Variable Type Annotations
    10. -
    11. 5.6 Function Table Types
  10. -
  11. 6 Validation Rules -
      -
    1. 6.1 ValidateModule(f)
    2. -
    3. 6.2 ValidateExport(Δ, s)
    4. -
    5. 6.3 ValidateFunctionTable(Δ, s)
    6. -
    7. 6.4 ValidateFunction(Δ, f)
    8. -
    9. 6.5 ValidateStatement(Δ, Γ, τ, s) -
        -
      1. 6.5.1 Block
      2. -
      3. 6.5.2 ExpressionStatement
      4. -
      5. 6.5.3 EmptyStatement
      6. -
      7. 6.5.4 IfStatement
      8. -
      9. 6.5.5 ReturnStatement
      10. -
      11. 6.5.6 IterationStatement
      12. -
      13. 6.5.7 BreakStatement
      14. -
      15. 6.5.8 ContinueStatement
      16. -
      17. 6.5.9 LabelledStatement
      18. -
      19. 6.5.10 SwitchStatement
    10. -
    11. 6.6 ValidateCase(Δ, Γ, τ, c)
    12. -
    13. 6.7 ValidateDefault(Δ, Γ, τ, d)
    14. -
    15. 6.8 ValidateExpression(Δ, Γ, e) -
        -
      1. 6.8.1 Expression
      2. -
      3. 6.8.2 NumericLiteral
      4. -
      5. 6.8.3 Identifier
      6. -
      7. 6.8.4 CallExpression
      8. -
      9. 6.8.5 MemberExpression
      10. -
      11. 6.8.6 AssignmentExpression
      12. -
      13. 6.8.7 UnaryExpression
      14. -
      15. 6.8.8 MultiplicativeExpression
      16. -
      17. 6.8.9 AdditiveExpression
      18. -
      19. 6.8.10 ShiftExpression
      20. -
      21. 6.8.11 RelationalExpression
      22. -
      23. 6.8.12 EqualityExpression
      24. -
      25. 6.8.13 BitwiseANDExpression
      26. -
      27. 6.8.14 BitwiseXORExpression
      28. -
      29. 6.8.15 BitwiseORExpression
      30. -
      31. 6.8.16 ConditionalExpression
      32. -
      33. 6.8.17 Parenthesized Expression
    16. -
    17. 6.9 ValidateCall(Δ, Γ, τ, e)
    18. -
    19. 6.10 ValidateHeapAccess(Δ, Γ, e)
    20. -
    21. 6.11 ValidateFloatCoercion(Δ, Γ, e)
  12. -
  13. 7 Linking
  14. -
  15. 8 Operators -
      -
    1. 8.1 Unary Operators
    2. -
    3. 8.2 Binary Operators
  16. -
  17. 9 Standard Library
  18. -
  19. 10 Heap View Types
  20. -
  21. Acknowledgements
- - -

1 Introduction

- -

This specification defines asm.js, a strict subset of -JavaScript that can be used as a low-level, efficient target language -for compilers. The asm.js language provides an abstraction similar to -the C/C++ virtual machine: a large binary heap with efficient loads -and stores, integer and floating-point arithmetic, first-order -function definitions, and function pointers. - -

Programming Model

- -

The asm.js programming model is built around integer and -floating-point arithmetic and a virtual heap represented as -a typed -array. While JavaScript does not directly provide constructs for -dealing with integers, they can be emulated using two tricks: - -

    -
  • integer loads and stores can be performed using the typed arrays -API; and -
  • integer arithmetic is equivalent to the composition of -JavaScript's floating-point arithmetic operators with the integer -coercions performed by the bitwise operators. -
- -

As an example of the former, if we have -an Int32Array -view of the heap called HEAP32, then we can load the -32-bit integer at byte offset p: - - - -

-
HEAP32[p >> 2]|0
-
- -

The shift converts the byte offset to a 32-bit element offset, and -the bitwise coercion ensures that an out-of-bounds access is coerced -from undefined back to an integer. - - - -

As an example of integer arithmetic, addition can be performed by -taking two integer values, adding them with the built-in addition -operator, and coercing the result back to an integer via the bitwise -or operator: - -

-
(x+y)|0
-
- -

This programming model is directly inspired by the techniques -pioneered by the Emscripten -and Mandreel compilers. - -

Validation

- -

The asm.js sub-language is defined by a -static type system that can be checked -at JavaScript parse time. Validation of asm.js code is designed to be -"pay-as-you-go" in that it is never performed on code that does not -request it. An asm.js module requests validation by means -of a -special prologue -directive, similar to that of ECMAScript Edition -5's strict -mode: - -

-
function MyAsmModule() {
-    "use asm";
-    // module body
-}
-
- -

This explicit directive allows JavaScript engines to avoid -performing pointless and potentially costly validation on other -JavaScript code, and to report validation errors in developer consoles -only where relevant. - -

Ahead-Of-Time Compilation

- -

Because asm.js is a strict subset of JavaScript, this specification -only defines the validation logic—the execution semantics is -simply that of JavaScript. However, validated asm.js is amenable to -ahead-of-time (AOT) compilation. Moreover, the code generated by an -AOT compiler can be quite efficient, featuring: - -

    -
  • unboxed representations of integers and floating-point numbers; -
  • absence of runtime type checks; -
  • absence of garbage collection; and -
  • efficient heap loads and stores (with implementation strategies varying by platform). -
- -

Code that fails to validate must fall back to execution by -traditional means, e.g., interpretation and/or just-in-time (JIT) -compilation. - - - -

Linking

- -

Using an asm.js module requires calling its function to obtain an -object containing the module's exports; this is known -as linking. An asm.js module can also be given access to -standard libraries and custom JavaScript functions through linking. An -AOT implementation must perform certain dynamic -checks to check compile-time assumptions about the linked -libraries in order to make use of the compiled code. - -

This figure depicts a simple architecture of an AOT implementation -that otherwise employs a simple interpreter. If either dynamic or -static validation fails, the implementation must fall back to the -interpreter. But if both validations succeed, calling the module -exports executes the binary executable code generated by AOT -compilation. - -

- -
- -

External Code and Data

- -

Within an asm.js module, all code is fully statically typed and -limited to the very restrictive asm.js dialect. However, it is -possible to interact with recognized standard JavaScript libraries and -even custom dynamic JavaScript functions. - -

An asm.js module can take up to three optional parameters, -providing access to external JavaScript code and data: - -

    -
  • a standard library object, providing access to a -limited subset of the JavaScript standard -libraries; -
  • a foreign function interface (FFI), providing access to -custom external JavaScript functions; and -
  • a heap buffer, providing a -single ArrayBuffer -to act as the asm.js heap. -
- -

These objects allow asm.js to call into external JavaScript (and to -share its heap buffer with external JavaScript). Conversely, the -exports object returned from the module allows external JavaScript to -call into asm.js. - -

So in the general case, an asm.js module declaration looks like: - -

-
function MyAsmModule(stdlib, foreign, heap) {
-    "use asm";
-
-    // module body...
-
-    return {
-        export1: f1,
-        export2: f2,
-        // ...
-    };
-}
-
- -

Function parameters in asm.js are provided a type annotation by -means of an explicit coercion on function entry: - -

-
function geometricMean(start, end) {
-  start = start|0; // start has type int
-  end = end|0;     // end has type int
-  return +exp(+logSum(start, end) / +((end - start)|0));
-}
- -
- -

These annotations serve two purposes: first, to provide the -function's type signature so that the validator can enforce that all -calls to the function are well-typed; second, to ensure that even if -the function is exported and called by external JavaScript, its -arguments are dynamically coerced to the expected type. This ensures -that an AOT implementation can use unboxed value representations, -knowing that once the dynamic coercions have completed, the function -body never needs any runtime type checks. - -

Putting It All Together

- -

The following is a small but complete example of an asm.js module. - -

-
function GeometricMean(stdlib, foreign, buffer) {
-  "use asm";
-
-  var exp = stdlib.Math.exp;
-  var log = stdlib.Math.log;
-  var values = new stdlib.Float64Array(buffer);
-
-  function logSum(start, end) {
-    start = start|0;
-    end = end|0;
-
-    var sum = 0.0, p = 0, q = 0;
-
-    // asm.js forces byte addressing of the heap by requiring shifting by 3
-    for (p = start << 3, q = end << 3; (p|0) < (q|0); p = (p + 8)|0) {
-      sum = sum + +log(values[p>>3]);
-    }
-
-    return +sum;
-  }
-
-  function geometricMean(start, end) {
-    start = start|0;
-    end = end|0;
-
-    return +exp(+logSum(start, end) / +((end - start)|0));
-  }
-
-  return { geometricMean: geometricMean };
-}
-
- -

In a JavaScript engine that supports AOT compilation of asm.js, -calling the module on a proper global object and heap buffer would -link the exports object to use the statically compiled functions. - -

-
var heap = new ArrayBuffer(0x10000);          // 64k heap
-init(heap, START, END);                       // fill a region with input values
-var fast = GeometricMean(window, null, heap); // produce exports object linked to AOT-compiled code
-fast.geometricMean(START, END);               // computes geometric mean of input values
-
- -

By contrast, calling the module on a standard library object -containing something other than the true Math.exp or -Math.log would fail to produce AOT-compiled code: - -

-
var bogusGlobal = {
-  Math: {
-    exp: function(x) { return x; },
-    log: function(x) { return x; }
-  },
-  Float64Array: Float64Array
-};
-
-var slow = GeometricMean(bogusGlobal, null, heap); // produces purely-interpreted/JITted version
-console.log(slow.geometricMean(START, END));       // computes bizarro-geometric mean thanks to bogusGlobal
-
- - - -

2 Types

- -

Validation of an asm.js module relies on a static type system that -classifies and constrains the syntax. This section defines the types -used by the validation logic. - -

2.1 Value Types

- -

Validation in asm.js limits JavaScript programs to only use operations -that can be mapped closely to efficient data representations and -machine operations of modern architectures, such as 32-bit integers -and integer arithmetic. - -

The types of asm.js values are inter-related by a subtyping -relation, which can be represented pictorially: - -

- -
- -

The light boxes represent arbitrary JavaScript values that may flow -freely between asm.js code and external JavaScript code. - -

The dark boxes represent types that are disallowed from escaping -into external (i.e., non-asm.js) JavaScript code. (These values can be -given efficient, unboxed representations in optimized asm.js -implementations that would be unsound if they were allowed to escape.) - -

The meta-variables σ and τ are used to stand for value -types. - -

2.1.1 void

- -

The void type is the type of functions that -are not supposed to return any useful value. As JavaScript functions, -they produce the undefined value, but asm.js code is not -allowed to make use of this value; functions with return -type void can only be called for effect. - -

2.1.2 double

- -

The double type is the type of ordinary -JavaScript double-precision floating-point numbers. - -

2.1.3 signed

- -

The signed type is the type of signed -32-bit integers. While there is no direct concept of integers in -JavaScript, 32-bit integers can be represented as doubles, and integer -operations can be performed with JavaScript arithmetic, relational, -and bitwise operators. - -

2.1.4 unsigned

- -

The unsigned type is the type of unsigned -32-bit integers. Again, these are not a first-class concept in -JavaScript, but can be represented as floating-point numbers. - -

2.1.5 int

- -

The int type is the type of 32-bit integers -where the signedness is not known. In asm.js, the type of a variable -never has a known signedness. This allows them to be compiled as -32-bit integer registers and memory words. However, this -representation creates an overlap between signed and unsigned numbers -that causes an ambiguity in determining which JavaScript number they -represent. For example, the bit pattern 0xffffffff could -represent 4294967295 or -1, depending on the signedness. For this -reason, values of the int type are disallowed from -escaping into external (non-asm.js) JavaScript code. - -

2.1.6 fixnum

- -

The fixnum type is the type of integers in the -range [0, 231)—that is, the range of integers such -that an unboxed 32-bit representation has the same value whether it is -interpreted as signed or unsigned. - - -

2.1.7 intish

- -

Even though JavaScript only supports floating-point arithmetic, -most operations can simulate integer arithmetic by coercing their -result to an integer. For example, adding two integers may overflow -beyond the 32-bit range, but coercing the result back to an integer -produces the same 32-bit integer as integer addition in, say, C. - -

The intish type represents the result of a -JavaScript integer operation that must be coerced back to an integer -with an explicit coercion -(ToInt32 -for signed integers -and ToUint32 -for unsigned integers). Validation requires all intish -values to be immediately passed to an operator or standard library -that performs the appropriate coercion or else dropped via an -expression statement. This way, each integer operation can be -compiled directly to machine operations. - -

The one operator that does not support this approach is -multiplication. (Multiplying two large integers can result in a large -enough double that some lower bits of precision are lost.) So asm.js -does not support applying the multiplication operator to integer -operands. Instead, the -proposed Math.imul -function is recommended as the proper means of implementing integer -multiplication. - - -

2.1.8 double?

- -

The double? type represents operations that -are expected to produce a double but may also produce -undefined, and so must be coerced back to a number -via ToNumber. -Specifically, reading out of bounds from a typed array -produces undefined. - -

2.1.9 float

- -

The float type is the type of 32-bit -floating-point numbers. - -

2.1.10 float?

- -

The float? type represents operations that -are expected to produce a float but, similar -to double?, may also produce undefined and -so must be coerced back to a 32-bit floating point number -via fround. -Specifically, reading out of bounds from a typed array -produces undefined. - -

2.1.11 floatish

- -

Similar to integers, JavaScript can almost support 32-bit -floating-point arithmetic, but requires extra coercions to properly -emulate the 32-bit semantics. As proved in -When is double -rounding innocuous? (Figueroa 1995), both the 32- and 64-bit -versions of standard arithmetic operations produce equivalent results -when given 32-bit inputs and coerced to 32-bit outputs. - -

The floatish type, -like intish, represents the result of a JavaScript 32-bit -floating-point operations that must be coerced back to a 32-bit -floating-point value with an -explicit fround -coercion. Validation requires all floatish values to be -immediately passed to an operator or standard library that performs -the appropriate coercion or else dropped via an expression -statement. This way, each 32-bit floating-point operation can be -compiled -directly to machine operations. - -

2.1.12 extern

- -The abstract extern type represents the root -of all types that can escape back into external JavaScript—in -other words, the light boxes in the above diagram. - -

2.2 Global Types

- -

Variables and functions defined at the top-level scope of an asm.js -module can have additional types beyond -the value types. These include: - -

    -
  • value types τ; -
  • ArrayBufferView types IntnArray, UintnArray, and FloatnArray; -
  • function types ((σ, …) → τ) ∧ … ∧ ((σ′, …) → τ′); -
  • variadic function types ((σ, σ) → τ) ∧ … ∧ ((σ′, σ′) → τ′); -
  • function table types ((σ, …) → τ)[n]; -
  • the special type fround of Math.fround; and -
  • the FFI function type Function. -
- -

The "∧" notation for function types serves to represent -overloaded functions and operators. For example, -the Math.abs function is -overloaded to accept either integers or floating-point numbers, and -returns a different type in each case. Similarly, many of -the operators have overloaded types. - -

The meta-variable γ is used to stand for global types. - -

3 Environments

- -

Validating an asm.js module depends on tracking contextual -information about the set of definitions and variables in scope. This -section defines the environments used by the validation -logic. - -

3.1 Global Environment

- -

An asm.js module is validated in the context of a global -environment. The global environment maps each global variable to -its type as well as indicating whether the variable is mutable: - -

{ x : (mut|imm) γ, … }
- -

The meta-variable Δ is used to stand for a global environment. - -

3.2 Variable Environment

- -

In addition to the global environment, each function -body in an asm.js module is validated in the context of -a variable environment. The variable environment maps each -function parameter and local variable to its value type: - -

{ x : τ, … } - -

The meta-variable Γ is used to stand for a variable environment. - -

3.3 Environment Lookup

- -

Looking up a variable's type - -

-Lookup(Δ, Γ, x) -
- -

is defined by: - -

    -
  • τ if x : τ occurs in Γ; -
  • γ if x does not occur in Γ and x -: mut γ or x : imm γ -occurs in Δ -
- -

If x does not occur in either environment then -the Lookup function has no result. - -

4 Syntax

- -

Validation of an asm.js module is specified by reference to -the ECMAScript -grammar, but conceptually operates at the level of abstract -syntax. In particular, an asm.js validator must obey the following -rules: - -

    -
  • Empty statements (;) are always ignored, whether in -the top level of a module or inside an asm.js function body. -
  • No variables bound anywhere in an asm.js module (whether in the -module function parameter list, global variable declarations, asm.js -function names, asm.js function parameters, or local variable -declarations) may have the name eval -or arguments. -
  • Where it would otherwise parse equivalently in JavaScript, -parentheses are meaningless. Even where the specification matches on -specific productions of Expression such as literals, the -source may contain extra meaningless parentheses without affecting -validation. -
  • Automatic semicolon insertion is respected. An asm.js source file -may omit semicolons wherever JavaScript allows them to be omitted. -
- -

These rules are otherwise left implicit in the rest of the -specification. - -

5 Annotations

- -

All variables in asm.js are explicitly annotated with type -information so that their type can be statically enforced by -validation. - -

5.1 Parameter Type Annotations

- -

Every parameter in an asm.js function is provided with an explicit -type annotation in the form of a coercion. This coercion serves two -purposes: the first is to make the parameter type statically apparent -for validation; the second is to ensure that if the function is -exported, the arguments dynamically provided by external JavaScript -callers are coerced to the expected type. For example, a bitwise OR -coercion annotates a parameter as having type int: - -

-
function add1(x) {
-    x = x|0; // x : int
-    return (x+1)|0;
-}
-
- -

In an AOT implementation, the body of the function can be -implemented fully optimized, and the function can be given two entry -points: an internal entry point for asm.js callers, which are -statically known to provide the proper type, and an external dynamic -entry point for JavaScript callers, which must perform the full -coercions (which might involve arbitrary JavaScript computation, e.g., -via implicit calls to valueOf). - -

There are three recognized parameter type annotations: - -

-x:Identifier = x:Identifier|0;
-x:Identifier = +x:Identifier;
-x:Identifier = f:Identifier(x:Identifier); -
- -

The first form annotates a parameter as type int, the -second as type double, and the third as -type float. In the latter case, -Lookup(Δ, Γ, f) must -be fround. - -

5.2 Return Type Annotations

- -

An asm.js function's formal return type is determined by -the last statement in the function body, which for -non-void functions is required to be -a ReturnStatement. This distinguished return statement may -take one of five forms: - -

-return +e:Expression;
-return e:Expression|0;
-return n:-?NumericLiteral;
-return f:Identifier(arg:Expression);
-return; -
- -

The first form has return type double. The second has -type signed. The third has return -type double if n is composed of a floating-point -literal, i.e., a numeric literal with the character . in -its source; alternatively, if n is composed of an integer -literal and has its value in the range [-231, -231), the return statement has return -type signed. The fourth form has return -type float, and the fifth has return -type void. - -

If the last statement in the function body is not -a ReturnStatement, or if the function body has no non-empty -statements (other than the initial declarations and -coercions—see Function -Declarations), the function's return type is void. - -

5.3 Function Type Annotations

- -

The type of a function declaration - -

-function f:Identifier(x:Identifier) {
-    (x:Identifier = AssignmentExpression;)
-    (var (y:Identifier = (-?NumericLiteral | Identifier(-?NumericLiteral))),)
-    body:Statement
-} -
- -

is (σ,…) → τ where σ,… are the -types of the parameters, as provided by -the parameter type -annotations, and τ is the formal return type, as provided by -the return type annotation. The -variable f is stored in -the global environment with -type imm (σ,…) → τ. - -

5.4 Variable Type Annotations

- -

The types of variable declarations are determined by their -initializer, which may take one of two forms: - -

-n:-?NumericLiteral
-f:Identifier(n:-?NumericLiteral) - -
- -

In the first case, the variable type is double -if n's source contains the character .; -otherwise n may be an integer literal in the range -[-231, 232), in which case the variable type -is int. - -

In the second case, the variable type -is float. Lookup(Δ, Γ, f) -must be fround and n must be a floating-point -literal with the character . in its source. - - - -

5.5 Global Variable Type Annotations

- -

A global variable declaration is a VariableStatement node -in one of several allowed forms. Validating global variable -annotations takes a Δ as input and produces as output a new -Δ′ by adding the variable binding to Δ. - -

A global program variable is initialized to a literal: - -

-var x:Identifier = n:-?NumericLiteral;
-var x:Identifier = f:Identifier(n:-?NumericLiteral); -
- -

The global variable x is stored in -the global environment with -type mut τ, where τ is determined in the same way -as local variable type -annotations. - -

A standard library import is of one of the following two forms: - -

-var x:Identifier = stdlib:Identifier.y:Identifier;
-var x:Identifier = stdlib:Identifier.Math.y:Identifier; -
- -

The variable stdlib must match the first parameter of -the module declaration. The global -variable x is stored in -the global environment with -type imm γ, where γ is the type of -library y or Math.y as specified by -the standard library types. - -

A foreign import is of one of the following three forms: - -

-var x:Identifier = foreign:Identifier.y:Identifier;
-var x:Identifier = foreign:Identifier.y:Identifier|0;
-var x:Identifier = +foreign:Identifier.y:Identifier; -
- -

The variable foreign must match the second parameter of -the module declaration. The global -variable x is stored in -the global environment with -type imm Function for the first form, mut -int for the second, and mut double for the third. - -

A global heap view is of the following form: - -

-var x:Identifier = new stdlib:Identifier.view:Identifier(heap:Identifier); -
- -

The variable stdlib must match the first parameter of -the module declaration and the -variable heap must match the third. The -identifier view must be one of the -standard ArrayBufferView -type names. The global variable x is stored in -the global environment with -type imm -view. - -

5.6 Function Table Types

- -

A function table is a VariableStatement of the form: - -

-var x:Identifier = [f0:Identifier, f:Identifier,]; -
- -

The function table x is stored in -the global environment with -type imm ((σ,…) → τ)[n] -where (σ,…) → τ is the type of f in the -global environment and n is the length of the array literal. - - - -

6 Validation Rules

- -

To ensure that a JavaScript function is a proper asm.js module, it -must first be statically validated. This section specifies the -validation rules. The rules operate on JavaScript abstract syntax, -i.e., the output of a JavaScript parser. The non-terminals refer to -parse nodes defined by productions in -the ECMAScript -grammar, but note that the asm.js validator only accepts a subset -of legal JavaScript programs. - -

The result of a validation operation is either -a success, indicating that a parse node is statically valid -asm.js, or a failure, indicating that the parse node is -statically invalid asm.js. - -

6.1 ValidateModule(f)

- -

The ValidateModule rule validates an asm.js module, which -is either a FunctionDeclaration -or FunctionExpression node. - -

Validating a module of the form - -

-function f:Identifieropt((stdlib:Identifier(, foreign:Identifier(, heap:Identifier)opt)opt)opt) {
-    "use asm";

-    var:VariableStatement
-    fun:FunctionDeclaration
- -    table:VariableStatement
-    exports:ReturnStatement
-} -
- -

succeeds if: - -

    -
  • f, stdlib, foreign, heap, and -the var, fun, and table variables are all -mutually distinct; -
  • the global environment Δ is constructed in three stages: -
      -
    1. the global declarations are - validated in an empty initial environment Δ0, - producing a new global environment Δ1; -
    2. the types from the function - type annotations in the fun declarations are extracted - using Δ1, and then added to Δ1 to - produce Δ2; - -
    3. the types of the function - tables in the table declarations are extracted - using Δ2, and their types are added to - Δ2 to produce the completed global type environment - Δ. -
    -
  • for each fun declaration, ValidateFunction succeeds with environment Δ; -
  • for each table declaration, ValidateFunctionTable succeeds with environment Δ; and -
  • ValidateExport succeeds for exports with environment Δ. -
- - -

6.2 ValidateExport(Δ, s)

- -

The ValidateExport rule validates an asm.js module's -export declaration. An export declaration is -a ReturnStatement returning either a single asm.js function -or an object literal exporting multiple asm.js functions. - -

Validating an export declaration node - -

-return { (x:Identifier : f:Identifier), }; -
- -

succeeds if for each f, Δ(f) = imm -γ where γ is a function type (σ,…) → -τ. - -

Validating an export declaration node - -

-return f:Identifier; -
- -

succeeds if Δ(f) = imm γ where -γ is a function type (σ,…) → τ. - -

6.3 ValidateFunctionTable(Δ, s)

- -

The ValidateFunctionTable rule validates an asm.js -module's function table declaration. A function table declaration is -a VariableStatement binding an identifier to an array -literal. - -

Validating a function table of the form - -

-var x:Identifier = [f:Identifier,]; -
- -

succeeds if: - -

    -
  • the length n of the array literal is 2m for some m ≥ 0; -
  • Δ(x) = imm ((σ,…) → τ)[n]; and -
  • for each f, Δ(f) = (σ,…) → τ. -
- - -

6.4 ValidateFunction(Δ, f)

- -

The ValidateFunction rule validates an asm.js function -declaration, which is a FunctionDeclaration node. - -

Validating a function declaration of the form - -

-function f:Identifier(x:Identifier,) {
-    (x:Identifier = AssignmentExpression;)
-    (var (y:Identifier = (-?NumericLiteral | Identifier(-?NumericLiteral))),)
-    body:Statement
-} -
- -

succeeds if: - -

    -
  • Δ(f) = imm (σ,…) → τ; -
  • the x and y variables are all mutually distinct; -
  • the variable environment Γ is constructed by mapping each -parameter x to its -corresponding parameter type -annotation (annotations must appear in the same order as the -parameters) and each local variable y to -its variable type annotation; -
  • for each body -statement, ValidateStatement -succeeds with environments Δ and Γ and expected return -type τ. -
- -

6.5 ValidateStatement(Δ, Γ, τ, s)

- -

The ValidateStatement rule validates an asm.js statement. -Each statement is validated in the context of a global -environment Δ, a variable environment -Γ, and an expected return type τ. Unless otherwise -explicitly stated, a recursive validation of a subterm uses the same -context as its containing term. - -

6.5.1 Block

- -

Validating a Block statement node - -

-{ stmt:Statement} -
- -

succeeds -if ValidateStatement -succeeds for each stmt. - -

6.5.2 ExpressionStatement

- -

Validating an ExpressionStatement node - -

-cexpr:CallExpression ; -
- -

succeeds if ValidateCall -succeeds for cexpr with actual return type void. - -

Validating an ExpressionStatement node - -

-expr:Expression ; -
- -

succeeds -if ValidateExpression -succeeds for expr with some type σ. - -

6.5.3 EmptyStatement

- -

Validating an EmptyStatement node always succeeds. - -

6.5.4 IfStatement

- -

Validating an IfStatement node - -

-if ( expr:Expression ) stmt1:Statement else stmt2:Statement -
- -

succeeds -if ValidateExpression -succeeds for expr with a subtype of int -and ValidateStatement -succeeds for stmt1 and stmt2. - -

Validating an IfStatement node - -

-if ( expr:Expression ) stmt:Statement -
- -

succeeds -if ValidateExpression -succeeds for expr with a subtype of int -and ValidateStatement -succeeds for stmt. - -

6.5.5 ReturnStatement

- -

Validating a ReturnStatement node - -

-return expr:Expression ; -
- -

succeeds -if ValidateExpression -succeeds for expr with a subtype of the expected return type -τ. - -

Validating a ReturnStatement node - -

-return ; -
- -

succeeds if the expected return type τ is void. - - -

6.5.6 IterationStatement

- -

Validating an IterationStatement node - -

-while ( expr:Expression ) stmt:Statement -
- -

succeeds -if ValidateExpression -succeeds for expr with a subtype of int -and ValidateStatement -succeeds for stmt. - -

Validating an IterationStatement node - -

-do stmt:Statement while ( expr:Expression ) ; -
- -

succeeds -if ValidateStatement -succeeds for stmt -and ValidateExpression -succeeds for expr with a subtype of int. - -

Validate an IterationStatement node - -

-for ( init:ExpressionNoInopt ; test:Expressionopt ; update:Expressionopt ) body:Statement -
- -

succeeds if: - -

- -

6.5.7 BreakStatement

- -

Validating a BreakStatement node - -

-break Identifieropt ; -
- -

always succeeds. - -

6.5.8 ContinueStatement

- -

Validating a ContinueStatement node - -

-continue Identifieropt ; -
- -

always succeeds. - -

6.5.9 LabelledStatement

- -

Validating a LabelledStatement node - -

-Identifier : body:Statement -
- -

succeeds -if ValidateStatement -succeeds for body. - -

6.5.10 SwitchStatement

- -

Validating a SwitchStatement node - -

-switch ( test:Expression ) { case:CaseClausedefault:DefaultClauseopt } -
- -

succeeds if - -

    -
  • ValidateExpression succeeds for test with a subtype of signed; -
  • ValidateCase succeeds for each case; -
  • each case value is distinct; -
  • the difference between the maximum and minimum case values is less than 231; and -
  • ValidateDefault succeeds for default. -
- - - - - - -

6.6 ValidateCase(Δ, Γ, τ, c)

- -

Cases in a switch block are validated in the context -of a global environment Δ, a variable -environment Γ, and an expected return type τ. Unless -otherwise explicitly stated, a recursive validation of a subterm uses -the same context as its containing term. - - - - - - - -

Validating a CaseClause node - -

-case n:-?NumericLiteral : stmt:Statement… -
- -

succeeds if - -

    -
  • the source of n does not contain a . character; -
  • n is in the range [-231, 231); and -
  • ValidateStatement succeeds for each stmt. -
- -

6.7 ValidateDefault(Δ, Γ, τ, d)

- -

The default case in a switch block is validated in the -context of a global environment Δ, a variable -environment Γ, and an expected return type τ. Unless -otherwise explicitly stated, a recursive validation of a subterm uses -the same context as its containing term. - - - -

Validating a DefaultClause node - -

-default : stmt:Statement… -
- -

succeeds -if ValidateStatement -succeeds for each stmt. - - -

6.8 ValidateExpression(Δ, Γ, e)

- -

Each expression is validated in the context of a global -environment Δ and a variable environment -Γ, and validation produces the type of the expression as a -result. Unless otherwise explicitly stated, a recursive validation of -a subterm uses the same context as its containing term. - -

6.8.1 Expression

- -

Validating an Expression node - -

-expr1:AssignmentExpression ,, exprn:AssignmentExpression -
- -

succeeds with type τ if for every i -< n, one of the following conditions holds: - -

- -

and ValidateExpression -succeeds for exprn with type τ. - -

6.8.2 NumericLiteral

- -

Validating a NumericLiteral node - -

    -
  • succeeds with type double if the source contains a . character; or -validates as type double; -
  • succeeds with type fixnum if the source does not contain a . character and its numeric value is in the range [0, 231); or -
  • succeeds with type unsigned if the source does not contain a . character and its numeric value is in the range [231, 232). -
- -

Note that the case of negative integer constants is handled -under UnaryExpression. - -

Note that integer literals outside the range [0, 232) -are invalid, i.e., fail to validate. - -

6.8.3 Identifier

- -

Validating an Identifier node - -

-x:Identifier -
- -

succeeds with type τ if Lookup(Δ, Γ, x) = τ. - -

6.8.4 CallExpression

- -

Validating a CallExpression node succeeds with -type float -if ValidateFloatCoercion -succeeds. - -

6.8.5 MemberExpression

- -

Validating a MemberExpression node succeeds with type -τ -if ValidateHeapAccess -succeeds with load type τ. - -

6.8.6 AssignmentExpression

- -

Validating an AssignmentExpression node - -

-x:Identifier = expr:AssignmentExpression -
- -

succeeds with type τ -if ValidateExpression -succeeds for the nested AssignmentExpression with type τ -and one of the following two conditions holds: - -

    -
  • x is bound in Γ as a supertype of τ; or -
  • x is not bound in Γ and is bound to a mutable supertype of τ in Δ. -
- -

Validating an AssignmentExpression node - -

-lhs:MemberExpression = rhs:AssignmentExpression -
- -

succeeds with type τ -if ValidateExpression -succeeds for rhs with type τ -and ValidateHeapAccess -succeeds for lhs with τ as one of its legal store types. - - - -

6.8.7 UnaryExpression

- -

Validating a UnaryExpression node of the form - -

--NumericLiteral -
- -

succeeds with type signed if -the NumericLiteral source does not contain a . -character and the numeric value of the expression is in the range -[-231, 0). - -

Validating a UnaryExpression node of the form - -

-+cexpr:CallExpression -
- -

succeeds with type double -if ValidateCall succeeds -for cexpr with actual return type double. - -

Validating a UnaryExpression node of the form - -

-op:(+|-|~|!)arg:UnaryExpression -
- -

succeeds with type τ if the type of op is … -∧ (σ) → τ ∧ … -and ValidateExpression -succeeds with a subtype of σ. - -

Validating a UnaryExpression node of the form - -

-~~arg:UnaryExpression -
- -

succeeds with type signed -if ValidateExpression -succeeds for arg with a subtype of either double -or float?. - -

6.8.8 MultiplicativeExpression

- -

Validating a MultiplicativeExpression node - -

-lhs:MultiplicativeExpression op:(*|/|%) rhs:UnaryExpression -
- -

succeeds with type τ if: - -

- -

Validating a MultiplicativeExpression node - -

-expr:MultiplicativeExpression * n:-?NumericLiteral
-n:-?NumericLiteral * expr:UnaryExpression -
- -

succeeds with type intish if the source of n -does not contain a . character and -220 -< n < 220 -and ValidateExpressionexpr with a subtype of int. - -

6.8.9 AdditiveExpression

- -

Validating an AdditiveExpression node - -

-expr1 (+|-)(+|-) exprn -
- -

succeeds with type intish if: - -

- -

Otherwise, validating an AdditiveExpression node - -

-lhs:AdditiveExpression op:(+|-) rhs:MultiplicativeExpression -
- -

succeeds with type double if: - -

- -

6.8.10 ShiftExpression

- -

Validating a ShiftExpression node - -

-lhs:ShiftExpression op:(<<|>>|>>>) rhs:AdditiveExpression - -
- -

succeeds with type τ if - -

- -

6.8.11 RelationalExpression

- -

Validating a RelationalExpression node - -

-lhs:RelationalExpression op:(<|>|<=|>=) rhs:ShiftExpression - -
- -

succeeds with type τ if - -

- -

6.8.12 EqualityExpression

- -

Validating an EqualityExpression node - -

-lhs:EqualityExpression op:(==|!=) rhs:RelationalExpression - -
- -

succeeds with type τ if - -

- -

6.8.13 BitwiseANDExpression

- -

Validating a BitwiseANDExpression node - -

-lhs:BitwiseANDExpression & rhs:EqualityExpression
-
- -

succeeds with type signed -if ValidateExpression -succeeds for lhs and rhs with -a subtype of intish. - -

6.8.14 BitwiseXORExpression

- -

Validating a BitwiseXORExpression node - -

-lhs:BitwiseXORExpression ^ rhs:BitwiseANDExpression
-
- -

succeeds with type signed -if ValidateExpression -succeeds for lhs and rhs with -a subtype of intish. - -

6.8.15 BitwiseORExpression

- -

Validating a BitwiseORExpression node - -

-cexpr:CallExpression |0
-
- -

succeeds with type signed -if ValidateCall succeeds -for cexpr with actual return type signed. - -

Validating a BitwiseORExpression node - -

-lhs:BitwiseORExpression | rhs:BitwiseXORExpression
-
- -

succeeds with type signed -if ValidateExpression -succeeds for lhs and rhs with -a subtype of intish. - -

6.8.16 ConditionalExpression

- -

Validating a ConditionalExpression node - -

-test:BitwiseORExpression ? cons:AssignmentExpression : alt:AssignmentExpression -
- -

succeeds with type τ if: - -

- -

6.8.17 Parenthesized Expression

- -

Validating a parenthesized expression node - -

-( expr:Expression ) -
- -

succeeds with type τ -if ValidateExpression -succeeds for expr with type τ. - - -

6.9 ValidateCall(Δ, Γ, τ, e)

- -

Each function call expression is validated in the context of a -global environment Δ and a variable environment Γ, and -validates against an actual return type τ, which was -provided from the context in which the function call appears. A -recursive validation of a subterm uses the same context as its -containing term. - -

Validating a CallExpression node - -

-f:Identifier(arg:Expression,) -
- -

with actual return type τ succeeds if one of the following -conditions holds: - -

    -
  • ValidateFloatCoercion -succeeds for the node; -
  • Lookup(Δ, Γ, f) = … ∧ -(σ,…) → τ ∧ … -and ValidateExpression -succeeds for each arg with a subtype of its corresponding -σ; or -
  • Lookup(Δ, Γ, f) = … ∧ -(σ1,…,σn) -→ τ ∧ … -and ValidateExpression -succeeds for the first n argi expressions -with subtypes of their corresponding σi and -the remaining arg expressions with subtypes of σ. -
- -

Alternatively, validating the CallExpression succeeds with -any actual return type τ other than float -if Lookup(Δ, Γ, f) -= Function -and ValidateExpression -succeeds for each arg with a subtype of extern. - - - -

Validating a CallExpression node - -

-x:Identifier[index:Expression & n:-?NumericLiteral](arg:Expression,) -
- -

succeeds with actual return type τ if: - -

    -
  • the source of n does not contain a . character; -
  • Lookup(Δ, -Γ, x) = ((σ,…) → -τ)[n+1]; -
  • ValidateExpression -succeeds for index with a subtype of intish; and -
  • ValidateExpression -succeeds for each arg with a subtype of its corresponding -σ. -
- - - -

6.10 ValidateHeapAccess(Δ, Γ, e)

- -

Each heap access expression is validated in the context of a global -environment Δ and a variable environment Γ, and validation -produces a load type as well as a set of legal store -types as a result. These types are determined by -the heap view types corresponding to -each ArrayBufferView -type. - -

Validating a MemberExpression node - -

-x:Identifier[n:-?NumericLiteral] -
- -

succeeds with load type σ and store types { τ, … } if: - -

    -
  • Lookup(Δ, Γ, x) = view -where view is -an ArrayBufferView -type; -
  • the load type of view is σ; -
  • the store types of view are { τ, … }; -
  • the source of n does not contain a . character; -
  • 0 ≤ n < 232. -
- -

Validating a MemberExpression node - -

-x:Identifier[expr:Expression >> n:-?NumericLiteral] -
- -

succeeds with load type σ and store types { τ, … } -if: - -

    -
  • Lookup(Δ, Γ, x) = view where view is -an ArrayBufferView -type; -
  • the element size of view is bytes; -
  • the load type of view is σ; -
  • the store types of view are { τ, … }; -
  • ValidateExpression succeeds for expr with type intish; -
  • the source of n does not contain a . character; -
  • n = log2(bytes). -
- - - -

6.11 ValidateFloatCoercion(Δ, Γ, e)

- -

A call to the fround coercion is validated in the -context of a global environment Δ and a variable environment -Γ and validates as the type float. - -

Validating a CallExpression node - -

-f:Identifier(cexpr:CallExpression) -
- -

succeeds with type float if Lookup(Δ, -Γ, f) = fround and ValidateCall succeeds for -cexpr with actual return type float. - -

Alternatively, validating a CallExpression node - -

-f:Identifier(arg:Expression) -
- -

succeeds with type float if Lookup(Δ, -Γ, f) = fround -and ValidateExpression -succeeds for arg with type τ, where τ is a subtype -of floatish, double?, signed, -or unsigned. - - -

7 Linking

- -

An AOT implementation of asm.js must perform some internal dynamic -checks at link time to be able to safely generate AOT-compiled -exports. If any of the dynamic checks fails, the result of linking -cannot be an AOT-compiled module. The dynamically checked invariants -are: - -

    -
  • control must reach the module's return statement without throwing; -
  • all property access must resolve to data properties; -
  • the heap object (if provided) must be an instance of ArrayBuffer; -
  • the heap object's byteLength must be either 2n for n in [12, 24) or 224 · n for n ≥ 1; - -
  • all globals taken from the stdlib object must be -the SameValue -as the -corresponding standard -library of the same name. -
- -

If any of these conditions is not met, AOT compilation may produce -invalid results so the engine should fall back to an interpreted or -JIT-compiled implementation. - -

8 Operators

- -

8.1 Unary Operators

- - - - - - - - - - - - - - - - - - - - - - - - -
Unary OperatorType
+ - (signed) → double
- (unsigned) → double
- (double?) → double
- (float?) → double -
- - (int) → intish
- (double?) → double
- (float?) → floatish -
~(intish) → signed
!(int) → int
- -

Note that the special combined operator ~~ may be used -as a coercion from double or float? -to signed; see Unary -Expressions. - -

8.2 Binary Operators

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Binary OperatorType
+ - (double, double) → double
- (float?, float?) → floatish -
- - (double?, double?) → double
- (float?, float?) → floatish -
* - (double?, double?) → double
- (float?, float?) → floatish -
/ - (signed, signed) → intish
- (unsigned, unsigned) → intish
- (double?, double?) → double
- (float?, float?) → floatish -
% - (signed, signed) → intish
- (unsigned, unsigned) → intish
- (double?, double?) → double -
|, &, ^, <<, >>(intish, intish) → signed
>>>(intish, intish) → unsigned
<, <=, >, >=, ==, != - (signed, signed) → int
- (unsigned, unsigned) → int
- (double, double) → int
- (float, float) → int -
- -

9 Standard Library

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Standard LibraryType
- Infinity
- NaN -
double
- Math.acos
- Math.asin
- Math.atan
- Math.cos
- Math.sin
- Math.tan
- Math.exp
- Math.log -
(double?) → double
- Math.ceil
- Math.floor
- Math.sqrt -
- (double?) → double
- (float?) → float -
Math.abs - (signed) → signed
- (double?) → double
- (float?) → float -
- Math.min
- Math.max -
- (int, int) → signed
- (double, double) → double -
- Math.atan2
- Math.pow -
(double?, double?) → double
Math.imul(int, int) → signed
Math.froundfround
- Math.E
- Math.LN10
- Math.LN2
- Math.LOG2E
- Math.LOG10E
- Math.PI
- Math.SQRT1_2
- Math.SQRT2
-
double
- -

10 Heap View Types

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
View TypeElement Size (Bytes)Load TypeStore Types
Uint8Array1intishintish
Int8Array1intishintish
Uint16Array2intishintish
Int16Array2intishintish
Uint32Array4intishintish
Int32Array4intishintish
Float32Array4float?floatish, double?
Float64Array8double?float?, double?
- -

Acknowledgements

- -

Thanks to Martin Best, Brendan Eich, Andrew McCreight, and Vlad -Vukićević for feedback and encouragement.

- -

Thanks to Benjamin Bouvier, Douglas Crosher, and Dan Gohman for -contributions to the design and implementation, particularly for -float.

- -

Thanks to Jesse Ruderman and C. Scott Ananian for bug reports.

- -

Thanks to Michael Bebenita for diagrams.

- - - - \ No newline at end of file diff --git a/html/index.src.html b/html/index.src.html deleted file mode 100644 index 62772b9..0000000 --- a/html/index.src.html +++ /dev/null @@ -1,2228 +0,0 @@ - - - - - -asm.js - - - - - - - - - -
-

[TITLE]

- -

Working Draft — [DATE]

- -
-
Latest version: -
http://asmjs.org/spec/latest/ - -
Editors: -
- David Herman, - Mozilla, - -
- Luke Wagner, - Mozilla, - -
- Alon Zakai, - Mozilla, - -
-
- -

Abstract

- -

This specification defines asm.js, a strict subset -of JavaScript that can be used as a low-level, efficient target -language for compilers. This sublanguage effectively describes a sandboxed -virtual machine for memory-unsafe languages like C or C++. A -combination of static and dynamic validation allows JavaScript engines -to employ an ahead-of-time (AOT) optimizing compilation strategy for -valid asm.js code. - -

Status

- -

This specification is working towards a candidate draft for asm.js -version 1. Mozilla's SpiderMonkey JavaScript engine provides an -optimizing implementation of this draft. - -

Changelog

- -
    -
  • 18 August 2014 -
      -
    • better "putting it all together" example -
    -
  • 23 July 2014 -
      -
    • formatting cleanups -
    • added variadic function types to the Global Types section -
    -
  • 22 July 2014 -
      -
    • clarified formal structure with explicit validation rule names -
    • moved function table validation from annotations section to validation section -
    • separated case and default validation rules -
    • eliminated unused expected case type parameter -
    • corrected type checks to subtype checks in AdditiveExpression, BitwiseXORExpression, BitwiseANDExpression, BitwiseORExpression, and ConditionalExpression -
    -
  • 8 July 2014 -
      -
    • minor editorial bugfixes -
    • non-function foreign imports are mut -
    • tightened the language on linking restrictions -
    -
  • 7 July 2014 -
      -
    • added 32-bit floating point types -
    • renamed doublish to double? for symmetry with float? -
    • separated heap access checking into a separate validation section -
    • separated load and store types for heap views -
    • added Math.fround and singleton fround type -
    • added a Float Coercions section -
    • added uncoerced CallExpression nodes to Expression for float coercions -
    • added float coercions to initializers, return type annotations, and legal function calls -
    • added restriction preventing float coercions of FFI calls -
    • added float support for operators and Math functions -
    • added float to legal result types for ConditionalExpression -
    • added variadic Math.min and Math.max -
    • eliminated the allowance for 1-byte views to elide their index shift (to future-proof for large heaps) -
    • simplified and generalized link-time restrictions on heap size -
    -
  • 12 December 2013 -
      -
    • return type of Math.abs is signed -
    -
  • 11 October 2013 -
      -
    • unsigned is not an extern type -
    • added missing ! operator to UnaryExpression operators -
    • added note about ~~ to Unary Operators section -
    • added note about parenthesis agnosticism to Syntax section -
    • added note about ASI to Syntax section -
    • added -NumericLiteral cases everywhere -
    • function calls require explicit coercions -
    • eliminated type unknown, which is no longer needed -
    • return type of integer % is intish -
    -
- -

Table of Contents

- - - -

Introduction

- -

This specification defines asm.js, a strict subset of -JavaScript that can be used as a low-level, efficient target language -for compilers. The asm.js language provides an abstraction similar to -the C/C++ virtual machine: a large binary heap with efficient loads -and stores, integer and floating-point arithmetic, first-order -function definitions, and function pointers. - -

Programming Model

- -

The asm.js programming model is built around integer and -floating-point arithmetic and a virtual heap represented as -a typed -array. While JavaScript does not directly provide constructs for -dealing with integers, they can be emulated using two tricks: - -

    -
  • integer loads and stores can be performed using the typed arrays -API; and -
  • integer arithmetic is equivalent to the composition of -JavaScript's floating-point arithmetic operators with the integer -coercions performed by the bitwise operators. -
- -

As an example of the former, if we have -an Int32Array -view of the heap called HEAP32, then we can load the -32-bit integer at byte offset p: - - - -

-
HEAP32[p >> 2]|0
-
- -

The shift converts the byte offset to a 32-bit element offset, and -the bitwise coercion ensures that an out-of-bounds access is coerced -from undefined back to an integer. - - - -

As an example of integer arithmetic, addition can be performed by -taking two integer values, adding them with the built-in addition -operator, and coercing the result back to an integer via the bitwise -or operator: - -

-
(x+y)|0
-
- -

This programming model is directly inspired by the techniques -pioneered by the Emscripten -and Mandreel compilers. - -

Validation

- -

The asm.js sub-language is defined by a -static type system that can be checked -at JavaScript parse time. Validation of asm.js code is designed to be -"pay-as-you-go" in that it is never performed on code that does not -request it. An asm.js module requests validation by means -of a -special prologue -directive, similar to that of ECMAScript Edition -5's strict -mode: - -

-
function MyAsmModule() {
-    "use asm";
-    // module body
-}
-
- -

This explicit directive allows JavaScript engines to avoid -performing pointless and potentially costly validation on other -JavaScript code, and to report validation errors in developer consoles -only where relevant. - -

Ahead-Of-Time Compilation

- -

Because asm.js is a strict subset of JavaScript, this specification -only defines the validation logic—the execution semantics is -simply that of JavaScript. However, validated asm.js is amenable to -ahead-of-time (AOT) compilation. Moreover, the code generated by an -AOT compiler can be quite efficient, featuring: - -

    -
  • unboxed representations of integers and floating-point numbers; -
  • absence of runtime type checks; -
  • absence of garbage collection; and -
  • efficient heap loads and stores (with implementation strategies varying by platform). -
- -

Code that fails to validate must fall back to execution by -traditional means, e.g., interpretation and/or just-in-time (JIT) -compilation. - - - -

Linking

- -

Using an asm.js module requires calling its function to obtain an -object containing the module's exports; this is known -as linking. An asm.js module can also be given access to -standard libraries and custom JavaScript functions through linking. An -AOT implementation must perform certain dynamic -checks to check compile-time assumptions about the linked -libraries in order to make use of the compiled code. - -

This figure depicts a simple architecture of an AOT implementation -that otherwise employs a simple interpreter. If either dynamic or -static validation fails, the implementation must fall back to the -interpreter. But if both validations succeed, calling the module -exports executes the binary executable code generated by AOT -compilation. - -

- -
- -

External Code and Data

- -

Within an asm.js module, all code is fully statically typed and -limited to the very restrictive asm.js dialect. However, it is -possible to interact with recognized standard JavaScript libraries and -even custom dynamic JavaScript functions. - -

An asm.js module can take up to three optional parameters, -providing access to external JavaScript code and data: - -

    -
  • a standard library object, providing access to a -limited subset of the JavaScript standard -libraries; -
  • a foreign function interface (FFI), providing access to -custom external JavaScript functions; and -
  • a heap buffer, providing a -single ArrayBuffer -to act as the asm.js heap. -
- -

These objects allow asm.js to call into external JavaScript (and to -share its heap buffer with external JavaScript). Conversely, the -exports object returned from the module allows external JavaScript to -call into asm.js. - -

So in the general case, an asm.js module declaration looks like: - -

-
function MyAsmModule(stdlib, foreign, heap) {
-    "use asm";
-
-    // module body...
-
-    return {
-        export1: f1,
-        export2: f2,
-        // ...
-    };
-}
-
- -

Function parameters in asm.js are provided a type annotation by -means of an explicit coercion on function entry: - -

-
function geometricMean(start, end) {
-  start = start|0; // start has type int
-  end = end|0;     // end has type int
-  return +exp(+logSum(start, end) / +((end - start)|0));
-}
- -
- -

These annotations serve two purposes: first, to provide the -function's type signature so that the validator can enforce that all -calls to the function are well-typed; second, to ensure that even if -the function is exported and called by external JavaScript, its -arguments are dynamically coerced to the expected type. This ensures -that an AOT implementation can use unboxed value representations, -knowing that once the dynamic coercions have completed, the function -body never needs any runtime type checks. - -

Putting It All Together

- -

The following is a small but complete example of an asm.js module. - -

-
function GeometricMean(stdlib, foreign, buffer) {
-  "use asm";
-
-  var exp = stdlib.Math.exp;
-  var log = stdlib.Math.log;
-  var values = new stdlib.Float64Array(buffer);
-
-  function logSum(start, end) {
-    start = start|0;
-    end = end|0;
-
-    var sum = 0.0, p = 0, q = 0;
-
-    // asm.js forces byte addressing of the heap by requiring shifting by 3
-    for (p = start << 3, q = end << 3; (p|0) < (q|0); p = (p + 8)|0) {
-      sum = sum + +log(values[p>>3]);
-    }
-
-    return +sum;
-  }
-
-  function geometricMean(start, end) {
-    start = start|0;
-    end = end|0;
-
-    return +exp(+logSum(start, end) / +((end - start)|0));
-  }
-
-  return { geometricMean: geometricMean };
-}
-
- -

In a JavaScript engine that supports AOT compilation of asm.js, -calling the module on a proper global object and heap buffer would -link the exports object to use the statically compiled functions. - -

-
var heap = new ArrayBuffer(0x10000);          // 64k heap
-init(heap, START, END);                       // fill a region with input values
-var fast = GeometricMean(window, null, heap); // produce exports object linked to AOT-compiled code
-fast.geometricMean(START, END);               // computes geometric mean of input values
-
- -

By contrast, calling the module on a standard library object -containing something other than the true Math.exp or -Math.log would fail to produce AOT-compiled code: - -

-
var bogusGlobal = {
-  Math: {
-    exp: function(x) { return x; },
-    log: function(x) { return x; }
-  },
-  Float64Array: Float64Array
-};
-
-var slow = GeometricMean(bogusGlobal, null, heap); // produces purely-interpreted/JITted version
-console.log(slow.geometricMean(START, END));       // computes bizarro-geometric mean thanks to bogusGlobal
-
- - - -

Types

- -

Validation of an asm.js module relies on a static type system that -classifies and constrains the syntax. This section defines the types -used by the validation logic. - -

Value Types

- -

Validation in asm.js limits JavaScript programs to only use operations -that can be mapped closely to efficient data representations and -machine operations of modern architectures, such as 32-bit integers -and integer arithmetic. - -

The types of asm.js values are inter-related by a subtyping -relation, which can be represented pictorially: - -

- -
- -

The light boxes represent arbitrary JavaScript values that may flow -freely between asm.js code and external JavaScript code. - -

The dark boxes represent types that are disallowed from escaping -into external (i.e., non-asm.js) JavaScript code. (These values can be -given efficient, unboxed representations in optimized asm.js -implementations that would be unsound if they were allowed to escape.) - -

The meta-variables σ and τ are used to stand for value -types. - -

void

- -

The void type is the type of functions that -are not supposed to return any useful value. As JavaScript functions, -they produce the undefined value, but asm.js code is not -allowed to make use of this value; functions with return -type void can only be called for effect. - -

double

- -

The double type is the type of ordinary -JavaScript double-precision floating-point numbers. - -

signed

- -

The signed type is the type of signed -32-bit integers. While there is no direct concept of integers in -JavaScript, 32-bit integers can be represented as doubles, and integer -operations can be performed with JavaScript arithmetic, relational, -and bitwise operators. - -

unsigned

- -

The unsigned type is the type of unsigned -32-bit integers. Again, these are not a first-class concept in -JavaScript, but can be represented as floating-point numbers. - -

int

- -

The int type is the type of 32-bit integers -where the signedness is not known. In asm.js, the type of a variable -never has a known signedness. This allows them to be compiled as -32-bit integer registers and memory words. However, this -representation creates an overlap between signed and unsigned numbers -that causes an ambiguity in determining which JavaScript number they -represent. For example, the bit pattern 0xffffffff could -represent 4294967295 or -1, depending on the signedness. For this -reason, values of the int type are disallowed from -escaping into external (non-asm.js) JavaScript code. - -

fixnum

- -

The fixnum type is the type of integers in the -range [0, 231)—that is, the range of integers such -that an unboxed 32-bit representation has the same value whether it is -interpreted as signed or unsigned. - - -

intish

- -

Even though JavaScript only supports floating-point arithmetic, -most operations can simulate integer arithmetic by coercing their -result to an integer. For example, adding two integers may overflow -beyond the 32-bit range, but coercing the result back to an integer -produces the same 32-bit integer as integer addition in, say, C. - -

The intish type represents the result of a -JavaScript integer operation that must be coerced back to an integer -with an explicit coercion -(ToInt32 -for signed integers -and ToUint32 -for unsigned integers). Validation requires all intish -values to be immediately passed to an operator or standard library -that performs the appropriate coercion or else dropped via an -expression statement. This way, each integer operation can be -compiled directly to machine operations. - -

The one operator that does not support this approach is -multiplication. (Multiplying two large integers can result in a large -enough double that some lower bits of precision are lost.) So asm.js -does not support applying the multiplication operator to integer -operands. Instead, the -proposed Math.imul -function is recommended as the proper means of implementing integer -multiplication. - - -

double?

- -

The double? type represents operations that -are expected to produce a double but may also produce -undefined, and so must be coerced back to a number -via ToNumber. -Specifically, reading out of bounds from a typed array -produces undefined. - -

float

- -

The float type is the type of 32-bit -floating-point numbers. - -

float?

- -

The float? type represents operations that -are expected to produce a float but, similar -to double?, may also produce undefined and -so must be coerced back to a 32-bit floating point number -via fround. -Specifically, reading out of bounds from a typed array -produces undefined. - -

floatish

- -

Similar to integers, JavaScript can almost support 32-bit -floating-point arithmetic, but requires extra coercions to properly -emulate the 32-bit semantics. As proved in -When is double -rounding innocuous? (Figueroa 1995), both the 32- and 64-bit -versions of standard arithmetic operations produce equivalent results -when given 32-bit inputs and coerced to 32-bit outputs. - -

The floatish type, -like intish, represents the result of a JavaScript 32-bit -floating-point operations that must be coerced back to a 32-bit -floating-point value with an -explicit fround -coercion. Validation requires all floatish values to be -immediately passed to an operator or standard library that performs -the appropriate coercion or else dropped via an expression -statement. This way, each 32-bit floating-point operation can be -compiled -directly to machine operations. - -

extern

- -The abstract extern type represents the root -of all types that can escape back into external JavaScript—in -other words, the light boxes in the above diagram. - -

Global Types

- -

Variables and functions defined at the top-level scope of an asm.js -module can have additional types beyond -the value types. These include: - -

    -
  • value types τ; -
  • ArrayBufferView types IntnArray, UintnArray, and FloatnArray; -
  • function types ((σ, …) → τ) ∧ … ∧ ((σ′, …) → τ′); -
  • variadic function types ((σ, σ) → τ) ∧ … ∧ ((σ′, σ′) → τ′); -
  • function table types ((σ, …) → τ)[n]; -
  • the special type fround of Math.fround; and -
  • the FFI function type Function. -
- -

The "∧" notation for function types serves to represent -overloaded functions and operators. For example, -the Math.abs function is -overloaded to accept either integers or floating-point numbers, and -returns a different type in each case. Similarly, many of -the operators have overloaded types. - -

The meta-variable γ is used to stand for global types. - -

Environments

- -

Validating an asm.js module depends on tracking contextual -information about the set of definitions and variables in scope. This -section defines the environments used by the validation -logic. - -

Global Environment

- -

An asm.js module is validated in the context of a global -environment. The global environment maps each global variable to -its type as well as indicating whether the variable is mutable: - -

{ x : (mut|imm) γ, … }
- -

The meta-variable Δ is used to stand for a global environment. - -

Variable Environment

- -

In addition to the global environment, each function -body in an asm.js module is validated in the context of -a variable environment. The variable environment maps each -function parameter and local variable to its value type: - -

{ x : τ, … } - -

The meta-variable Γ is used to stand for a variable environment. - -

Environment Lookup

- -

Looking up a variable's type - -

-Lookup(Δ, Γ, x) -
- -

is defined by: - -

    -
  • τ if x : τ occurs in Γ; -
  • γ if x does not occur in Γ and x -: mut γ or x : imm γ -occurs in Δ -
- -

If x does not occur in either environment then -the Lookup function has no result. - -

Syntax

- -

Validation of an asm.js module is specified by reference to -the ECMAScript -grammar, but conceptually operates at the level of abstract -syntax. In particular, an asm.js validator must obey the following -rules: - -

    -
  • Empty statements (;) are always ignored, whether in -the top level of a module or inside an asm.js function body. -
  • No variables bound anywhere in an asm.js module (whether in the -module function parameter list, global variable declarations, asm.js -function names, asm.js function parameters, or local variable -declarations) may have the name eval -or arguments. -
  • Where it would otherwise parse equivalently in JavaScript, -parentheses are meaningless. Even where the specification matches on -specific productions of Expression such as literals, the -source may contain extra meaningless parentheses without affecting -validation. -
  • Automatic semicolon insertion is respected. An asm.js source file -may omit semicolons wherever JavaScript allows them to be omitted. -
- -

These rules are otherwise left implicit in the rest of the -specification. - -

Annotations

- -

All variables in asm.js are explicitly annotated with type -information so that their type can be statically enforced by -validation. - -

Parameter Type Annotations

- -

Every parameter in an asm.js function is provided with an explicit -type annotation in the form of a coercion. This coercion serves two -purposes: the first is to make the parameter type statically apparent -for validation; the second is to ensure that if the function is -exported, the arguments dynamically provided by external JavaScript -callers are coerced to the expected type. For example, a bitwise OR -coercion annotates a parameter as having type int: - -

-
function add1(x) {
-    x = x|0; // x : int
-    return (x+1)|0;
-}
-
- -

In an AOT implementation, the body of the function can be -implemented fully optimized, and the function can be given two entry -points: an internal entry point for asm.js callers, which are -statically known to provide the proper type, and an external dynamic -entry point for JavaScript callers, which must perform the full -coercions (which might involve arbitrary JavaScript computation, e.g., -via implicit calls to valueOf). - -

There are three recognized parameter type annotations: - -

-x:Identifier = x:Identifier|0;
-x:Identifier = +x:Identifier;
-x:Identifier = f:Identifier(x:Identifier); -
- -

The first form annotates a parameter as type int, the -second as type double, and the third as -type float. In the latter case, -Lookup(Δ, Γ, f) must -be fround. - -

Return Type Annotations

- -

An asm.js function's formal return type is determined by -the last statement in the function body, which for -non-void functions is required to be -a ReturnStatement. This distinguished return statement may -take one of five forms: - -

-return +e:Expression;
-return e:Expression|0;
-return n:-?NumericLiteral;
-return f:Identifier(arg:Expression);
-return; -
- -

The first form has return type double. The second has -type signed. The third has return -type double if n is composed of a floating-point -literal, i.e., a numeric literal with the character . in -its source; alternatively, if n is composed of an integer -literal and has its value in the range [-231, -231), the return statement has return -type signed. The fourth form has return -type float, and the fifth has return -type void. - -

If the last statement in the function body is not -a ReturnStatement, or if the function body has no non-empty -statements (other than the initial declarations and -coercions—see Function -Declarations), the function's return type is void. - -

Function Type Annotations

- -

The type of a function declaration - -

-function f:Identifier(x:Identifier) {
-    (x:Identifier = AssignmentExpression;)
-    (var (y:Identifier = (-?NumericLiteral | Identifier(-?NumericLiteral))),)
-    body:Statement
-} -
- -

is (σ,…) → τ where σ,… are the -types of the parameters, as provided by -the parameter type -annotations, and τ is the formal return type, as provided by -the return type annotation. The -variable f is stored in -the global environment with -type imm (σ,…) → τ. - -

Variable Type Annotations

- -

The types of variable declarations are determined by their -initializer, which may take one of two forms: - -

-n:-?NumericLiteral
-f:Identifier(n:-?NumericLiteral) - -
- -

In the first case, the variable type is double -if n's source contains the character .; -otherwise n may be an integer literal in the range -[-231, 232), in which case the variable type -is int. - -

In the second case, the variable type -is float. Lookup(Δ, Γ, f) -must be fround and n must be a floating-point -literal with the character . in its source. - - - -

Global Variable Type Annotations

- -

A global variable declaration is a VariableStatement node -in one of several allowed forms. Validating global variable -annotations takes a Δ as input and produces as output a new -Δ′ by adding the variable binding to Δ. - -

A global program variable is initialized to a literal: - -

-var x:Identifier = n:-?NumericLiteral;
-var x:Identifier = f:Identifier(n:-?NumericLiteral); -
- -

The global variable x is stored in -the global environment with -type mut τ, where τ is determined in the same way -as local variable type -annotations. - -

A standard library import is of one of the following two forms: - -

-var x:Identifier = stdlib:Identifier.y:Identifier;
-var x:Identifier = stdlib:Identifier.Math.y:Identifier; -
- -

The variable stdlib must match the first parameter of -the module declaration. The global -variable x is stored in -the global environment with -type imm γ, where γ is the type of -library y or Math.y as specified by -the standard library types. - -

A foreign import is of one of the following three forms: - -

-var x:Identifier = foreign:Identifier.y:Identifier;
-var x:Identifier = foreign:Identifier.y:Identifier|0;
-var x:Identifier = +foreign:Identifier.y:Identifier; -
- -

The variable foreign must match the second parameter of -the module declaration. The global -variable x is stored in -the global environment with -type imm Function for the first form, mut -int for the second, and mut double for the third. - -

A global heap view is of the following form: - -

-var x:Identifier = new stdlib:Identifier.view:Identifier(heap:Identifier); -
- -

The variable stdlib must match the first parameter of -the module declaration and the -variable heap must match the third. The -identifier view must be one of the -standard ArrayBufferView -type names. The global variable x is stored in -the global environment with -type imm -view. - -

Function Table Types

- -

A function table is a VariableStatement of the form: - -

-var x:Identifier = [f0:Identifier, f:Identifier,]; -
- -

The function table x is stored in -the global environment with -type imm ((σ,…) → τ)[n] -where (σ,…) → τ is the type of f in the -global environment and n is the length of the array literal. - - - -

Validation Rules

- -

To ensure that a JavaScript function is a proper asm.js module, it -must first be statically validated. This section specifies the -validation rules. The rules operate on JavaScript abstract syntax, -i.e., the output of a JavaScript parser. The non-terminals refer to -parse nodes defined by productions in -the ECMAScript -grammar, but note that the asm.js validator only accepts a subset -of legal JavaScript programs. - -

The result of a validation operation is either -a success, indicating that a parse node is statically valid -asm.js, or a failure, indicating that the parse node is -statically invalid asm.js. - -

ValidateModule(f)

- -

The ValidateModule rule validates an asm.js module, which -is either a FunctionDeclaration -or FunctionExpression node. - -

Validating a module of the form - -

-function f:Identifieropt((stdlib:Identifier(, foreign:Identifier(, heap:Identifier)opt)opt)opt) {
-    "use asm";

-    var:VariableStatement
-    fun:FunctionDeclaration
- -    table:VariableStatement
-    exports:ReturnStatement
-} -
- -

succeeds if: - -

    -
  • f, stdlib, foreign, heap, and -the var, fun, and table variables are all -mutually distinct; -
  • the global environment Δ is constructed in three stages: -
      -
    1. the global declarations are - validated in an empty initial environment Δ0, - producing a new global environment Δ1; -
    2. the types from the function - type annotations in the fun declarations are extracted - using Δ1, and then added to Δ1 to - produce Δ2; - -
    3. the types of the function - tables in the table declarations are extracted - using Δ2, and their types are added to - Δ2 to produce the completed global type environment - Δ. -
    -
  • for each fun declaration, ValidateFunction succeeds with environment Δ; -
  • for each table declaration, ValidateFunctionTable succeeds with environment Δ; and -
  • ValidateExport succeeds for exports with environment Δ. -
- - -

ValidateExport(Δ, s)

- -

The ValidateExport rule validates an asm.js module's -export declaration. An export declaration is -a ReturnStatement returning either a single asm.js function -or an object literal exporting multiple asm.js functions. - -

Validating an export declaration node - -

-return { (x:Identifier : f:Identifier), }; -
- -

succeeds if for each f, Δ(f) = imm -γ where γ is a function type (σ,…) → -τ. - -

Validating an export declaration node - -

-return f:Identifier; -
- -

succeeds if Δ(f) = imm γ where -γ is a function type (σ,…) → τ. - -

ValidateFunctionTable(Δ, s)

- -

The ValidateFunctionTable rule validates an asm.js -module's function table declaration. A function table declaration is -a VariableStatement binding an identifier to an array -literal. - -

Validating a function table of the form - -

-var x:Identifier = [f:Identifier,]; -
- -

succeeds if: - -

    -
  • the length n of the array literal is 2m for some m ≥ 0; -
  • Δ(x) = imm ((σ,…) → τ)[n]; and -
  • for each f, Δ(f) = (σ,…) → τ. -
- - -

ValidateFunction(Δ, f)

- -

The ValidateFunction rule validates an asm.js function -declaration, which is a FunctionDeclaration node. - -

Validating a function declaration of the form - -

-function f:Identifier(x:Identifier,) {
-    (x:Identifier = AssignmentExpression;)
-    (var (y:Identifier = (-?NumericLiteral | Identifier(-?NumericLiteral))),)
-    body:Statement
-} -
- -

succeeds if: - -

    -
  • Δ(f) = imm (σ,…) → τ; -
  • the x and y variables are all mutually distinct; -
  • the variable environment Γ is constructed by mapping each -parameter x to its -corresponding parameter type -annotation (annotations must appear in the same order as the -parameters) and each local variable y to -its variable type annotation; -
  • for each body -statement, ValidateStatement -succeeds with environments Δ and Γ and expected return -type τ. -
- -

ValidateStatement(Δ, Γ, τ, s)

- -

The ValidateStatement rule validates an asm.js statement. -Each statement is validated in the context of a global -environment Δ, a variable environment -Γ, and an expected return type τ. Unless otherwise -explicitly stated, a recursive validation of a subterm uses the same -context as its containing term. - -

Block

- -

Validating a Block statement node - -

-{ stmt:Statement} -
- -

succeeds -if ValidateStatement -succeeds for each stmt. - -

ExpressionStatement

- -

Validating an ExpressionStatement node - -

-cexpr:CallExpression ; -
- -

succeeds if ValidateCall -succeeds for cexpr with actual return type void. - -

Validating an ExpressionStatement node - -

-expr:Expression ; -
- -

succeeds -if ValidateExpression -succeeds for expr with some type σ. - -

EmptyStatement

- -

Validating an EmptyStatement node always succeeds. - -

IfStatement

- -

Validating an IfStatement node - -

-if ( expr:Expression ) stmt1:Statement else stmt2:Statement -
- -

succeeds -if ValidateExpression -succeeds for expr with a subtype of int -and ValidateStatement -succeeds for stmt1 and stmt2. - -

Validating an IfStatement node - -

-if ( expr:Expression ) stmt:Statement -
- -

succeeds -if ValidateExpression -succeeds for expr with a subtype of int -and ValidateStatement -succeeds for stmt. - -

ReturnStatement

- -

Validating a ReturnStatement node - -

-return expr:Expression ; -
- -

succeeds -if ValidateExpression -succeeds for expr with a subtype of the expected return type -τ. - -

Validating a ReturnStatement node - -

-return ; -
- -

succeeds if the expected return type τ is void. - - -

IterationStatement

- -

Validating an IterationStatement node - -

-while ( expr:Expression ) stmt:Statement -
- -

succeeds -if ValidateExpression -succeeds for expr with a subtype of int -and ValidateStatement -succeeds for stmt. - -

Validating an IterationStatement node - -

-do stmt:Statement while ( expr:Expression ) ; -
- -

succeeds -if ValidateStatement -succeeds for stmt -and ValidateExpression -succeeds for expr with a subtype of int. - -

Validate an IterationStatement node - -

-for ( init:ExpressionNoInopt ; test:Expressionopt ; update:Expressionopt ) body:Statement -
- -

succeeds if: - -

- -

BreakStatement

- -

Validating a BreakStatement node - -

-break Identifieropt ; -
- -

always succeeds. - -

ContinueStatement

- -

Validating a ContinueStatement node - -

-continue Identifieropt ; -
- -

always succeeds. - -

LabelledStatement

- -

Validating a LabelledStatement node - -

-Identifier : body:Statement -
- -

succeeds -if ValidateStatement -succeeds for body. - -

SwitchStatement

- -

Validating a SwitchStatement node - -

-switch ( test:Expression ) { case:CaseClausedefault:DefaultClauseopt } -
- -

succeeds if - -

    -
  • ValidateExpression succeeds for test with a subtype of signed; -
  • ValidateCase succeeds for each case; -
  • each case value is distinct; -
  • the difference between the maximum and minimum case values is less than 231; and -
  • ValidateDefault succeeds for default. -
- - - - - - -

ValidateCase(Δ, Γ, τ, c)

- -

Cases in a switch block are validated in the context -of a global environment Δ, a variable -environment Γ, and an expected return type τ. Unless -otherwise explicitly stated, a recursive validation of a subterm uses -the same context as its containing term. - - - - - - - -

Validating a CaseClause node - -

-case n:-?NumericLiteral : stmt:Statement… -
- -

succeeds if - -

    -
  • the source of n does not contain a . character; -
  • n is in the range [-231, 231); and -
  • ValidateStatement succeeds for each stmt. -
- -

ValidateDefault(Δ, Γ, τ, d)

- -

The default case in a switch block is validated in the -context of a global environment Δ, a variable -environment Γ, and an expected return type τ. Unless -otherwise explicitly stated, a recursive validation of a subterm uses -the same context as its containing term. - - - -

Validating a DefaultClause node - -

-default : stmt:Statement… -
- -

succeeds -if ValidateStatement -succeeds for each stmt. - - -

ValidateExpression(Δ, Γ, e)

- -

Each expression is validated in the context of a global -environment Δ and a variable environment -Γ, and validation produces the type of the expression as a -result. Unless otherwise explicitly stated, a recursive validation of -a subterm uses the same context as its containing term. - -

Expression

- -

Validating an Expression node - -

-expr1:AssignmentExpression ,, exprn:AssignmentExpression -
- -

succeeds with type τ if for every i -< n, one of the following conditions holds: - -

- -

and ValidateExpression -succeeds for exprn with type τ. - -

NumericLiteral

- -

Validating a NumericLiteral node - -

    -
  • succeeds with type double if the source contains a . character; or -validates as type double; -
  • succeeds with type fixnum if the source does not contain a . character and its numeric value is in the range [0, 231); or -
  • succeeds with type unsigned if the source does not contain a . character and its numeric value is in the range [231, 232). -
- -

Note that the case of negative integer constants is handled -under UnaryExpression. - -

Note that integer literals outside the range [0, 232) -are invalid, i.e., fail to validate. - -

Identifier

- -

Validating an Identifier node - -

-x:Identifier -
- -

succeeds with type τ if Lookup(Δ, Γ, x) = τ. - -

CallExpression

- -

Validating a CallExpression node succeeds with -type float -if ValidateFloatCoercion -succeeds. - -

MemberExpression

- -

Validating a MemberExpression node succeeds with type -τ -if ValidateHeapAccess -succeeds with load type τ. - -

AssignmentExpression

- -

Validating an AssignmentExpression node - -

-x:Identifier = expr:AssignmentExpression -
- -

succeeds with type τ -if ValidateExpression -succeeds for the nested AssignmentExpression with type τ -and one of the following two conditions holds: - -

    -
  • x is bound in Γ as a supertype of τ; or -
  • x is not bound in Γ and is bound to a mutable supertype of τ in Δ. -
- -

Validating an AssignmentExpression node - -

-lhs:MemberExpression = rhs:AssignmentExpression -
- -

succeeds with type τ -if ValidateExpression -succeeds for rhs with type τ -and ValidateHeapAccess -succeeds for lhs with τ as one of its legal store types. - - - -

UnaryExpression

- -

Validating a UnaryExpression node of the form - -

--NumericLiteral -
- -

succeeds with type signed if -the NumericLiteral source does not contain a . -character and the numeric value of the expression is in the range -[-231, 0). - -

Validating a UnaryExpression node of the form - -

-+cexpr:CallExpression -
- -

succeeds with type double -if ValidateCall succeeds -for cexpr with actual return type double. - -

Validating a UnaryExpression node of the form - -

-op:(+|-|~|!)arg:UnaryExpression -
- -

succeeds with type τ if the type of op is … -∧ (σ) → τ ∧ … -and ValidateExpression -succeeds with a subtype of σ. - -

Validating a UnaryExpression node of the form - -

-~~arg:UnaryExpression -
- -

succeeds with type signed -if ValidateExpression -succeeds for arg with a subtype of either double -or float?. - -

MultiplicativeExpression

- -

Validating a MultiplicativeExpression node - -

-lhs:MultiplicativeExpression op:(*|/|%) rhs:UnaryExpression -
- -

succeeds with type τ if: - -

- -

Validating a MultiplicativeExpression node - -

-expr:MultiplicativeExpression * n:-?NumericLiteral
-n:-?NumericLiteral * expr:UnaryExpression -
- -

succeeds with type intish if the source of n -does not contain a . character and -220 -< n < 220 -and ValidateExpressionexpr with a subtype of int. - -

AdditiveExpression

- -

Validating an AdditiveExpression node - -

-expr1 (+|-)(+|-) exprn -
- -

succeeds with type intish if: - -

- -

Otherwise, validating an AdditiveExpression node - -

-lhs:AdditiveExpression op:(+|-) rhs:MultiplicativeExpression -
- -

succeeds with type double if: - -

- -

ShiftExpression

- -

Validating a ShiftExpression node - -

-lhs:ShiftExpression op:(<<|>>|>>>) rhs:AdditiveExpression - -
- -

succeeds with type τ if - -

- -

RelationalExpression

- -

Validating a RelationalExpression node - -

-lhs:RelationalExpression op:(<|>|<=|>=) rhs:ShiftExpression - -
- -

succeeds with type τ if - -

- -

EqualityExpression

- -

Validating an EqualityExpression node - -

-lhs:EqualityExpression op:(==|!=) rhs:RelationalExpression - -
- -

succeeds with type τ if - -

- -

BitwiseANDExpression

- -

Validating a BitwiseANDExpression node - -

-lhs:BitwiseANDExpression & rhs:EqualityExpression
-
- -

succeeds with type signed -if ValidateExpression -succeeds for lhs and rhs with -a subtype of intish. - -

BitwiseXORExpression

- -

Validating a BitwiseXORExpression node - -

-lhs:BitwiseXORExpression ^ rhs:BitwiseANDExpression
-
- -

succeeds with type signed -if ValidateExpression -succeeds for lhs and rhs with -a subtype of intish. - -

BitwiseORExpression

- -

Validating a BitwiseORExpression node - -

-cexpr:CallExpression |0
-
- -

succeeds with type signed -if ValidateCall succeeds -for cexpr with actual return type signed. - -

Validating a BitwiseORExpression node - -

-lhs:BitwiseORExpression | rhs:BitwiseXORExpression
-
- -

succeeds with type signed -if ValidateExpression -succeeds for lhs and rhs with -a subtype of intish. - -

ConditionalExpression

- -

Validating a ConditionalExpression node - -

-test:BitwiseORExpression ? cons:AssignmentExpression : alt:AssignmentExpression -
- -

succeeds with type τ if: - -

- -

Parenthesized Expression

- -

Validating a parenthesized expression node - -

-( expr:Expression ) -
- -

succeeds with type τ -if ValidateExpression -succeeds for expr with type τ. - - -

ValidateCall(Δ, Γ, τ, e)

- -

Each function call expression is validated in the context of a -global environment Δ and a variable environment Γ, and -validates against an actual return type τ, which was -provided from the context in which the function call appears. A -recursive validation of a subterm uses the same context as its -containing term. - -

Validating a CallExpression node - -

-f:Identifier(arg:Expression,) -
- -

with actual return type τ succeeds if one of the following -conditions holds: - -

    -
  • ValidateFloatCoercion -succeeds for the node; -
  • Lookup(Δ, Γ, f) = … ∧ -(σ,…) → τ ∧ … -and ValidateExpression -succeeds for each arg with a subtype of its corresponding -σ; or -
  • Lookup(Δ, Γ, f) = … ∧ -(σ1,…,σn) -→ τ ∧ … -and ValidateExpression -succeeds for the first n argi expressions -with subtypes of their corresponding σi and -the remaining arg expressions with subtypes of σ. -
- -

Alternatively, validating the CallExpression succeeds with -any actual return type τ other than float -if Lookup(Δ, Γ, f) -= Function -and ValidateExpression -succeeds for each arg with a subtype of extern. - - - -

Validating a CallExpression node - -

-x:Identifier[index:Expression & n:-?NumericLiteral](arg:Expression,) -
- -

succeeds with actual return type τ if: - -

    -
  • the source of n does not contain a . character; -
  • Lookup(Δ, -Γ, x) = ((σ,…) → -τ)[n+1]; -
  • ValidateExpression -succeeds for index with a subtype of intish; and -
  • ValidateExpression -succeeds for each arg with a subtype of its corresponding -σ. -
- - - -

ValidateHeapAccess(Δ, Γ, e)

- -

Each heap access expression is validated in the context of a global -environment Δ and a variable environment Γ, and validation -produces a load type as well as a set of legal store -types as a result. These types are determined by -the heap view types corresponding to -each ArrayBufferView -type. - -

Validating a MemberExpression node - -

-x:Identifier[n:-?NumericLiteral] -
- -

succeeds with load type σ and store types { τ, … } if: - -

    -
  • Lookup(Δ, Γ, x) = view -where view is -an ArrayBufferView -type; -
  • the load type of view is σ; -
  • the store types of view are { τ, … }; -
  • the source of n does not contain a . character; -
  • 0 ≤ n < 232. -
- -

Validating a MemberExpression node - -

-x:Identifier[expr:Expression >> n:-?NumericLiteral] -
- -

succeeds with load type σ and store types { τ, … } -if: - -

    -
  • Lookup(Δ, Γ, x) = view where view is -an ArrayBufferView -type; -
  • the element size of view is bytes; -
  • the load type of view is σ; -
  • the store types of view are { τ, … }; -
  • ValidateExpression succeeds for expr with type intish; -
  • the source of n does not contain a . character; -
  • n = log2(bytes). -
- - - -

ValidateFloatCoercion(Δ, Γ, e)

- -

A call to the fround coercion is validated in the -context of a global environment Δ and a variable environment -Γ and validates as the type float. - -

Validating a CallExpression node - -

-f:Identifier(cexpr:CallExpression) -
- -

succeeds with type float if Lookup(Δ, -Γ, f) = fround and ValidateCall succeeds for -cexpr with actual return type float. - -

Alternatively, validating a CallExpression node - -

-f:Identifier(arg:Expression) -
- -

succeeds with type float if Lookup(Δ, -Γ, f) = fround -and ValidateExpression -succeeds for arg with type τ, where τ is a subtype -of floatish, double?, signed, -or unsigned. - - -

Linking

- -

An AOT implementation of asm.js must perform some internal dynamic -checks at link time to be able to safely generate AOT-compiled -exports. If any of the dynamic checks fails, the result of linking -cannot be an AOT-compiled module. The dynamically checked invariants -are: - -

    -
  • control must reach the module's return statement without throwing; -
  • all property access must resolve to data properties; -
  • the heap object (if provided) must be an instance of ArrayBuffer; -
  • the heap object's byteLength must be either 2n for n in [12, 24) or 224 · n for n ≥ 1; - -
  • all globals taken from the stdlib object must be -the SameValue -as the -corresponding standard -library of the same name. -
- -

If any of these conditions is not met, AOT compilation may produce -invalid results so the engine should fall back to an interpreted or -JIT-compiled implementation. - -

Operators

- -

Unary Operators

- - - - - - - - - - - - - - - - - - - - - - - - -
Unary OperatorType
+ - (signed) → double
- (unsigned) → double
- (double?) → double
- (float?) → double -
- - (int) → intish
- (double?) → double
- (float?) → floatish -
~(intish) → signed
!(int) → int
- -

Note that the special combined operator ~~ may be used -as a coercion from double or float? -to signed; see Unary -Expressions. - -

Binary Operators

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Binary OperatorType
+ - (double, double) → double
- (float?, float?) → floatish -
- - (double?, double?) → double
- (float?, float?) → floatish -
* - (double?, double?) → double
- (float?, float?) → floatish -
/ - (signed, signed) → intish
- (unsigned, unsigned) → intish
- (double?, double?) → double
- (float?, float?) → floatish -
% - (signed, signed) → intish
- (unsigned, unsigned) → intish
- (double?, double?) → double -
|, &, ^, <<, >>(intish, intish) → signed
>>>(intish, intish) → unsigned
<, <=, >, >=, ==, != - (signed, signed) → int
- (unsigned, unsigned) → int
- (double, double) → int
- (float, float) → int -
- -

Standard Library

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Standard LibraryType
- Infinity
- NaN -
double
- Math.acos
- Math.asin
- Math.atan
- Math.cos
- Math.sin
- Math.tan
- Math.exp
- Math.log -
(double?) → double
- Math.ceil
- Math.floor
- Math.sqrt -
- (double?) → double
- (float?) → float -
Math.abs - (signed) → signed
- (double?) → double
- (float?) → float -
- Math.min
- Math.max -
- (int, int) → signed
- (double, double) → double -
- Math.atan2
- Math.pow -
(double?, double?) → double
Math.imul(int, int) → signed
Math.froundfround
- Math.E
- Math.LN10
- Math.LN2
- Math.LOG2E
- Math.LOG10E
- Math.PI
- Math.SQRT1_2
- Math.SQRT2
-
double
- -

Heap View Types

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
View TypeElement Size (Bytes)Load TypeStore Types
Uint8Array1intishintish
Int8Array1intishintish
Uint16Array2intishintish
Int16Array2intishintish
Uint32Array4intishintish
Int32Array4intishintish
Float32Array4float?floatish, double?
Float64Array8double?float?, double?
- -

Acknowledgements

- -

Thanks to Martin Best, Brendan Eich, Andrew McCreight, and Vlad -Vukićević for feedback and encouragement.

- -

Thanks to Benjamin Bouvier, Douglas Crosher, and Dan Gohman for -contributions to the design and implementation, particularly for -float.

- -

Thanks to Jesse Ruderman and C. Scott Ananian for bug reports.

- -

Thanks to Michael Bebenita for diagrams.

- - - diff --git a/html/subtypes.graffle b/html/subtypes.graffle deleted file mode 100644 index e2b452d..0000000 --- a/html/subtypes.graffle +++ /dev/null @@ -1,1505 +0,0 @@ - - - - - ActiveLayerIndex - 0 - ApplicationVersion - - com.omnigroup.OmniGraffle - 139.18.0.187838 - - AutoAdjust - - BackgroundGraphic - - Bounds - {{0, 0}, {1152, 733}} - Class - SolidGraphic - ID - 2 - Style - - shadow - - Draws - NO - - stroke - - Draws - NO - - - - BaseZoom - 0 - CanvasOrigin - {0, 0} - ColumnAlign - 1 - ColumnSpacing - 36 - CreationDate - 2013-06-07 22:05:55 +0000 - Creator - Michael Bebenita - DisplayScale - 1 0/72 in = 1.0000 in - GraphDocumentVersion - 8 - GraphicsList - - - Class - LineGraphic - ID - 32 - Points - - {140.2999963760376, 271.59995756244513} - {140.2999963760376, 223.19999408721924} - - Style - - stroke - - Color - - b - 0.398864 - g - 0.398857 - r - 0.398869 - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - Width - 3 - - - - - Bounds - {{79.199997901916504, 180.00000508721922}, {122.40000000000001, 43.199989000000002}} - Class - ShapedGraphic - ID - 30 - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - FillType - 2 - GradientAngle - 90 - GradientColor - - b - 0.6 - g - 0.6 - r - 0.6 - - - shadow - - Draws - NO - - stroke - - Color - - b - 0.4 - g - 0.4 - r - 0.4 - - CornerRadius - 5 - Width - 2 - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Calibri;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\b\fs28 \cf0 floatish} - - - - Class - LineGraphic - Head - - ID - 27 - - ID - 29 - Points - - {140.21845543143303, 366.19997937971277} - {139.82966014768195, 317.79966534952058} - - Style - - stroke - - Color - - b - 0.398864 - g - 0.398857 - r - 0.398869 - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - Width - 3 - - - Tail - - ID - 28 - - - - Bounds - {{79.19999885559082, 367.19994713897705}, {122.40000000000001, 43.199989000000002}} - Class - ShapedGraphic - FontInfo - - Color - - b - 0.298039 - g - 0.298039 - r - 0.298039 - - - ID - 28 - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - FillType - 2 - GradientAngle - 90 - GradientColor - - b - 0.6 - g - 0.6 - r - 0.6 - - - shadow - - Draws - NO - - stroke - - Color - - b - 0.4 - g - 0.4 - r - 0.4 - - CornerRadius - 5 - Width - 2 - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Calibri;} -{\colortbl;\red255\green255\blue255;\red0\green0\blue0;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\b\fs28 \cf2 float} - - - - Bounds - {{79.19999885559082, 273.59999465942383}, {122.40000000000001, 43.199989000000002}} - Class - ShapedGraphic - ID - 27 - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - FillType - 2 - GradientAngle - 90 - GradientColor - - b - 0.6 - g - 0.6 - r - 0.6 - - - shadow - - Draws - NO - - stroke - - Color - - b - 0.4 - g - 0.4 - r - 0.4 - - CornerRadius - 5 - Width - 2 - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Calibri;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\b\fs28 \cf0 float\cf0 ?} - - - - Class - LineGraphic - Head - - ID - 8 - - ID - 26 - Points - - {578.18522311685604, 273.09125784684301} - {494.61476306844685, 223.70871543111116} - - Style - - stroke - - Color - - b - 0.398864 - g - 0.398857 - r - 0.398869 - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - Width - 3 - - - Tail - - ID - 11 - - - - Class - LineGraphic - Head - - ID - 10 - - ID - 25 - Points - - {517.47714205273303, 460.0366604156489} - {476.12283413256966, 411.16332286230505} - - Style - - stroke - - Color - - b - 0.398864 - g - 0.398857 - r - 0.398869 - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - Width - 3 - - - Tail - - ID - 15 - - - - Class - LineGraphic - Head - - ID - 12 - - ID - 24 - Points - - {555.32281413256976, 460.0366604156489} - {596.67712205273301, 411.16332286230511} - - Style - - stroke - - Color - - b - 0.398864 - g - 0.398857 - r - 0.398869 - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - Width - 3 - - - Tail - - ID - 15 - - - - Class - LineGraphic - Head - - ID - 11 - - ID - 22 - Points - - {615.59997809265133, 366.19994713914173} - {615.59997809265133, 317.79997613881233} - - Style - - stroke - - Color - - b - 0.398864 - g - 0.398857 - r - 0.398869 - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - Width - 3 - - - Tail - - ID - 12 - - - - Class - LineGraphic - Head - - ID - 11 - - ID - 21 - Points - - {494.61477487940653, 366.69121795377214} - {578.18521130589625, 317.30870532418186} - - Style - - stroke - - Color - - b - 0.398864 - g - 0.398857 - r - 0.398869 - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - Width - 3 - - - Tail - - ID - 10 - - - - Class - LineGraphic - Head - - ID - 9 - - ID - 20 - Points - - {457.20000809265139, 366.19994713914173} - {457.20000809265139, 317.79997613881233} - - Style - - stroke - - Color - - b - 0.398864 - g - 0.398857 - r - 0.398869 - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - Width - 3 - - - Tail - - ID - 10 - - - - Class - LineGraphic - Head - - ID - 9 - - ID - 19 - Points - - {336.21477455286674, 366.69121799294936} - {419.78521819920854, 317.30870528500463} - - Style - - stroke - - Color - - b - 0.398864 - g - 0.398857 - r - 0.398869 - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - Width - 3 - - - Tail - - ID - 6 - - - - Class - LineGraphic - Head - - ID - 5 - - ID - 16 - Points - - {298.79999165942382, 366.19994713698696} - {298.79999165942382, 317.79998366176108} - - Style - - stroke - - Color - - b - 0.398864 - g - 0.398857 - r - 0.398869 - - HeadArrow - FilledArrow - Legacy - - LineType - 1 - TailArrow - 0 - Width - 3 - - - Tail - - ID - 6 - - - - Bounds - {{475.19997809265135, 460.80004713897705}, {122.40000000000001, 43.199989000000002}} - Class - ShapedGraphic - FontInfo - - Color - - b - 0.298039 - g - 0.298039 - r - 0.298039 - - - ID - 15 - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - - shadow - - Draws - NO - - stroke - - Color - - b - 0.4 - g - 0.4 - r - 0.4 - - CornerRadius - 5 - Width - 2 - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Calibri;} -{\colortbl;\red255\green255\blue255;\red76\green76\blue76;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\b\fs28 \cf2 fixnum} - - - - Bounds - {{712.79998809265135, 273.59998713897704}, {122.40000000000001, 43.199989000000002}} - Class - ShapedGraphic - ID - 13 - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - FillType - 2 - GradientAngle - 90 - GradientColor - - b - 0.6 - g - 0.6 - r - 0.6 - - - shadow - - Draws - NO - - stroke - - Color - - b - 0.4 - g - 0.4 - r - 0.4 - - CornerRadius - 5 - Width - 2 - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Calibri;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\b\fs28 \cf0 void} - - - - Bounds - {{554.39995809265133, 367.19994713897705}, {122.40000000000001, 43.199989000000002}} - Class - ShapedGraphic - ID - 12 - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - FillType - 2 - GradientAngle - 90 - GradientColor - - b - 0.6 - g - 0.6 - r - 0.6 - - - shadow - - Draws - NO - - stroke - - Color - - b - 0.4 - g - 0.4 - r - 0.4 - - CornerRadius - 5 - Width - 2 - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Calibri;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\b\fs28 \cf0 unsigned} - - - - Bounds - {{554.39998809265137, 273.59998713897704}, {122.40000000000001, 43.199989000000002}} - Class - ShapedGraphic - ID - 11 - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - FillType - 2 - GradientAngle - 90 - GradientColor - - b - 0.6 - g - 0.6 - r - 0.6 - - - shadow - - Draws - NO - - stroke - - Color - - b - 0.4 - g - 0.4 - r - 0.4 - - CornerRadius - 5 - Width - 2 - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Calibri;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\b\fs28 \cf0 int} - - - - Bounds - {{395.99999809265137, 367.19994713897705}, {122.40000000000001, 43.199989000000002}} - Class - ShapedGraphic - FontInfo - - Color - - b - 0.298039 - g - 0.298039 - r - 0.298039 - - - ID - 10 - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - - shadow - - Draws - NO - - stroke - - Color - - b - 0.4 - g - 0.4 - r - 0.4 - - CornerRadius - 5 - Width - 2 - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Calibri;} -{\colortbl;\red255\green255\blue255;\red76\green76\blue76;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\b\fs28 \cf2 signed} - - - - Bounds - {{395.99999809265137, 273.59998713897704}, {122.40000000000001, 43.199989000000002}} - Class - ShapedGraphic - FontInfo - - Color - - b - 0.298039 - g - 0.298039 - r - 0.298039 - - - ID - 9 - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - - shadow - - Draws - NO - - stroke - - Color - - b - 0.4 - g - 0.4 - r - 0.4 - - CornerRadius - 5 - Width - 2 - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Calibri;} -{\colortbl;\red255\green255\blue255;\red76\green76\blue76;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\b\fs28 \cf2 extern} - - - - Bounds - {{395.99999809265137, 179.99999713897705}, {122.40000000000001, 43.199989000000002}} - Class - ShapedGraphic - ID - 8 - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - FillType - 2 - GradientAngle - 90 - GradientColor - - b - 0.6 - g - 0.6 - r - 0.6 - - - shadow - - Draws - NO - - stroke - - Color - - b - 0.4 - g - 0.4 - r - 0.4 - - CornerRadius - 5 - Width - 2 - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Calibri;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\b\fs28 \cf0 intish} - - - - Bounds - {{237.59999465942383, 367.19994713897705}, {122.40000000000001, 43.199989000000002}} - Class - ShapedGraphic - FontInfo - - Color - - b - 0.298039 - g - 0.298039 - r - 0.298039 - - - ID - 6 - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - - shadow - - Draws - NO - - stroke - - Color - - b - 0.4 - g - 0.4 - r - 0.4 - - CornerRadius - 5 - Width - 2 - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Calibri;} -{\colortbl;\red255\green255\blue255;\red76\green76\blue76;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\b\fs28 \cf2 double} - - - - Bounds - {{237.59999465942383, 273.59999465942383}, {122.40000000000001, 43.199989000000002}} - Class - ShapedGraphic - ID - 5 - Shape - Rectangle - Style - - fill - - Color - - b - 0.901961 - g - 0.901961 - r - 0.901961 - - FillType - 2 - GradientAngle - 90 - GradientColor - - b - 0.6 - g - 0.6 - r - 0.6 - - - shadow - - Draws - NO - - stroke - - Color - - b - 0.4 - g - 0.4 - r - 0.4 - - CornerRadius - 5 - Width - 2 - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Calibri;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\b\fs28 \cf0 double?} - - - - GridInfo - - GridSpacing - 7.1999998092651367 - MajorGridSpacing - 10 - ShowsGrid - YES - SnapsToGrid - YES - - GuidesLocked - NO - GuidesVisible - YES - HPages - 2 - ImageCounter - 1 - KeepToScale - - Layers - - - Lock - NO - Name - Layer 1 - Print - YES - View - YES - - - LayoutInfo - - Animate - NO - circoMinDist - 18 - circoSeparation - 0.0 - layoutEngine - dot - neatoSeparation - 0.0 - twopiSeparation - 0.0 - - LinksVisible - NO - MagnetsVisible - NO - MasterSheets - - ModificationDate - 2014-06-30 23:06:41 +0000 - Modifier - David Herman - NotesVisible - NO - Orientation - 2 - OriginVisible - NO - PageBreaks - YES - PrintInfo - - NSBottomMargin - - float - 41 - - NSHorizonalPagination - - int - 0 - - NSLeftMargin - - float - 18 - - NSPaperSize - - size - {612, 792} - - NSPrintReverseOrientation - - int - 0 - - NSRightMargin - - float - 18 - - NSTopMargin - - float - 18 - - - PrintOnePage - - ReadOnly - NO - RowAlign - 1 - RowSpacing - 36 - SheetTitle - Canvas 1 - SmartAlignmentGuidesActive - YES - SmartDistanceGuidesActive - YES - UniqueID - 1 - UseEntirePage - - VPages - 1 - WindowInfo - - CurrentSheet - 0 - ExpandedCanvases - - - name - Canvas 1 - - - Frame - {{40, 4}, {1175, 742}} - ListView - - OutlineWidth - 142 - RightSidebar - - ShowRuler - - Sidebar - - SidebarWidth - 120 - VisibleRegion - {{0, 0}, {1040, 603}} - Zoom - 1 - ZoomValues - - - Canvas 1 - 1 - 2 - - - - - diff --git a/html/subtypes.png b/html/subtypes.png deleted file mode 100644 index 41ea3a4a7b9e3ec4947e622f766cdd755bdd2b5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38209 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 li, dd li { margin: 1em 0; } -dt, dfn { font-weight: bold; font-style: normal; } -i, em, dt dfn { font-style: italic; } -pre, code { font-size: inherit; font-family: monospace, Droid Sans Fallback, sans-serif; font-variant: normal; } -pre strong { color: black; font: inherit; font-weight: bold; background: #B7EDEA; } -pre em { font-weight: bolder; font-style: normal; } -@media screen { code { color: orangered; } } -var sub { vertical-align: bottom; font-size: smaller; position: relative; top: 0.1em; } -table { border-collapse: collapse; border-style: hidden hidden none hidden; } -table thead, table tbody { border-bottom: solid; } -table tbody th { text-align: left; } -table tbody th:first-child { border-left: solid; } -table td, table th { border-left: solid; border-right: solid; border-bottom: solid thin; vertical-align: top; padding: 0.2em; } -blockquote { margin: 0 0 0 2em; border: 0; padding: 0; font-style: italic; } -ins { background: green; color: white; /* color: green; border: solid thin lime; padding: 0.3em; line-height: 1.6em; */ text-decoration: none; } -del { background: maroon; color: white; /* color: maroon; border: solid thin red; padding: 0.3em; line-height: 1.6em; */ text-decoration: line-through; } -body ins, body del { display: block; } -body * ins, body * del { display: inline; } - -.toc dfn, h1 dfn, h2 dfn, h3 dfn, h4 dfn, h5 dfn, h6 dfn { font: inherit; } -img.extra, p.overview { float: right; } -hr.bookmark { border: dashed 2em black; background: yellow; } -pre::before { font: bold 0.8em sans-serif; padding: 0.5em; position: absolute; top: auto; margin: -0.703125em 0 0 -3.75em /* 1em/0.8 + 1.5em + 0.5em*2 */ ; width: 1.5em; background: inherit; border: 0.078125em; border-style: solid none solid solid; border-radius: 1em 0 0 1em; } -pre.idl { border: solid 0.0625em; background: #EEEEEE; color: black; padding: 0.5em 1em; } -pre.idl :link, pre.idl :visited { color: inherit; background: transparent; } -pre.idl::before { content: 'IDL'; } -pre.asn { border: solid 0.0625em; background: #EEEEEE; color: black; padding: 0.5em 1em; } -pre.asn :link, pre.asn :visited { color: inherit; background: transparent; } -pre.asn::before { content: 'ASN'; } -pre.css { border: solid 0.0625em; background: #FFFFEE; color: black; padding: 0.5em 1em; } -pre.css:first-line { color: #AAAA50; } -pre.css::before { content: 'CSS'; } -dl.domintro { color: green; margin: 2em 0 2em 0; padding: 0.5em 1em 0.5em 2em; border: none; background: #DDFFDD; } -hr + dl.domintro, div.impl + dl.domintro { margin-top: 2.5em; margin-bottom: 1.5em; } -dl.domintro dt, dl.domintro dt * { color: black; text-decoration: none; } -dl.domintro dd { margin: 0.5em 0 1em 2em; padding: 0; } -dl.domintro dd p { margin: 0.5em 0; } -dl.domintro:before { display: table; margin: -1em -0.5em -0.5em auto; width: auto; content: 'This box is non-normative. Implementation requirements are given below this box.'; color: black; font-style: italic; border: solid 2px; background: white; padding: 0 0.25em; } -dl.switch { padding-left: 2em; } -dl.switch > dt { text-indent: -1.5em; } -dl.switch > dt:before { content: '\21AA'; padding: 0 0.5em 0 0; display: inline-block; width: 1em; text-align: right; line-height: 0.5em; } -dl.triple { padding: 0 0 0 1em; } -dl.triple dt, dl.triple dd { margin: 0; display: inline } -dl.triple dt:after { content: ':'; } -dl.triple dd:after { content: '\A'; white-space: pre; } -.diff-old { text-decoration: line-through; color: silver; background: transparent; } -.diff-chg, .diff-new { text-decoration: underline; color: green; background: transparent; } -a .diff-new { border-bottom: 1px blue solid; } -tr.rare { background: #EEEEEE; color: #333333; } - -figure.diagrams { border: double black; background: white; padding: 1em; } -figure.diagrams img { display: block; margin: 1em auto; } - -h2 { page-break-before: always; } -h1, h2, h3, h4, h5, h6, dt { page-break-after: avoid; } -h1 + h2, hr + h2.no-toc { page-break-before: auto; } - -p > span:not([title=""]):not([class="XXX"]):not([class="impl"]):not([class="note"]), -li > span:not([title=""]):not([class="XXX"]):not([class="impl"]):not([class="note"]) { border-bottom: solid #99CC99; } - -.head { margin: 0 0 1em; padding: 1em 0 0 0; display: block; } -.head p { margin: 0; } -.head h1 { margin: 0; } -.head h2 { margin-top: 0; } -.head .logo { float: right; margin: 0 1em; } -.head .logo img { display: block; margin: 0 0 0 auto; border: none } /* remove border from top image */ -.head dl { margin: 1em 0; } -p.copyright { font-size: 0.6em; font-style: oblique; margin: 0; } - -body > .toc > li { margin-top: 1em; margin-bottom: 1em; } -body > .toc.brief > li { margin-top: 0.35em; margin-bottom: 0.35em; } -body > .toc > li > * { margin-bottom: 0.5em; } -body > .toc > li > * > li > * { margin-bottom: 0.25em; } -.toc, .toc li { list-style: none; } - -.brief { margin-top: 1em; margin-bottom: 1em; line-height: 1.1; } -.brief > li { margin: 0; padding: 0; } -.brief > li > p { margin: 0; padding: 0; } - -.category-list { margin-top: -0.75em; margin-bottom: 1em; line-height: 1.5; } -.category-list::before { content: '\21D2\A0'; font-size: 1.2em; font-weight: 900; } -.category-list li { display: inline; } -.category-list li:not(:last-child)::after { content: ', '; } -.category-list li > span, .category-list li > a { text-transform: lowercase; } -.category-list li * { text-transform: none; } /* don't affect nested in */ - -[title=WIP], [title=TBW] { background: red; color: yellow; padding: 0.1em 0.3em; border: dotted white; margin: 0 0.7em 0 0.2em; } -[title=SCS] { background: green; color: white; padding: 0.1em 0.3em; border-style: none dashed; margin: 0 0.7em 0 0.2em; } -[title=WIP] :link, [title=WIP] :visited, -[title=TBW] :link, [title=TBW] :visited, -[title=SCS] :link, [title=SCS] :visited { background: transparent; color: inherit; } - -.big-issue, .XXX { color: #E50000; background: white; border: solid red; padding: 0.5em; margin: 1em 0; } -.big-issue > :first-child, .XXX > :first-child { margin-top: 0; } -p .big-issue, p .XXX { line-height: 3em; } -.note { color: green; background: transparent; font-family: sans-serif, Droid Sans Fallback; } -.warning { color: red; background: transparent; } -.note, .warning { font-weight: bolder; font-style: italic; } -.note em, .warning em, .note i, .warning i, .note var, .warning var { font-style: normal; } -p.note, div.note { padding: 0.5em 2em; } -span.note { padding: 0 2em; } -.note p:first-child, .warning p:first-child { margin-top: 0; } -.note p:last-child, .warning p:last-child { margin-bottom: 0; } -dd > .note:first-child { margin-bottom: 0; } -.warning:before { font-style: normal; } - -.tablenote { margin: 0.25em 0; } -.tablenote small { font-size: 0.9em; } - -.XXX:before, .XXX:after { content: " ** "; position: absolute; left: 0; width: 8em; text-align: right; } -p.note:before { content: 'Note: '; } -p.warning:before { content: '\26A0 Warning! '; } - -.bookkeeping:before { display: block; content: 'Bookkeeping details'; font-weight: bolder; font-style: italic; } -.bookkeeping { font-size: 0.8em; margin: 2em 0; } -.bookkeeping p { margin: 0.5em 2em; display: list-item; list-style: square; } -.bookkeeping dt { margin: 0.5em 2em 0; } -.bookkeeping dd { margin: 0 3em 0.5em; } - -.critical { margin: 1em; border: double thick red; padding: 1em; background: #FFFFCC; } -.critical > :first-child { margin-top: 0; } - -h4 { position: relative; z-index: 3; } -h4 + .element, h4 + div + .element { margin-top: -2.5em; padding-top: 2em; } -.element { background: #EEFFEE; color: black; margin: 0 0 1em 0.15em; padding: 0 1em 0.25em 0.75em; border-left: solid #99FF99 0.25em; position: relative; z-index: 1; } -.element:before { position: absolute; z-index: 2; top: 0; left: -1.15em; height: 2em; width: 0.9em; background: #EEFFEE; content: ' '; border-style: none none solid solid; border-color: #99FF99; border-width: 0.25em; } -.element:not(:hover) > dt > :link, .element:not(:hover) > dt > :visited { color: inherit; text-decoration: none; } - -table.css-property caption { text-align: left; font: inherit; font-weight: bold; } -table.css-property th { font: inherit; font-style: italic; text-align: left; padding-left: 2em; } - -.example { display: block; color: #222222; background: #FCFCFC; border-left: double; margin-left: 2em; padding-left: 1em; } -td > .example:only-child { margin: 0 0 0 0.1em; } - -td.non-rectangular-cell-continuation { border-left-style: hidden; } -td.non-rectangular-cell-indentation { border-top-style: hidden; min-width: 2em; } - -.hide { display: none } - -body.dfnEnabled dfn { cursor: pointer; } -.dfnPanel { - display: inline; - position: absolute; - z-index: 10; - height: auto; - width: auto; - padding: 0.5em 0.75em; - font: small sans-serif, Droid Sans Fallback; - background: #DDDDDD; - color: black; - border: outset 0.2em; -} -.dfnPanel * { margin: 0; padding: 0; font: inherit; text-indent: 0; } -.dfnPanel :link, .dfnPanel :visited { color: black; } -.dfnPanel p { font-weight: bolder; } -.dfnPanel * + p { margin-top: 0.25em; } -.dfnPanel li { list-style-position: inside; } - -@media aural { - h1, h2, h3 { stress: 20; richness: 90 } - .hide { speak: none } - p.copyright { volume: x-soft; speech-rate: x-fast } - dt { pause-before: 20% } - code, pre { speak-punctuation: code } -} - -@media print { - html { font-size: 8pt; } - @page { margin: 1cm 1cm 1cm 1cm; } - @page :left { - @bottom-left { - font: 6pt sans-serif, Droid Sans Fallback; - content: counter(page); - padding-top: 0em; - vertical-align: top; - } - } - @page :right { - @bottom-right { - font: 6pt sans-serif, Droid Sans Fallback; - content: counter(page); - text-align: right; - vertical-align: top; - padding-top: 0em; - } - } - a[href^="#"]::after { font-size: 0.6em; vertical-align: super; padding: 0 0.15em 0 0.15em; content: "p" target-counter(attr(href), page); } - .toc a::after { font: inherit; vertical-align: baseline; padding: 0; content: leader('.') target-counter(attr(href), page); } - pre a[href^="#"]::after, blockquote a[href^="#"]::after { content: ""; padding: 0; } - table { font-size: smaller; } - :link, :visited { text-decoration: none; color: inherit; background: transparent; } -} - -ul.domTree, ul.domTree ul { padding: 0 0 0 1em; margin: 0; } -ul.domTree li { padding: 0; margin: 0; list-style: none; position: relative; } -ul.domTree li li { list-style: none; } -ul.domTree li:first-child::before { position: absolute; top: 0; height: 0.6em; left: -0.75em; width: 0.5em; border-style: none none solid solid; content: ''; border-width: 0.1em; } -ul.domTree li:not(:last-child)::after { position: absolute; top: 0; bottom: -0.6em; left: -0.75em; width: 0.5em; border-style: none none solid solid; content: ''; border-width: 0.1em; } -ul.domTree span { font-style: italic; font-family: serif, Droid Sans Fallback; } -ul.domTree .t1 code { color: purple; font-weight: bold; } -ul.domTree .t2 { font-style: normal; font-family: monospace, Droid Sans Fallback; } -ul.domTree .t2 .name { color: black; font-weight: bold; } -ul.domTree .t2 .value { color: blue; font-weight: normal; } -ul.domTree .t3 code, .domTree .t4 code, .domTree .t5 code { color: gray; } -ul.domTree .t7 code, .domTree .t8 code { color: green; } -ul.domTree .t10 code { color: teal; } - -:target { - background: #ffa; - -moz-box-shadow: 0 0 25px #ffa; - -webkit-box-shadow: 0 0 150px #ffa; - box-shadow: 0 0 25px #ffa; -} - -/*body:not(.statusEnabled) .head, body:not(.dfnEnabled) .head { background: bottom right url(http://hixie.ch/resources/images/spinner) no-repeat; }*/ - -div.compilation:before { - content: "Compilation"; - font: bold small sans-serif; - /*float: left;*/ - position: absolute; - top: -0.9em; - left: -2.5em; - width: 7.5em; - text-align: center; - line-height: 1em; - color: #F8FFDD; - background: #060; - padding: 0.1em; - border: thin solid #999; - /*margin: -1.3em 0 0.3em -2.5em;*/ -} -div.compilation, pre.compilation { - background: #F8FFDD; - padding: 0.5em; - margin: 1em 0; - border: thin solid #999; - position: relative; -} -pre.compilation { - padding-top: 1.5em; -} -div.compilation { color: #060 } -pre.compilation { color: #060 } From 3b4eca702998db6a49831fba12e708afc29f7c32 Mon Sep 17 00:00:00 2001 From: David Herman Date: Sat, 6 Oct 2018 18:40:30 -0700 Subject: [PATCH 4/4] The README is historical at this point, but remove some dead links. --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9f15d86..1e83b2c 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,12 @@ A Mozilla Research project to specify and develop the extremely optimizable subset of JS targeted by compilers like Emscripten, Mandreel, and LLJS. -Discussion of the asm.js spec now takes place on Specifiction -[here](http://discourse.specifiction.org/c/asm-js). +~Discussion of the asm.js spec now takes place on Specifiction [here](http://discourse.specifiction.org/c/asm-js).~ -As of this update, this repo hosts the source for +The [spec repo](https://github.com/asm-js/spec) hosts the source for [the current asm.js Working Draft](http://asmjs.org/spec/latest/). -This repo also hosts JS source code which performs asm.js validation, however +This repo hosts JS source code which performs asm.js validation, however as of this update, this code is not up to date with the latest working draft and is not extensively tested. Patches to update it or fix bugs are welcome though.
-

asm.js

- -

Working Draft — 18 August 2014

- -
-
Latest version: -
http://asmjs.org/spec/latest/ - -
Editors: -
- David Herman, - Mozilla, - -
- Luke Wagner, - Mozilla, - -
- Alon Zakai, - Mozilla, - -
-