OLD | NEW |
---|---|
1 \documentclass{article} | 1 \documentclass{article} |
2 \usepackage{epsfig} | 2 \usepackage{epsfig} |
3 \usepackage{color} | 3 \usepackage{color} |
4 \usepackage{dart} | 4 \usepackage{dart} |
5 \usepackage{bnf} | 5 \usepackage{bnf} |
6 \usepackage{hyperref} | 6 \usepackage{hyperref} |
7 \usepackage{lmodern} | 7 \usepackage{lmodern} |
8 \newcommand{\code}[1]{{\sf #1}} | 8 \newcommand{\code}[1]{{\sf #1}} |
9 \title{Dart Programming Language Specification \\ | 9 \title{Dart Programming Language Specification \\ |
10 {4th edition draft}\\ | 10 {4th edition draft}\\ |
(...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
700 | 700 |
701 \LMHash{} | 701 \LMHash{} |
702 A {\em required formal parameter} may be specified in one of three ways: | 702 A {\em required formal parameter} may be specified in one of three ways: |
703 \begin{itemize} | 703 \begin{itemize} |
704 \item By means of a function signature that names the parameter and describes it s type as a function type (\ref{functionTypes}). It is a compile-time error if any default values are specified in the signature of such a function type.% expl ain what the type is in this case? Where is this described in general? | 704 \item By means of a function signature that names the parameter and describes it s type as a function type (\ref{functionTypes}). It is a compile-time error if any default values are specified in the signature of such a function type.% expl ain what the type is in this case? Where is this described in general? |
705 \item As an initializing formal, which is only valid as a parameter to a generat ive constructor (\ref{generativeConstructors}). % do we need to say this, or any thing more? | 705 \item As an initializing formal, which is only valid as a parameter to a generat ive constructor (\ref{generativeConstructors}). % do we need to say this, or any thing more? |
706 \item Via an ordinary variable declaration (\ref{variables}). | 706 \item Via an ordinary variable declaration (\ref{variables}). |
707 \end{itemize} | 707 \end{itemize} |
708 | 708 |
709 \begin{grammar} | 709 \begin{grammar} |
710 {\bf normalFormalParameter:}functionSignature; | 710 {\bf normalFormalParameter:}functionSignature `?'?; |
711 fieldFormalParameter; | 711 fieldFormalParameter; |
712 simpleFormalParameter | 712 simpleFormalParameter |
713 . | 713 . |
714 | 714 |
715 {\bf simpleFormalParameter:}declaredIdentifier; | 715 {\bf simpleFormalParameter:}declaredIdentifier; |
716 metadata identifier | 716 metadata identifier |
717 . | 717 . |
718 | 718 |
719 {\bf fieldFormalParameter:} | 719 {\bf fieldFormalParameter:} |
720 metadata finalConstVarOrType? \THIS{} `{\escapegrammar .}' identifier formalP arameterList? | 720 metadata finalConstVarOrType? \THIS{} `{\escapegrammar .}' identifier formalP arameterList? |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
813 A {\em class} defines the form and behavior of a set of objects which are its {\ em instances}. Classes may be defined by class declarations as described below, or via mixin applications (\ref{mixinApplication}). | 813 A {\em class} defines the form and behavior of a set of objects which are its {\ em instances}. Classes may be defined by class declarations as described below, or via mixin applications (\ref{mixinApplication}). |
814 | 814 |
815 \begin{grammar} | 815 \begin{grammar} |
816 {\bf classDefinition:} | 816 {\bf classDefinition:} |
817 metadata \ABSTRACT{}? \CLASS{} identifier typeParameters? (superclass mixins?)? interfaces? \\ | 817 metadata \ABSTRACT{}? \CLASS{} identifier typeParameters? (superclass mixins?)? interfaces? \\ |
818 `\{' (metadata classMemberDefinition)* `\}'; | 818 `\{' (metadata classMemberDefinition)* `\}'; |
819 | 819 |
820 metadata \ABSTRACT{}? \CLASS{} mixinApplicationClass | 820 metadata \ABSTRACT{}? \CLASS{} mixinApplicationClass |
821 . | 821 . |
822 | 822 |
823 {\bf classDenotation:} | |
824 className typeArguments? | |
Lasse Reichstein Nielsen
2017/05/30 10:52:30
className is equivalent to typeName, so this could
| |
825 . | |
826 | |
827 {\bf className:} | |
828 qualified | |
829 . | |
830 | |
831 {\bf classDenotationList:} | |
832 classDenotation (`,$\!\!$' classDenotation)* | |
833 . | |
834 | |
823 {\bf mixins:} | 835 {\bf mixins:} |
824 \WITH{} typeList | 836 \WITH{} classDenotationList |
825 . | 837 . |
826 | 838 |
827 {\bf classMemberDefinition:}declaration `{\escapegrammar ;}' ; | 839 {\bf classMemberDefinition:}declaration `{\escapegrammar ;}' ; |
828 methodSignature functionBody | 840 methodSignature functionBody |
829 . | 841 . |
830 | 842 |
831 {\bf methodSignature:}constructorSignature initializers?; | 843 {\bf methodSignature:}constructorSignature initializers?; |
832 factoryConstructorSignature; | 844 factoryConstructorSignature; |
833 \STATIC{}? functionSignature; | 845 \STATIC{}? functionSignature; |
834 \STATIC{}? getterSignature; | 846 \STATIC{}? getterSignature; |
(...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1431 } | 1443 } |
1432 | 1444 |
1433 \paragraph{Redirecting Factory Constructors} | 1445 \paragraph{Redirecting Factory Constructors} |
1434 \LMLabel{redirectingFactoryConstructors} | 1446 \LMLabel{redirectingFactoryConstructors} |
1435 | 1447 |
1436 \LMHash{} | 1448 \LMHash{} |
1437 A {\em redirecting factory constructor} specifies a call to a constructor of ano ther class that is to be used whenever the redirecting constructor is called. | 1449 A {\em redirecting factory constructor} specifies a call to a constructor of ano ther class that is to be used whenever the redirecting constructor is called. |
1438 | 1450 |
1439 \begin{grammar} | 1451 \begin{grammar} |
1440 {\bf redirectingFactoryConstructorSignature:} | 1452 {\bf redirectingFactoryConstructorSignature:} |
1441 \CONST{}? \FACTORY{} identifier (`{\escapegrammar .}' identifier)? formalP arameterList `=' type (`{\escapegrammar .}' identifier)? | 1453 \CONST{}? \FACTORY{} identifier (`{\escapegrammar .}' identifier)? formalP arameterList `=' classDenotation (`{\escapegrammar .}' identifier)? |
1442 . | 1454 . |
1443 \end{grammar} | 1455 \end{grammar} |
1444 | 1456 |
1445 \LMHash{} | 1457 \LMHash{} |
1446 Calling a redirecting factory constructor $k$ causes the constructor $k^\prime$ denoted by $type$ (respectively, $type.identifier$) to be called with the actual arguments passed to $k$, and returns the result of $k^\prime$ as the result of $k$. The resulting constructor call is governed by the same rules as an instanc e creation expression using \NEW{} (\ref{instanceCreation}). | 1458 Calling a redirecting factory constructor $k$ causes the constructor $k^\prime$ denoted by $type$ (respectively, $type.identifier$) to be called with the actual arguments passed to $k$, and returns the result of $k^\prime$ as the result of $k$. The resulting constructor call is governed by the same rules as an instanc e creation expression using \NEW{} (\ref{instanceCreation}). |
1447 | 1459 |
1448 \commentary{ | 1460 \commentary{ |
1449 It follows that if $type$ or $type.id$ are not defined, or do not refer to a cla ss or constructor, a dynamic error occurs, as with any other undefined construct or call. The same holds if $k$ is called with fewer required parameters or more positional parameters than $k^\prime$ expects, or if $k$ is called with a named parameter that is not declared by $k^\prime$. | 1461 It follows that if $type$ or $type.id$ are not defined, or do not refer to a cla ss or constructor, a dynamic error occurs, as with any other undefined construct or call. The same holds if $k$ is called with fewer required parameters or more positional parameters than $k^\prime$ expects, or if $k$ is called with a named parameter that is not declared by $k^\prime$. |
1450 } | 1462 } |
1451 | 1463 |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1709 \begin{itemize} | 1721 \begin{itemize} |
1710 \item $C$ is \code{Object}, which has no superclass. OR | 1722 \item $C$ is \code{Object}, which has no superclass. OR |
1711 \item Class $C$ is deemed to have an \EXTENDS{} clause of the form \code{\EXTEN DS{} Object}, and the rules above apply. | 1723 \item Class $C$ is deemed to have an \EXTENDS{} clause of the form \code{\EXTEN DS{} Object}, and the rules above apply. |
1712 \end{itemize} | 1724 \end{itemize} |
1713 | 1725 |
1714 \LMHash{} | 1726 \LMHash{} |
1715 It is a compile-time error to specify an \EXTENDS{} clause for class \code{Objec t}. | 1727 It is a compile-time error to specify an \EXTENDS{} clause for class \code{Objec t}. |
1716 | 1728 |
1717 \begin{grammar} | 1729 \begin{grammar} |
1718 {\bf superclass:} | 1730 {\bf superclass:} |
1719 \EXTENDS{} type | 1731 \EXTENDS{} classDenotation |
1720 . | 1732 . |
1721 \end{grammar} | 1733 \end{grammar} |
1722 | 1734 |
1723 %The superclass clause of a class C is processed within the enclosing scope of t he static scope of C. | 1735 %The superclass clause of a class C is processed within the enclosing scope of t he static scope of C. |
1724 %\commentary{ | 1736 %\commentary{ |
1725 %This means that in a generic class, the type parameters of the generic are avai lable in the superclass clause. | 1737 %This means that in a generic class, the type parameters of the generic are avai lable in the superclass clause. |
1726 %} | 1738 %} |
1727 | 1739 |
1728 \LMHash{} | 1740 \LMHash{} |
1729 The scope of the \EXTENDS{} and \WITH{} clauses of a class $C$ is the type-param eter scope of $C$. | 1741 The scope of the \EXTENDS{} and \WITH{} clauses of a class $C$ is the type-param eter scope of $C$. |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1850 \subsection{ Superinterfaces} | 1862 \subsection{ Superinterfaces} |
1851 \LMLabel{superinterfaces} | 1863 \LMLabel{superinterfaces} |
1852 % what about rules about classes that fail to implement their interfaces? | 1864 % what about rules about classes that fail to implement their interfaces? |
1853 | 1865 |
1854 \LMHash{} | 1866 \LMHash{} |
1855 A class has a set of direct superinterfaces. This set includes the interface of its superclass and the interfaces specified in the \IMPLEMENTS{} clause of the class. | 1867 A class has a set of direct superinterfaces. This set includes the interface of its superclass and the interfaces specified in the \IMPLEMENTS{} clause of the class. |
1856 % and any superinterfaces specified by interface injection (\ref{interfaceInject ion}). \Q{The latter needs to be worded carefully - when do interface injection clauses execute and in what scope?} | 1868 % and any superinterfaces specified by interface injection (\ref{interfaceInject ion}). \Q{The latter needs to be worded carefully - when do interface injection clauses execute and in what scope?} |
1857 | 1869 |
1858 \begin{grammar} | 1870 \begin{grammar} |
1859 {\bf interfaces:} | 1871 {\bf interfaces:} |
1860 \IMPLEMENTS{} typeList | 1872 \IMPLEMENTS{} classDenotationList |
1861 . | 1873 . |
1862 \end{grammar} | 1874 \end{grammar} |
1863 | 1875 |
1864 \LMHash{} | 1876 \LMHash{} |
1865 The scope of the \IMPLEMENTS{} clause of a class $C$ is the type-parameter scope of $C$. | 1877 The scope of the \IMPLEMENTS{} clause of a class $C$ is the type-parameter scope of $C$. |
1866 | 1878 |
1867 \LMHash{} | 1879 \LMHash{} |
1868 It is a compile-time error if the \IMPLEMENTS{} clause of a class $C$ specifie s a type variable as a superinterface. It is a compile-time error if the \IMPL EMENTS{} clause of a class $C$ specifies an enumerated type (\ref{enums}), a ma lformed type or deferred type (\ref{staticTypes}) as a superinterface. It is a compile-time error if the \IMPLEMENTS{} clause of a class $C$ specifies type \DY NAMIC{} as a superinterface. It is a compile-time error if the \IMPLEMENTS{} c lause of a class $C$ specifies a type $T$ as a superinterface more than once. | 1880 It is a compile-time error if the \IMPLEMENTS{} clause of a class $C$ specifie s a type variable as a superinterface. It is a compile-time error if the \IMPL EMENTS{} clause of a class $C$ specifies an enumerated type (\ref{enums}), a ma lformed type or deferred type (\ref{staticTypes}) as a superinterface. It is a compile-time error if the \IMPLEMENTS{} clause of a class $C$ specifies type \DY NAMIC{} as a superinterface. It is a compile-time error if the \IMPLEMENTS{} c lause of a class $C$ specifies a type $T$ as a superinterface more than once. |
1869 It is a compile-time error if the superclass of a class $C$ is specified as a su perinterface of $C$. | 1881 It is a compile-time error if the superclass of a class $C$ is specified as a su perinterface of $C$. |
1870 | 1882 |
1871 \rationale{ | 1883 \rationale{ |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2039 | 2051 |
2040 \LMHash{} | 2052 \LMHash{} |
2041 A mixin may be applied to a superclass, yielding a new class. Mixin application occurs when a mixin is mixed into a class declaration via its \WITH{} clause. T he mixin application may be used to extend a class per section (\ref{classes}); alternately, a class may be defined as a mixin application as described in this section. It is a compile-time error if the \WITH{} clause of a mixin applicati on $C$ includes a deferred type expression. | 2053 A mixin may be applied to a superclass, yielding a new class. Mixin application occurs when a mixin is mixed into a class declaration via its \WITH{} clause. T he mixin application may be used to extend a class per section (\ref{classes}); alternately, a class may be defined as a mixin application as described in this section. It is a compile-time error if the \WITH{} clause of a mixin applicati on $C$ includes a deferred type expression. |
2042 | 2054 |
2043 | 2055 |
2044 \begin{grammar} | 2056 \begin{grammar} |
2045 {\bf mixinApplicationClass:} | 2057 {\bf mixinApplicationClass:} |
2046 identifier typeParameters? `=' mixinApplication `{\escapegrammar ;}' . | 2058 identifier typeParameters? `=' mixinApplication `{\escapegrammar ;}' . |
2047 | 2059 |
2048 {\bf mixinApplication:} | 2060 {\bf mixinApplication:} |
2049 type mixins interfaces? | 2061 classDenotation mixins interfaces? |
2050 . | 2062 . |
2051 \end{grammar} | 2063 \end{grammar} |
2052 | 2064 |
2053 \LMHash{} | 2065 \LMHash{} |
2054 A mixin application of the form \code{$S$ \WITH{} $M$;} defines a class $C$ w ith superclass $S$. | 2066 A mixin application of the form \code{$S$ \WITH{} $M$;} defines a class $C$ w ith superclass $S$. |
2055 | 2067 |
2056 \LMHash{} | 2068 \LMHash{} |
2057 A mixin application of the form \code{$S$ \WITH{} $M_1, \ldots, M_k$;} defines a class $C$ whose superclass is the application of the mixin composition (\ref {mixinComposition}) $M_{k-1} * \ldots * M_1$ to $S$. | 2069 A mixin application of the form \code{$S$ \WITH{} $M_1, \ldots, M_k$;} defines a class $C$ whose superclass is the application of the mixin composition (\ref {mixinComposition}) $M_{k-1} * \ldots * M_1$ to $S$. |
2058 | 2070 |
2059 \LMHash{} | 2071 \LMHash{} |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2357 . | 2369 . |
2358 \end{grammar} | 2370 \end{grammar} |
2359 | 2371 |
2360 \begin{grammar} | 2372 \begin{grammar} |
2361 {\bf primary:}thisExpression; | 2373 {\bf primary:}thisExpression; |
2362 \SUPER{} unconditionalAssignableSelector; | 2374 \SUPER{} unconditionalAssignableSelector; |
2363 functionExpression; | 2375 functionExpression; |
2364 literal; | 2376 literal; |
2365 identifier; | 2377 identifier; |
2366 newExpression; | 2378 newExpression; |
2367 \NEW{} type `\#' (`{\escapegrammar .}' identifier)?; | 2379 \NEW{} classDenotation `\#' (`{\escapegrammar .}' identifier)?; |
2368 constObjectExpression; | 2380 constObjectExpression; |
2369 `(' expression `)' | 2381 `(' expression `)' |
2370 . | 2382 . |
2371 | 2383 |
2372 \end{grammar} | 2384 \end{grammar} |
2373 | 2385 |
2374 \LMHash{} | 2386 \LMHash{} |
2375 An expression $e$ may always be enclosed in parentheses, but this never has any semantic effect on $e$. | 2387 An expression $e$ may always be enclosed in parentheses, but this never has any semantic effect on $e$. |
2376 | 2388 |
2377 \commentary{ | 2389 \commentary{ |
(...skipping 902 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3280 | 3292 |
3281 | 3293 |
3282 \subsubsection{ New} | 3294 \subsubsection{ New} |
3283 \LMLabel{new} | 3295 \LMLabel{new} |
3284 | 3296 |
3285 \LMHash{} | 3297 \LMHash{} |
3286 The {\em new expression} invokes a constructor (\ref{constructors}). | 3298 The {\em new expression} invokes a constructor (\ref{constructors}). |
3287 | 3299 |
3288 \begin{grammar} | 3300 \begin{grammar} |
3289 {\bf newExpression:} | 3301 {\bf newExpression:} |
3290 \NEW{} type (`{\escapegrammar .}' identifier)? arguments | 3302 \NEW{} classDenotation (`{\escapegrammar .}' identifier)? arguments |
3291 . | 3303 . |
3292 \end{grammar} | 3304 \end{grammar} |
3293 | 3305 |
3294 \LMHash{} | 3306 \LMHash{} |
3295 Let $e$ be a new expression of the form | 3307 Let $e$ be a new expression of the form |
3296 | 3308 |
3297 \NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ or the form | 3309 \NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ or the form |
3298 | 3310 |
3299 \NEW{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$. | 3311 \NEW{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$. |
3300 | 3312 |
3301 %It is a runtime type error if | 3313 %It is a runtime type error if |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3398 | 3410 |
3399 | 3411 |
3400 \subsubsection{ Const} | 3412 \subsubsection{ Const} |
3401 \LMLabel{const} | 3413 \LMLabel{const} |
3402 | 3414 |
3403 \LMHash{} | 3415 \LMHash{} |
3404 A {\em constant object expression} invokes a constant constructor (\ref{constant Constructors}). | 3416 A {\em constant object expression} invokes a constant constructor (\ref{constant Constructors}). |
3405 | 3417 |
3406 \begin{grammar} | 3418 \begin{grammar} |
3407 {\bf constObjectExpression:} | 3419 {\bf constObjectExpression:} |
3408 \CONST{} type ('{\escapegrammar .}' identifier)? arguments | 3420 \CONST{} classDenotation ('{\escapegrammar .}' identifier)? arguments |
Lasse Reichstein Nielsen
2017/05/30 10:52:30
' -> `
maybe?
| |
3409 . | 3421 . |
3410 \end{grammar} | 3422 \end{grammar} |
3411 | 3423 |
3412 \LMHash{} | 3424 \LMHash{} |
3413 Let $e$ be a constant object expression of the form | 3425 Let $e$ be a constant object expression of the form |
3414 | 3426 |
3415 \CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ | 3427 \CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ |
3416 | 3428 |
3417 or the form \CONST{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$. It is a compile-time error if $T$ does not denote a class accessible in the current scope. It is a compile-time error if $T$ is a deferred type (\re f{staticTypes}). | 3429 or the form \CONST{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$. It is a compile-time error if $T$ does not denote a class accessible in the current scope. It is a compile-time error if $T$ is a deferred type (\re f{staticTypes}). |
3418 | 3430 |
3419 \commentary{In particular, $T$ may not be a type variable.} | 3431 \commentary{In particular, $T$ may not be a type variable.} |
(...skipping 3604 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7024 } | 7036 } |
7025 | 7037 |
7026 \subsection{Static Types} | 7038 \subsection{Static Types} |
7027 \LMLabel{staticTypes} | 7039 \LMLabel{staticTypes} |
7028 | 7040 |
7029 \LMHash{} | 7041 \LMHash{} |
7030 Static type annotations are used in variable declarations (\ref{variables}) (inc luding formal parameters (\ref{formalParameters})), in the return types of funct ions (\ref{functions}) and in the bounds of type variables. Static type annotat ions are used during static checking and when running programs in checked mode. They have no effect whatsoever in production mode. | 7042 Static type annotations are used in variable declarations (\ref{variables}) (inc luding formal parameters (\ref{formalParameters})), in the return types of funct ions (\ref{functions}) and in the bounds of type variables. Static type annotat ions are used during static checking and when running programs in checked mode. They have no effect whatsoever in production mode. |
7031 | 7043 |
7032 \begin{grammar} | 7044 \begin{grammar} |
7033 {\bf type:} | 7045 {\bf type:} |
7034 typeName typeArguments? | 7046 typeName typeArguments? `?'? |
7035 . | 7047 . |
7036 | 7048 |
7037 {\bf typeName:} | 7049 {\bf typeName:} |
7038 qualified | 7050 qualified |
7039 . | 7051 . |
7040 | 7052 |
7041 {\bf typeArguments:} | 7053 {\bf typeArguments:} |
7042 '<' typeList '>' | 7054 '<' typeList '>' |
Lasse Reichstein Nielsen
2017/05/30 10:52:30
The quotes here look wrong, should they be `<' and
| |
7043 . | 7055 . |
7044 | 7056 |
7045 {\bf typeList:} | 7057 {\bf typeList:} |
7046 type (',' type)* | 7058 type (',' type)* |
Lasse Reichstein Nielsen
2017/05/30 10:52:30
Add $\!\!$ here too?
| |
7047 . | 7059 . |
7048 \end{grammar} | 7060 \end{grammar} |
7049 | 7061 |
7050 \LMHash{} | 7062 \LMHash{} |
7051 A Dart implementation must provide a static checker that detects and reports exa ctly those situations this specification identifies as static warnings and only those situations. However: | 7063 A Dart implementation must provide a static checker that detects and reports exa ctly those situations this specification identifies as static warnings and only those situations. However: |
7052 \begin{itemize} | 7064 \begin{itemize} |
7053 \item Running the static checker on a program $P$ is not required for compiling and running $P$. | 7065 \item Running the static checker on a program $P$ is not required for compiling and running $P$. |
7054 \item Running the static checker on a program $P$ must not prevent successful co mpilation of $P$ nor may it prevent the execution of $P$, regardless of whether any static warnings occur. | 7066 \item Running the static checker on a program $P$ must not prevent successful co mpilation of $P$ nor may it prevent the execution of $P$, regardless of whether any static warnings occur. |
7055 \end{itemize} | 7067 \end{itemize} |
7056 | 7068 |
(...skipping 840 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7897 | 7909 |
7898 The invariant that each normative paragraph is associated with a line | 7910 The invariant that each normative paragraph is associated with a line |
7899 containing the text \LMHash{} should be maintained. Extra occurrences | 7911 containing the text \LMHash{} should be maintained. Extra occurrences |
7900 of \LMHash{} can be added if needed, e.g., in order to make | 7912 of \LMHash{} can be added if needed, e.g., in order to make |
7901 individual \item{}s in itemized lists addressable. Each \LM.. command | 7913 individual \item{}s in itemized lists addressable. Each \LM.. command |
7902 must occur on a separate line. \LMHash{} must occur immediately | 7914 must occur on a separate line. \LMHash{} must occur immediately |
7903 before the associated paragraph, and \LMLabel must occur immediately | 7915 before the associated paragraph, and \LMLabel must occur immediately |
7904 after the associated \section{}, \subsection{} etc. | 7916 after the associated \section{}, \subsection{} etc. |
7905 | 7917 |
7906 ---------------------------------------------------------------------- | 7918 ---------------------------------------------------------------------- |
OLD | NEW |