Merge branch 'devel' into araq-big-refactoring

This commit is contained in:
Andreas Rumpf
2018-05-28 12:13:50 +02:00
8 changed files with 36 additions and 12 deletions

View File

@@ -76,6 +76,8 @@
- The `terminal` module now exports additional procs for generating ANSI color
codes as strings.
- Added the parameter ``val`` for the ``CritBitTree[int].inc`` proc.
- An exception raised from ``test`` block of ``unittest`` now show its type in
error message
### Language additions

View File

@@ -181,7 +181,7 @@ Conventions for multi-line statements and expressions
LongTupleA = tuple[wordyTupleMemberOne: int, wordyTupleMemberTwo: string,
wordyTupleMemberThree: float]
- Similarly, any procedure and procedure type declarations that are longer#
- Similarly, any procedure and procedure type declarations that are longer
than one line should do the same thing.
.. code-block:: nim
@@ -198,4 +198,4 @@ Conventions for multi-line statements and expressions
.. code-block:: nim
startProcess(nimExecutable, currentDirectory, compilerArguments
environment, processOptions)
environment, processOptions)

View File

@@ -803,6 +803,7 @@ proc acceptAddr*(server: Socket, client: var Socket, address: var string,
else:
address = ret[1]
client.fd = sock
client.domain = getSockDomain(sock)
client.isBuffered = server.isBuffered
# Handle SSL.

View File

@@ -70,7 +70,8 @@ when defined(windows):
proc existsFile*(filename: string): bool {.rtl, extern: "nos$1",
tags: [ReadDirEffect].} =
## Returns true if the file exists, false otherwise.
## Returns true if `filename` exists and is a regular file or symlink.
## (directories, device files, named pipes and sockets return false)
when defined(windows):
when useWinUnicode:
wrapUnary(a, getFileAttributesW, filename)

View File

@@ -462,6 +462,8 @@ template suite*(name, body) {.dirty.} =
finally:
suiteEnded()
template exceptionTypeName(e: typed): string = $e.name
template test*(name, body) {.dirty.} =
## Define a single test case identified by `name`.
##
@@ -476,7 +478,7 @@ template test*(name, body) {.dirty.} =
## .. code-block::
##
## [OK] roses are red
bind shouldRun, checkpoints, formatters, ensureInitialized, testEnded
bind shouldRun, checkpoints, formatters, ensureInitialized, testEnded, exceptionTypeName
ensureInitialized()
@@ -495,8 +497,10 @@ template test*(name, body) {.dirty.} =
except:
when not defined(js):
checkpoint("Unhandled exception: " & getCurrentExceptionMsg())
var stackTrace {.inject.} = getCurrentException().getStackTrace()
let e = getCurrentException()
let eTypeDesc = "[" & exceptionTypeName(e) & "]"
checkpoint("Unhandled exception: " & getCurrentExceptionMsg() & " " & eTypeDesc)
var stackTrace {.inject.} = e.getStackTrace()
fail()
finally:

View File

@@ -162,6 +162,7 @@ proc allocFast(r: var MemRegion; size: int): pointer =
return pointer(it)
prev = it
it = it.next
let size = roundup(size, MemAlign)
if size > r.remaining:
allocSlowPath(r, size)
sysAssert(size <= r.remaining, "size <= r.remaining")
@@ -288,11 +289,13 @@ proc rawNewSeq(r: var MemRegion, typ: PNimType, size: int): pointer =
result = res +! sizeof(SeqHeader)
proc newObj(typ: PNimType, size: int): pointer {.compilerRtl.} =
sysAssert typ.kind notin {tySequence, tyString}, "newObj cannot be used to construct seqs"
result = rawNewObj(tlRegion, typ, size)
zeroMem(result, size)
when defined(memProfiler): nimProfile(size)
proc newObjNoInit(typ: PNimType, size: int): pointer {.compilerRtl.} =
sysAssert typ.kind notin {tySequence, tyString}, "newObj cannot be used to construct seqs"
result = rawNewObj(tlRegion, typ, size)
when defined(memProfiler): nimProfile(size)

View File

@@ -561,13 +561,16 @@ else:
when not declared(nimNewSeqOfCap):
proc nimNewSeqOfCap(typ: PNimType, cap: int): pointer {.compilerproc.} =
let s = addInt(mulInt(cap, typ.base.size), GenericSeqSize)
when declared(newObjNoInit):
result = if ntfNoRefs in typ.base.flags: newObjNoInit(typ, s) else: newObj(typ, s)
when defined(gcRegions):
result = newStr(typ, cap, ntfNoRefs notin typ.base.flags)
else:
result = newObj(typ, s)
cast[PGenericSeq](result).len = 0
cast[PGenericSeq](result).reserved = cap
let s = addInt(mulInt(cap, typ.base.size), GenericSeqSize)
when declared(newObjNoInit):
result = if ntfNoRefs in typ.base.flags: newObjNoInit(typ, s) else: newObj(typ, s)
else:
result = newObj(typ, s)
cast[PGenericSeq](result).len = 0
cast[PGenericSeq](result).reserved = cap
{.pop.}

View File

@@ -0,0 +1,10 @@
discard """
exitcode: 1
outputsub: '''exception type is [ValueError]'''
"""
import unittest
suite "exception from test":
test "show exception type":
raise newException(ValueError, "exception type is")