Merge remote-tracking branch 'origin/devel' into initallocator-fix

This commit is contained in:
Jacek Sieka 2016-10-12 21:28:40 +08:00
commit 2748da1496
255 changed files with 7536 additions and 4040 deletions

View file

@ -226,6 +226,7 @@ proc high*[T](x: T): T {.magic: "High", noSideEffect.}
## var arr = [1,2,3,4,5,6,7]
## high(arr) #=> 6
## high(2) #=> 9223372036854775807
## high(int) #=> 9223372036854775807
proc low*[T](x: T): T {.magic: "Low", noSideEffect.}
## returns the lowest possible index of an array, a sequence, a string or
@ -236,6 +237,7 @@ proc low*[T](x: T): T {.magic: "Low", noSideEffect.}
## var arr = [1,2,3,4,5,6,7]
## low(arr) #=> 0
## low(2) #=> -9223372036854775808
## low(int) #=> -9223372036854775808
type
range*{.magic: "Range".}[T] ## Generic type to construct range types.
@ -603,7 +605,7 @@ proc `<`*[T](x: Ordinal[T]): T {.magic: "UnaryLt", noSideEffect.}
## unary ``<`` that can be used for nice looking excluding ranges:
##
## .. code-block:: nim
## for i in 0 .. <10: echo i
## for i in 0 .. <10: echo i #=> 0 1 2 3 4 5 6 7 8 9
##
## Semantically this is the same as ``pred``.
@ -889,8 +891,8 @@ proc `shl` *(x, y: int64): int64 {.magic: "ShlI", noSideEffect.}
## computes the `shift left` operation of `x` and `y`.
##
## .. code-block:: Nim
## 1'i32 shl 4 == 0x0000_0010
## 1'i64 shl 4 == 0x0000_0000_0000_0010
## 1'i32 shl 4 == 0x0000_0010
## 1'i64 shl 4 == 0x0000_0000_0000_0010
proc `and` *(x, y: int): int {.magic: "BitandI", noSideEffect.}
proc `and` *(x, y: int8): int8 {.magic: "BitandI", noSideEffect.}
@ -1313,20 +1315,20 @@ when defined(boehmgc):
when taintMode:
type TaintedString* = distinct string ## a distinct string type that
## is `tainted`:idx:. It is an alias for
## is `tainted`:idx:, see `taint mode
## <manual.html#taint-mode>`_ for
## details. It is an alias for
## ``string`` if the taint mode is not
## turned on. Use the ``-d:taintMode``
## command line switch to turn the taint
## mode on.
## turned on.
proc len*(s: TaintedString): int {.borrow.}
else:
type TaintedString* = string ## a distinct string type that
## is `tainted`:idx:. It is an alias for
## is `tainted`:idx:, see `taint mode
## <manual.html#taint-mode>`_ for
## details. It is an alias for
## ``string`` if the taint mode is not
## turned on. Use the ``-d:taintMode``
## command line switch to turn the taint
## mode on.
## turned on.
when defined(profiler):
proc nimProfile() {.compilerProc, noinline.}
@ -1410,7 +1412,7 @@ proc del*[T](x: var seq[T], i: Natural) {.noSideEffect.} =
## This is an O(1) operation.
##
## .. code-block:: nim
## var i = @[1,2,3,4,5]
## var i = @[1, 2, 3, 4, 5]
## i.del(2) #=> @[1, 2, 5, 4]
let xl = x.len - 1
shallowCopy(x[i], x[xl])
@ -1421,7 +1423,7 @@ proc delete*[T](x: var seq[T], i: Natural) {.noSideEffect.} =
## This is an O(n) operation.
##
## .. code-block:: nim
## var i = @[1,2,3,4,5]
## var i = @[1, 2, 3, 4, 5]
## i.delete(2) #=> @[1, 2, 4, 5]
template defaultImpl =
let xl = x.len
@ -1440,8 +1442,8 @@ proc insert*[T](x: var seq[T], item: T, i = 0.Natural) {.noSideEffect.} =
## inserts `item` into `x` at position `i`.
##
## .. code-block:: nim
## var i = @[1,2,3,4,5]
## i.insert(2,4) #=> @[1, 2, 3, 4, 2, 5]
## var i = @[1, 2, 3, 4, 5]
## i.insert(2, 4) #=> @[1, 2, 3, 4, 2, 5]
template defaultImpl =
let xl = x.len
setLen(x, xl+1)
@ -1465,8 +1467,8 @@ proc repr*[T](x: T): string {.magic: "Repr", noSideEffect.}
## debugging tool.
##
## .. code-block:: nim
## var s: seq[string] = @["test2","test2"]
## var i = @[1,2,3,4,5]
## var s: seq[string] = @["test2", "test2"]
## var i = @[1, 2, 3, 4, 5]
## repr(s) #=> 0x1055eb050[0x1055ec050"test2", 0x1055ec078"test2"]
## repr(i) #=> 0x1055ed050[1, 2, 3, 4, 5]
@ -1519,7 +1521,7 @@ type # these work for most platforms:
## This is the same as the type ``double`` in *C*.
clongdouble* {.importc: "long double", nodecl.} = BiggestFloat
## This is the same as the type ``long double`` in *C*.
## This C type is not supported by Nim's code generator
## This C type is not supported by Nim's code generator.
cuchar* {.importc: "unsigned char", nodecl.} = char
## This is the same as the type ``unsigned char`` in *C*.
@ -1822,18 +1824,15 @@ const
NimMajor*: int = 0
## is the major number of Nim's version.
NimMinor*: int = 14
NimMinor*: int = 15
## is the minor number of Nim's version.
NimPatch*: int = 3
NimPatch*: int = 1
## is the patch number of Nim's version.
NimVersion*: string = $NimMajor & "." & $NimMinor & "." & $NimPatch
## is the version of Nim as a string.
{.deprecated: [TEndian: Endianness, NimrodVersion: NimVersion,
NimrodMajor: NimMajor, NimrodMinor: NimMinor, NimrodPatch: NimPatch].}
# GC interface:
when not defined(nimscript) and hasAlloc:
@ -2654,12 +2653,11 @@ when not defined(JS): #and not defined(nimscript):
when defined(nimscript):
proc readFile*(filename: string): string {.tags: [ReadIOEffect], benign.}
## Opens a file named `filename` for reading.
##
## Then calls `readAll <#readAll>`_ and closes the file afterwards.
## Returns the string. Raises an IO exception in case of an error. If
## you need to call this inside a compile time macro you can use
## `staticRead <#staticRead>`_.
## Opens a file named `filename` for reading, calls `readAll
## <#readAll>`_ and closes the file afterwards. Returns the string.
## Raises an IO exception in case of an error. If # you need to call
## this inside a compile time macro you can use `staticRead
## <#staticRead>`_.
proc writeFile*(filename, content: string) {.tags: [WriteIOEffect], benign.}
## Opens a file named `filename` for writing. Then writes the
@ -2733,7 +2731,7 @@ when not defined(JS): #and not defined(nimscript):
proc setStdIoUnbuffered*() {.tags: [], benign.}
## Configures `stdin`, `stdout` and `stderr` to be unbuffered.
proc close*(f: File) {.tags: [].}
proc close*(f: File) {.tags: [], gcsafe.}
## Closes the file.
proc endOfFile*(f: File): bool {.tags: [], benign.}
@ -2795,7 +2793,7 @@ when not defined(JS): #and not defined(nimscript):
proc writeLine*[Ty](f: File, x: varargs[Ty, `$`]) {.inline,
tags: [WriteIOEffect], benign.}
## writes the values `x` to `f` and then writes "\n".
## writes the values `x` to `f` and then writes "\\n".
## May throw an IO exception.
proc getFileSize*(f: File): int64 {.tags: [ReadIOEffect], benign.}
@ -2926,14 +2924,14 @@ when not defined(JS): #and not defined(nimscript):
## allows you to override the behaviour of your application when CTRL+C
## is pressed. Only one such hook is supported.
proc writeStackTrace*() {.tags: [WriteIOEffect].}
proc writeStackTrace*() {.tags: [WriteIOEffect], gcsafe.}
## writes the current stack trace to ``stderr``. This is only works
## for debug builds.
when hostOS != "standalone":
proc getStackTrace*(): string
proc getStackTrace*(): string {.gcsafe.}
## gets the current stack trace. This only works for debug builds.
proc getStackTrace*(e: ref Exception): string
proc getStackTrace*(e: ref Exception): string {.gcsafe.}
## gets the stack trace associated with `e`, which is the stack that
## lead to the ``raise`` statement. This only works for debug builds.