explicit types for generic routines
This commit is contained in:
parent
e90665bff2
commit
6c20509121
25 changed files with 411 additions and 343 deletions
130
doc/intern.txt
130
doc/intern.txt
|
|
@ -114,6 +114,71 @@ Thus we need to serialize this graph as RTTI for C code generation.
|
|||
Look at the file ``lib/system/hti.nim`` for more information.
|
||||
|
||||
|
||||
The compiler's architecture
|
||||
===========================
|
||||
|
||||
Nimrod uses the classic compiler architecture: A scanner feds tokens to a
|
||||
parser. The parser builds a syntax tree that is used by the code generator.
|
||||
This syntax tree is the interface between the parser and the code generator.
|
||||
It is essential to understand most of the compiler's code.
|
||||
|
||||
In order to compile Nimrod correctly, type-checking has to be seperated from
|
||||
parsing. Otherwise generics cannot work.
|
||||
|
||||
.. include:: filelist.txt
|
||||
|
||||
|
||||
The syntax tree
|
||||
---------------
|
||||
The synax tree consists of nodes which may have an arbitrary number of
|
||||
children. Types and symbols are represented by other nodes, because they
|
||||
may contain cycles. The AST changes its shape after semantic checking. This
|
||||
is needed to make life easier for the code generators. See the "ast" module
|
||||
for the type definitions. The `macros <macros.html>`_ module contains many
|
||||
examples how the AST represents each syntactic structure.
|
||||
|
||||
|
||||
How the RTL is compiled
|
||||
=======================
|
||||
|
||||
The ``system`` module contains the part of the RTL which needs support by
|
||||
compiler magic (and the stuff that needs to be in it because the spec
|
||||
says so). The C code generator generates the C code for it just like any other
|
||||
module. However, calls to some procedures like ``addInt`` are inserted by
|
||||
the CCG. Therefore the module ``magicsys`` contains a table (``compilerprocs``)
|
||||
with all symbols that are marked as ``compilerproc``. ``compilerprocs`` are
|
||||
needed by the code generator. A ``magic`` proc is not the same as a
|
||||
``compilerproc``: A ``magic`` is a proc that needs compiler magic for its
|
||||
semantic checking, a ``compilerproc`` is a proc that is used by the code
|
||||
generator.
|
||||
|
||||
|
||||
Debugging Nimrod's memory management
|
||||
====================================
|
||||
|
||||
The following paragraphs are mostly a reminder for myself. Things to keep
|
||||
in mind:
|
||||
|
||||
* Segmentation faults can have multiple reasons: One that is frequently
|
||||
forgotten is that *stack overflow* can trigger one!
|
||||
* If an assertion in Nimrod's memory manager or GC fails, the stack trace
|
||||
keeps allocating memory! Thus a stack overflow may happen, hiding the
|
||||
real issue.
|
||||
* What seem to be C code generation problems is often a bug resulting from
|
||||
not producing prototypes, so that some types default to ``cint``. Testing
|
||||
without the ``-w`` option helps!
|
||||
|
||||
|
||||
Generation of dynamic link libraries
|
||||
====================================
|
||||
|
||||
Generation of dynamic link libraries or shared libraries is not difficult; the
|
||||
underlying C compiler already does all the hard work for us. The problem is the
|
||||
common runtime library, especially the memory manager. Note that Borland's
|
||||
Delphi had exactly the same problem. The workaround is to not link the GC with
|
||||
the Dll and provide an extra runtime dll that needs to be initialized.
|
||||
|
||||
|
||||
The Garbage Collector
|
||||
=====================
|
||||
|
||||
|
|
@ -216,71 +281,6 @@ the check whether the ref is on the stack is very cheap (only two
|
|||
comparisons).
|
||||
|
||||
|
||||
The compiler's architecture
|
||||
===========================
|
||||
|
||||
Nimrod uses the classic compiler architecture: A scanner feds tokens to a
|
||||
parser. The parser builds a syntax tree that is used by the code generator.
|
||||
This syntax tree is the interface between the parser and the code generator.
|
||||
It is essential to understand most of the compiler's code.
|
||||
|
||||
In order to compile Nimrod correctly, type-checking has to be seperated from
|
||||
parsing. Otherwise generics would not work.
|
||||
|
||||
.. include:: filelist.txt
|
||||
|
||||
|
||||
The syntax tree
|
||||
---------------
|
||||
The synax tree consists of nodes which may have an arbitrary number of
|
||||
children. Types and symbols are represented by other nodes, because they
|
||||
may contain cycles. The AST changes its shape after semantic checking. This
|
||||
is needed to make life easier for the code generators. See the "ast" module
|
||||
for the type definitions. The `macros <macros.html>`_ module contains many
|
||||
examples how the AST represents each syntactic structure.
|
||||
|
||||
|
||||
How the RTL is compiled
|
||||
=======================
|
||||
|
||||
The ``system`` module contains the part of the RTL which needs support by
|
||||
compiler magic (and the stuff that needs to be in it because the spec
|
||||
says so). The C code generator generates the C code for it just like any other
|
||||
module. However, calls to some procedures like ``addInt`` are inserted by
|
||||
the CCG. Therefore the module ``magicsys`` contains a table (``compilerprocs``)
|
||||
with all symbols that are marked as ``compilerproc``. ``compilerprocs`` are
|
||||
needed by the code generator. A ``magic`` proc is not the same as a
|
||||
``compilerproc``: A ``magic`` is a proc that needs compiler magic for its
|
||||
semantic checking, a ``compilerproc`` is a proc that is used by the code
|
||||
generator.
|
||||
|
||||
|
||||
Debugging Nimrod's memory management
|
||||
====================================
|
||||
|
||||
The following paragraphs are mostly a reminder for myself. Things to keep
|
||||
in mind:
|
||||
|
||||
* Segmentation faults can have multiple reasons: One that is frequently
|
||||
forgotten is that *stack overflow* can trigger one!
|
||||
* If an assertion in Nimrod's memory manager or GC fails, the stack trace
|
||||
keeps allocating memory! Thus a stack overflow may happen, hiding the
|
||||
real issue.
|
||||
* What seem to be C code generation problems is often a bug resulting from
|
||||
not producing prototypes, so that some types default to ``cint``. Testing
|
||||
without the ``-w`` option helps!
|
||||
|
||||
|
||||
Generation of dynamic link libraries
|
||||
====================================
|
||||
|
||||
Generation of dynamic link libraries or shared libraries is not difficult; the
|
||||
underlying C compiler already does all the hard work for us. The problem is the
|
||||
common runtime library, especially the memory manager. Note that Borland's
|
||||
Delphi had exactly the same problem. The workaround is to not link the GC with
|
||||
the Dll and provide an extra runtime dll that needs to be initialized.
|
||||
|
||||
|
||||
Code generation for closures
|
||||
============================
|
||||
|
||||
|
|
|
|||
|
|
@ -238,7 +238,7 @@ Database support
|
|||
for other databases too.
|
||||
|
||||
* `db_sqlite <db_sqlite.html>`_
|
||||
A higher level mySQL database wrapper. The same interface is implemented
|
||||
A higher level SQLite database wrapper. The same interface is implemented
|
||||
for other databases too.
|
||||
|
||||
|
||||
|
|
|
|||
138
doc/theindex.txt
138
doc/theindex.txt
|
|
@ -276,10 +276,10 @@ Index
|
|||
`ropes.html#115 <ropes.html#115>`_
|
||||
|
||||
`[]`:idx:
|
||||
`xmltree.html#114 <xmltree.html#114>`_
|
||||
`graphics.html#111 <graphics.html#111>`_
|
||||
|
||||
`[]`:idx:
|
||||
`graphics.html#111 <graphics.html#111>`_
|
||||
`xmltree.html#114 <xmltree.html#114>`_
|
||||
|
||||
`[]=`:idx:
|
||||
`strtabs.html#106 <strtabs.html#106>`_
|
||||
|
|
@ -731,12 +731,6 @@ Index
|
|||
`clonglong`:idx:
|
||||
`system.html#388 <system.html#388>`_
|
||||
|
||||
`Close`:idx:
|
||||
* `system.html#512 <system.html#512>`_
|
||||
* `db_postgres.html#117 <db_postgres.html#117>`_
|
||||
* `db_mysql.html#117 <db_mysql.html#117>`_
|
||||
* `db_sqlite.html#117 <db_sqlite.html#117>`_
|
||||
|
||||
`close`:idx:
|
||||
* `sockets.html#121 <sockets.html#121>`_
|
||||
* `lexbase.html#105 <lexbase.html#105>`_
|
||||
|
|
@ -746,8 +740,14 @@ Index
|
|||
* `zipfiles.html#103 <zipfiles.html#103>`_
|
||||
* `httpserver.html#106 <httpserver.html#106>`_
|
||||
|
||||
`Close`:idx:
|
||||
* `system.html#513 <system.html#513>`_
|
||||
* `db_postgres.html#117 <db_postgres.html#117>`_
|
||||
* `db_mysql.html#117 <db_mysql.html#117>`_
|
||||
* `db_sqlite.html#117 <db_sqlite.html#117>`_
|
||||
|
||||
`CloseFile`:idx:
|
||||
`system.html#511 <system.html#511>`_
|
||||
`system.html#512 <system.html#512>`_
|
||||
|
||||
`closure`:idx:
|
||||
`manual.html#177 <manual.html#177>`_
|
||||
|
|
@ -1350,8 +1350,8 @@ Index
|
|||
`system.html#392 <system.html#392>`_
|
||||
|
||||
`cstringArrayToSeq`:idx:
|
||||
* `system.html#539 <system.html#539>`_
|
||||
* `system.html#540 <system.html#540>`_
|
||||
* `system.html#541 <system.html#541>`_
|
||||
|
||||
`CSV`:idx:
|
||||
`parsecsv.html#101 <parsecsv.html#101>`_
|
||||
|
|
@ -1777,8 +1777,7 @@ Index
|
|||
* `strutils.html#157 <strutils.html#157>`_
|
||||
|
||||
`deleteStr`:idx:
|
||||
* `strutils.html#124 <strutils.html#124>`_
|
||||
* `strutils.html#158 <strutils.html#158>`_
|
||||
`strutils.html#124 <strutils.html#124>`_
|
||||
|
||||
`dfn`:idx:
|
||||
`xmlgen.html#125 <xmlgen.html#125>`_
|
||||
|
|
@ -1894,7 +1893,7 @@ Index
|
|||
* `db_sqlite.html#104 <db_sqlite.html#104>`_
|
||||
|
||||
`editDistance`:idx:
|
||||
`strutils.html#166 <strutils.html#166>`_
|
||||
`strutils.html#165 <strutils.html#165>`_
|
||||
|
||||
`EDivByZero`:idx:
|
||||
`system.html#147 <system.html#147>`_
|
||||
|
|
@ -2020,7 +2019,7 @@ Index
|
|||
`endb.html#102 <endb.html#102>`_
|
||||
|
||||
`EndOfFile`:idx:
|
||||
* `system.html#513 <system.html#513>`_
|
||||
* `system.html#514 <system.html#514>`_
|
||||
* `lexbase.html#101 <lexbase.html#101>`_
|
||||
|
||||
`endsWith`:idx:
|
||||
|
|
@ -2132,7 +2131,7 @@ Index
|
|||
|
||||
`escape`:idx:
|
||||
* `manual.html#133 <manual.html#133>`_
|
||||
* `strutils.html#163 <strutils.html#163>`_
|
||||
* `strutils.html#162 <strutils.html#162>`_
|
||||
* `xmltree.html#122 <xmltree.html#122>`_
|
||||
|
||||
`escape sequences`:idx:
|
||||
|
|
@ -2373,7 +2372,7 @@ Index
|
|||
`mysql.html#218 <mysql.html#218>`_
|
||||
|
||||
`fileHandle`:idx:
|
||||
`system.html#538 <system.html#538>`_
|
||||
`system.html#539 <system.html#539>`_
|
||||
|
||||
`fileNewer`:idx:
|
||||
`os.html#119 <os.html#119>`_
|
||||
|
|
@ -2433,7 +2432,7 @@ Index
|
|||
`macros.html#130 <macros.html#130>`_
|
||||
|
||||
`FlushFile`:idx:
|
||||
`system.html#515 <system.html#515>`_
|
||||
`system.html#516 <system.html#516>`_
|
||||
|
||||
`for`:idx:
|
||||
* `manual.html#214 <manual.html#214>`_
|
||||
|
|
@ -2594,10 +2593,10 @@ Index
|
|||
`os.html#162 <os.html#162>`_
|
||||
|
||||
`getFilePos`:idx:
|
||||
`system.html#535 <system.html#535>`_
|
||||
`system.html#536 <system.html#536>`_
|
||||
|
||||
`getFileSize`:idx:
|
||||
* `system.html#527 <system.html#527>`_
|
||||
* `system.html#528 <system.html#528>`_
|
||||
* `os.html#171 <os.html#171>`_
|
||||
|
||||
`getFreeMem`:idx:
|
||||
|
|
@ -2866,13 +2865,13 @@ Index
|
|||
`hr`:idx:
|
||||
`xmlgen.html#140 <xmlgen.html#140>`_
|
||||
|
||||
`html`:idx:
|
||||
`xmlgen.html#139 <xmlgen.html#139>`_
|
||||
|
||||
`HTML`:idx:
|
||||
* `parsexml.html#102 <parsexml.html#102>`_
|
||||
* `xmlgen.html#102 <xmlgen.html#102>`_
|
||||
|
||||
`html`:idx:
|
||||
`xmlgen.html#139 <xmlgen.html#139>`_
|
||||
|
||||
`htmlTag`:idx:
|
||||
* `htmlparser.html#105 <htmlparser.html#105>`_
|
||||
* `htmlparser.html#106 <htmlparser.html#106>`_
|
||||
|
|
@ -2914,24 +2913,24 @@ Index
|
|||
`ident=`:idx:
|
||||
`macros.html#132 <macros.html#132>`_
|
||||
|
||||
`IdentChars`:idx:
|
||||
`strutils.html#105 <strutils.html#105>`_
|
||||
|
||||
`identChars`:idx:
|
||||
`pegs.html#132 <pegs.html#132>`_
|
||||
|
||||
`IdentChars`:idx:
|
||||
`strutils.html#105 <strutils.html#105>`_
|
||||
|
||||
`identifier`:idx:
|
||||
`manual.html#105 <manual.html#105>`_
|
||||
|
||||
`Identifiers`:idx:
|
||||
`manual.html#116 <manual.html#116>`_
|
||||
|
||||
`IdentStartChars`:idx:
|
||||
`strutils.html#106 <strutils.html#106>`_
|
||||
|
||||
`identStartChars`:idx:
|
||||
`pegs.html#133 <pegs.html#133>`_
|
||||
|
||||
`IdentStartChars`:idx:
|
||||
`strutils.html#106 <strutils.html#106>`_
|
||||
|
||||
`if`:idx:
|
||||
`manual.html#189 <manual.html#189>`_
|
||||
|
||||
|
|
@ -3018,7 +3017,7 @@ Index
|
|||
* `db_sqlite.html#115 <db_sqlite.html#115>`_
|
||||
|
||||
`insertSep`:idx:
|
||||
`strutils.html#162 <strutils.html#162>`_
|
||||
`strutils.html#161 <strutils.html#161>`_
|
||||
|
||||
`int`:idx:
|
||||
`system.html#101 <system.html#101>`_
|
||||
|
|
@ -3208,8 +3207,8 @@ Index
|
|||
`nimrodc.html#103 <nimrodc.html#103>`_
|
||||
|
||||
`lines`:idx:
|
||||
* `system.html#536 <system.html#536>`_
|
||||
* `system.html#537 <system.html#537>`_
|
||||
* `system.html#538 <system.html#538>`_
|
||||
|
||||
`lineTrace`:idx:
|
||||
`nimrodc.html#105 <nimrodc.html#105>`_
|
||||
|
|
@ -3233,13 +3232,13 @@ Index
|
|||
`LoadLib`:idx:
|
||||
`dynlib.html#102 <dynlib.html#102>`_
|
||||
|
||||
`loadXML`:idx:
|
||||
`xmldomparser.html#104 <xmldomparser.html#104>`_
|
||||
|
||||
`loadXml`:idx:
|
||||
* `xmlparser.html#104 <xmlparser.html#104>`_
|
||||
* `xmlparser.html#105 <xmlparser.html#105>`_
|
||||
|
||||
`loadXML`:idx:
|
||||
`xmldomparser.html#104 <xmldomparser.html#104>`_
|
||||
|
||||
`loadXMLFile`:idx:
|
||||
`xmldomparser.html#105 <xmldomparser.html#105>`_
|
||||
|
||||
|
|
@ -3965,12 +3964,12 @@ Index
|
|||
`nan`:idx:
|
||||
`system.html#441 <system.html#441>`_
|
||||
|
||||
`natural`:idx:
|
||||
`pegs.html#135 <pegs.html#135>`_
|
||||
|
||||
`Natural`:idx:
|
||||
`system.html#134 <system.html#134>`_
|
||||
|
||||
`natural`:idx:
|
||||
`pegs.html#135 <pegs.html#135>`_
|
||||
|
||||
`neginf`:idx:
|
||||
`system.html#440 <system.html#440>`_
|
||||
|
||||
|
|
@ -4056,13 +4055,13 @@ Index
|
|||
`newIntLitNode`:idx:
|
||||
`macros.html#142 <macros.html#142>`_
|
||||
|
||||
`newLine`:idx:
|
||||
`pegs.html#122 <pegs.html#122>`_
|
||||
|
||||
`newline`:idx:
|
||||
* `manual.html#121 <manual.html#121>`_
|
||||
* `pegs.html#121 <pegs.html#121>`_
|
||||
|
||||
`newLine`:idx:
|
||||
`pegs.html#122 <pegs.html#122>`_
|
||||
|
||||
`NewLines`:idx:
|
||||
`lexbase.html#102 <lexbase.html#102>`_
|
||||
|
||||
|
|
@ -4246,12 +4245,12 @@ Index
|
|||
`ord`:idx:
|
||||
`system.html#182 <system.html#182>`_
|
||||
|
||||
`ordinal`:idx:
|
||||
`tut1.html#114 <tut1.html#114>`_
|
||||
|
||||
`Ordinal`:idx:
|
||||
`system.html#114 <system.html#114>`_
|
||||
|
||||
`ordinal`:idx:
|
||||
`tut1.html#114 <tut1.html#114>`_
|
||||
|
||||
`Ordinal types`:idx:
|
||||
`manual.html#142 <manual.html#142>`_
|
||||
|
||||
|
|
@ -4313,12 +4312,12 @@ Index
|
|||
`parseColor`:idx:
|
||||
`colors.html#249 <colors.html#249>`_
|
||||
|
||||
`parseFloat`:idx:
|
||||
`parseutils.html#111 <parseutils.html#111>`_
|
||||
|
||||
`ParseFloat`:idx:
|
||||
`strutils.html#144 <strutils.html#144>`_
|
||||
|
||||
`parseFloat`:idx:
|
||||
`parseutils.html#111 <parseutils.html#111>`_
|
||||
|
||||
`parseHex`:idx:
|
||||
`parseutils.html#101 <parseutils.html#101>`_
|
||||
|
||||
|
|
@ -4332,17 +4331,17 @@ Index
|
|||
`parseIdent`:idx:
|
||||
`parseutils.html#103 <parseutils.html#103>`_
|
||||
|
||||
`ParseInt`:idx:
|
||||
`strutils.html#142 <strutils.html#142>`_
|
||||
|
||||
`parseInt`:idx:
|
||||
`parseutils.html#109 <parseutils.html#109>`_
|
||||
|
||||
`ParseInt`:idx:
|
||||
`strutils.html#142 <strutils.html#142>`_
|
||||
|
||||
`parseOct`:idx:
|
||||
`parseutils.html#102 <parseutils.html#102>`_
|
||||
|
||||
`ParseOctInt`:idx:
|
||||
`strutils.html#159 <strutils.html#159>`_
|
||||
`strutils.html#158 <strutils.html#158>`_
|
||||
|
||||
`parsePeg`:idx:
|
||||
`pegs.html#154 <pegs.html#154>`_
|
||||
|
|
@ -4644,8 +4643,7 @@ Index
|
|||
`httpclient.html#109 <httpclient.html#109>`_
|
||||
|
||||
`PostgreSQL`:idx:
|
||||
* `db_postgres.html#101 <db_postgres.html#101>`_
|
||||
* `db_sqlite.html#101 <db_sqlite.html#101>`_
|
||||
`db_postgres.html#101 <db_postgres.html#101>`_
|
||||
|
||||
`pow`:idx:
|
||||
`math.html#132 <math.html#132>`_
|
||||
|
|
@ -4878,23 +4876,23 @@ Index
|
|||
`streams.html#106 <streams.html#106>`_
|
||||
|
||||
`readBuffer`:idx:
|
||||
`system.html#530 <system.html#530>`_
|
||||
`system.html#531 <system.html#531>`_
|
||||
|
||||
`ReadBytes`:idx:
|
||||
`system.html#528 <system.html#528>`_
|
||||
`system.html#529 <system.html#529>`_
|
||||
|
||||
`readChar`:idx:
|
||||
* `system.html#514 <system.html#514>`_
|
||||
* `system.html#515 <system.html#515>`_
|
||||
* `streams.html#105 <streams.html#105>`_
|
||||
|
||||
`ReadChars`:idx:
|
||||
`system.html#529 <system.html#529>`_
|
||||
`system.html#530 <system.html#530>`_
|
||||
|
||||
`readData`:idx:
|
||||
`cgi.html#109 <cgi.html#109>`_
|
||||
|
||||
`readFile`:idx:
|
||||
`system.html#516 <system.html#516>`_
|
||||
`system.html#517 <system.html#517>`_
|
||||
|
||||
`readFloat32`:idx:
|
||||
`streams.html#111 <streams.html#111>`_
|
||||
|
|
@ -4915,7 +4913,7 @@ Index
|
|||
`streams.html#107 <streams.html#107>`_
|
||||
|
||||
`readLine`:idx:
|
||||
* `system.html#524 <system.html#524>`_
|
||||
* `system.html#525 <system.html#525>`_
|
||||
* `streams.html#114 <streams.html#114>`_
|
||||
|
||||
`readRow`:idx:
|
||||
|
|
@ -5041,6 +5039,9 @@ Index
|
|||
* `regexprs.html#117 <regexprs.html#117>`_
|
||||
* `re.html#131 <re.html#131>`_
|
||||
|
||||
`reopen`:idx:
|
||||
`system.html#511 <system.html#511>`_
|
||||
|
||||
`repeatChar`:idx:
|
||||
`strutils.html#147 <strutils.html#147>`_
|
||||
|
||||
|
|
@ -5256,7 +5257,7 @@ Index
|
|||
`os.html#163 <os.html#163>`_
|
||||
|
||||
`setFilePos`:idx:
|
||||
`system.html#534 <system.html#534>`_
|
||||
`system.html#535 <system.html#535>`_
|
||||
|
||||
`SET_FLAG`:idx:
|
||||
`mysql.html#135 <mysql.html#135>`_
|
||||
|
|
@ -5378,6 +5379,9 @@ Index
|
|||
* `db_postgres.html#106 <db_postgres.html#106>`_
|
||||
* `db_sqlite.html#106 <db_sqlite.html#106>`_
|
||||
|
||||
`SQLite`:idx:
|
||||
`db_sqlite.html#101 <db_sqlite.html#101>`_
|
||||
|
||||
`sqlite3_aggregate_context`:idx:
|
||||
`sqlite3.html#261 <sqlite3.html#261>`_
|
||||
|
||||
|
|
@ -6401,7 +6405,7 @@ Index
|
|||
`system.html#411 <system.html#411>`_
|
||||
|
||||
`toBin`:idx:
|
||||
`strutils.html#161 <strutils.html#161>`_
|
||||
`strutils.html#160 <strutils.html#160>`_
|
||||
|
||||
`TObject`:idx:
|
||||
`system.html#136 <system.html#136>`_
|
||||
|
|
@ -6421,7 +6425,7 @@ Index
|
|||
* `unicode.html#111 <unicode.html#111>`_
|
||||
|
||||
`toOct`:idx:
|
||||
`strutils.html#160 <strutils.html#160>`_
|
||||
`strutils.html#159 <strutils.html#159>`_
|
||||
|
||||
`toOctal`:idx:
|
||||
`strutils.html#125 <strutils.html#125>`_
|
||||
|
|
@ -6722,10 +6726,10 @@ Index
|
|||
`cgi.html#110 <cgi.html#110>`_
|
||||
|
||||
`validEmailAddress`:idx:
|
||||
`strutils.html#164 <strutils.html#164>`_
|
||||
`strutils.html#163 <strutils.html#163>`_
|
||||
|
||||
`validIdentifier`:idx:
|
||||
`strutils.html#165 <strutils.html#165>`_
|
||||
`strutils.html#164 <strutils.html#164>`_
|
||||
|
||||
`Var`:idx:
|
||||
`manual.html#187 <manual.html#187>`_
|
||||
|
|
@ -6788,32 +6792,32 @@ Index
|
|||
`times.html#118 <times.html#118>`_
|
||||
|
||||
`write`:idx:
|
||||
* `system.html#517 <system.html#517>`_
|
||||
* `system.html#518 <system.html#518>`_
|
||||
* `system.html#519 <system.html#519>`_
|
||||
* `system.html#520 <system.html#520>`_
|
||||
* `system.html#521 <system.html#521>`_
|
||||
* `system.html#522 <system.html#522>`_
|
||||
* `system.html#523 <system.html#523>`_
|
||||
* `system.html#524 <system.html#524>`_
|
||||
* `streams.html#103 <streams.html#103>`_
|
||||
* `streams.html#104 <streams.html#104>`_
|
||||
* `ropes.html#118 <ropes.html#118>`_
|
||||
|
||||
`writeBuffer`:idx:
|
||||
`system.html#533 <system.html#533>`_
|
||||
`system.html#534 <system.html#534>`_
|
||||
|
||||
`writeBytes`:idx:
|
||||
`system.html#531 <system.html#531>`_
|
||||
`system.html#532 <system.html#532>`_
|
||||
|
||||
`writeChars`:idx:
|
||||
`system.html#532 <system.html#532>`_
|
||||
`system.html#533 <system.html#533>`_
|
||||
|
||||
`writeContentType`:idx:
|
||||
`cgi.html#144 <cgi.html#144>`_
|
||||
|
||||
`writeln`:idx:
|
||||
* `system.html#525 <system.html#525>`_
|
||||
* `system.html#526 <system.html#526>`_
|
||||
* `system.html#527 <system.html#527>`_
|
||||
|
||||
`WriteStyled`:idx:
|
||||
`terminal.html#112 <terminal.html#112>`_
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue