'nimfix' improvements; FdSet is TFdSet again

This commit is contained in:
Araq 2014-09-08 08:46:35 +02:00
commit 7333237be6
11 changed files with 46 additions and 54 deletions

View file

@ -22,10 +22,8 @@ Options:
--overwriteFiles:on|off overwrite the original nim files. --overwriteFiles:on|off overwrite the original nim files.
DEFAULT is ON! DEFAULT is ON!
--checkExtern:on|off style check also extern names --checkExtern:on|off style check also extern names
--styleCheck:none|confirm|auto performs style checking for identifiers --styleCheck:on|off performs style checking for identifiers
and suggests an alternative spelling. If and suggests an alternative spelling.
'auto', it automatically corrects the
spelling. If 'confirm' it asks the user.
In addition, all command line options of Nim are supported. In addition, all command line options of Nim are supported.
""" """
@ -65,11 +63,9 @@ proc processCmdLine*(pass: TCmdLinePass, cmd: string) =
else: localError(gCmdLineInfo, errOnOrOffExpected) else: localError(gCmdLineInfo, errOnOrOffExpected)
of "stylecheck": of "stylecheck":
case p.val.normalize case p.val.normalize
of "none": gStyleCheck = StyleCheck.None of "off": gStyleCheck = StyleCheck.None
of "confirm": gStyleCheck = StyleCheck.Confirm of "on": gStyleCheck = StyleCheck.Auto
of "auto": gStyleCheck = StyleCheck.Auto else: localError(gCmdLineInfo, errOnOrOffExpected)
else: localError(gCmdLineInfo, errGenerated,
"'none', 'confirm' or 'auto' expected")
else: else:
processSwitch(pass, p) processSwitch(pass, p)
of cmdArgument: of cmdArgument:

View file

@ -29,11 +29,10 @@ type
PGen = ref TGen PGen = ref TGen
proc overwriteFiles*() = proc overwriteFiles*() =
let overWrite = options.getConfigVar("pretty.overwrite").normalize != "off"
let doStrip = options.getConfigVar("pretty.strip").normalize == "on" let doStrip = options.getConfigVar("pretty.strip").normalize == "on"
for i in 0 .. high(gSourceFiles): for i in 0 .. high(gSourceFiles):
if not gSourceFiles[i].dirty: continue if not gSourceFiles[i].dirty: continue
let newFile = if overWrite: gSourceFiles[i].fullpath let newFile = if gOverWrite: gSourceFiles[i].fullpath
else: gSourceFiles[i].fullpath.changeFileExt(".pretty.nim") else: gSourceFiles[i].fullpath.changeFileExt(".pretty.nim")
try: try:
var f = open(newFile, fmWrite) var f = open(newFile, fmWrite)
@ -102,6 +101,7 @@ proc checkStyle(info: TLineInfo, s: string, k: TSymKind) =
message(info, hintName, beau) message(info, hintName, beau)
proc checkDef*(n: PNode; s: PSym) = proc checkDef*(n: PNode; s: PSym) =
if gStyleCheck == StyleCheck.None: return
# operators stay as they are: # operators stay as they are:
if s.kind in {skResult, skTemp} or s.name.s[0] notin prettybase.Letters: if s.kind in {skResult, skTemp} or s.name.s[0] notin prettybase.Letters:
return return
@ -184,7 +184,6 @@ proc myOpen(module: PSym): PPassContext =
var g: PGen var g: PGen
new(g) new(g)
g.module = module g.module = module
gCheckExtern = options.getConfigVar("pretty.checkextern").normalize == "on"
result = g result = g
const prettyPass* = makePass(open = myOpen, process = processSym) const prettyPass* = makePass(open = myOpen, process = processSym)

View file

@ -388,7 +388,7 @@ type
final, pure.} = object ## struct timeval final, pure.} = object ## struct timeval
tv_sec*: int ## Seconds. tv_sec*: int ## Seconds.
tv_usec*: int ## Microseconds. tv_usec*: int ## Microseconds.
FdSet* {.importc: "fd_set", header: "<sys/select.h>", TFdSet* {.importc: "fd_set", header: "<sys/select.h>",
final, pure.} = object final, pure.} = object
Tmcontext* {.importc: "mcontext_t", header: "<ucontext.h>", Tmcontext* {.importc: "mcontext_t", header: "<ucontext.h>",
final, pure.} = object final, pure.} = object
@ -563,7 +563,7 @@ type
{.deprecated: [TSockaddr_in: Sockaddr_in, TAddrinfo: AddrInfo, {.deprecated: [TSockaddr_in: Sockaddr_in, TAddrinfo: AddrInfo,
TSockAddr: SockAddr, TSockLen: SockLen, TTimeval: Timeval, TSockAddr: SockAddr, TSockLen: SockLen, TTimeval: Timeval,
TFdSet: FdSet, Thostent: Hostent, TServent: Servent, Thostent: Hostent, TServent: Servent,
TInAddr: InAddr].} TInAddr: InAddr].}
var var
@ -2379,16 +2379,16 @@ proc sched_yield*(): cint {.importc, header: "<sched.h>".}
proc strerror*(errnum: cint): cstring {.importc, header: "<string.h>".} proc strerror*(errnum: cint): cstring {.importc, header: "<string.h>".}
proc hstrerror*(herrnum: cint): cstring {.importc, header: "<netdb.h>".} proc hstrerror*(herrnum: cint): cstring {.importc, header: "<netdb.h>".}
proc FD_CLR*(a1: cint, a2: var FdSet) {.importc, header: "<sys/select.h>".} proc FD_CLR*(a1: cint, a2: var TFdSet) {.importc, header: "<sys/select.h>".}
proc FD_ISSET*(a1: cint | SocketHandle, a2: var FdSet): cint {. proc FD_ISSET*(a1: cint | SocketHandle, a2: var TFdSet): cint {.
importc, header: "<sys/select.h>".} importc, header: "<sys/select.h>".}
proc fdSet*(a1: cint | SocketHandle, a2: var FdSet) {. proc fdSet*(a1: cint | SocketHandle, a2: var TFdSet) {.
importc: "FD_SET", header: "<sys/select.h>".} importc: "FD_SET", header: "<sys/select.h>".}
proc FD_ZERO*(a1: var FdSet) {.importc, header: "<sys/select.h>".} proc FD_ZERO*(a1: var TFdSet) {.importc, header: "<sys/select.h>".}
proc pselect*(a1: cint, a2, a3, a4: ptr FdSet, a5: ptr Ttimespec, proc pselect*(a1: cint, a2, a3, a4: ptr TFdSet, a5: ptr Ttimespec,
a6: var Tsigset): cint {.importc, header: "<sys/select.h>".} a6: var Tsigset): cint {.importc, header: "<sys/select.h>".}
proc select*(a1: cint | SocketHandle, a2, a3, a4: ptr FdSet, a5: ptr Timeval): cint {. proc select*(a1: cint | SocketHandle, a2, a3, a4: ptr TFdSet, a5: ptr Timeval): cint {.
importc, header: "<sys/select.h>".} importc, header: "<sys/select.h>".}
when hasSpawnH: when hasSpawnH:

View file

@ -1,6 +1,6 @@
# #
# #
# Nimrod's Runtime Library # Nim's Runtime Library
# (c) Copyright 2014 Dominik Picheta # (c) Copyright 2014 Dominik Picheta
# See the file "copying.txt", included in this # See the file "copying.txt", included in this
# distribution, for details about the copyright. # distribution, for details about the copyright.

View file

@ -91,10 +91,10 @@ import sockets, os
## getSocket(s).accept(client) ## getSocket(s).accept(client)
when defined(windows): when defined(windows):
from winlean import TimeVal, SocketHandle, FdSet, FD_ZERO, FD_SET, from winlean import TimeVal, SocketHandle, TFdSet, FD_ZERO, FD_SET,
fdSet, FD_ISSET, select fdSet, FD_ISSET, select
else: else:
from posix import TimeVal, SocketHandle, FdSet, FD_ZERO, FD_SET, from posix import TimeVal, SocketHandle, TFdSet, FD_ZERO, FD_SET,
fdSet, FD_ISSET, select fdSet, FD_ISSET, select
type type
@ -551,13 +551,13 @@ proc timeValFromMilliseconds(timeout = 500): Timeval =
result.tv_sec = seconds.int32 result.tv_sec = seconds.int32
result.tv_usec = ((timeout - seconds * 1000) * 1000).int32 result.tv_usec = ((timeout - seconds * 1000) * 1000).int32
proc createFdSet(fd: var FdSet, s: seq[Delegate], m: var int) = proc createFdSet(fd: var TFdSet, s: seq[Delegate], m: var int) =
FD_ZERO(fd) FD_ZERO(fd)
for i in items(s): for i in items(s):
m = max(m, int(i.fd)) m = max(m, int(i.fd))
fdSet(i.fd, fd) fdSet(i.fd, fd)
proc pruneSocketSet(s: var seq[Delegate], fd: var FdSet) = proc pruneSocketSet(s: var seq[Delegate], fd: var TFdSet) =
var i = 0 var i = 0
var L = s.len var L = s.len
while i < L: while i < L:
@ -572,7 +572,7 @@ proc select(readfds, writefds, exceptfds: var seq[Delegate],
timeout = 500): int = timeout = 500): int =
var tv {.noInit.}: Timeval = timeValFromMilliseconds(timeout) var tv {.noInit.}: Timeval = timeValFromMilliseconds(timeout)
var rd, wr, ex: FdSet var rd, wr, ex: TFdSet
var m = 0 var m = 0
createFdSet(rd, readfds, m) createFdSet(rd, readfds, m)
createFdSet(wr, writefds, m) createFdSet(wr, writefds, m)

View file

@ -883,13 +883,13 @@ elif not defined(useNimRtl):
else: else:
result = csystem(command) result = csystem(command)
proc createFdSet(fd: var FdSet, s: seq[Process], m: var int) = proc createFdSet(fd: var TFdSet, s: seq[Process], m: var int) =
FD_ZERO(fd) FD_ZERO(fd)
for i in items(s): for i in items(s):
m = max(m, int(i.outHandle)) m = max(m, int(i.outHandle))
fdSet(cint(i.outHandle), fd) fdSet(cint(i.outHandle), fd)
proc pruneProcessSet(s: var seq[Process], fd: var FdSet) = proc pruneProcessSet(s: var seq[Process], fd: var TFdSet) =
var i = 0 var i = 0
var L = s.len var L = s.len
while i < L: while i < L:
@ -905,7 +905,7 @@ elif not defined(useNimRtl):
tv.tv_sec = 0 tv.tv_sec = 0
tv.tv_usec = timeout * 1000 tv.tv_usec = timeout * 1000
var rd: FdSet var rd: TFdSet
var m = 0 var m = 0
createFdSet((rd), readfds, m) createFdSet((rd), readfds, m)

View file

@ -361,13 +361,13 @@ proc timeValFromMilliseconds(timeout = 500): Timeval =
result.tv_sec = seconds.int32 result.tv_sec = seconds.int32
result.tv_usec = ((timeout - seconds * 1000) * 1000).int32 result.tv_usec = ((timeout - seconds * 1000) * 1000).int32
proc createFdSet(fd: var FdSet, s: seq[SocketHandle], m: var int) = proc createFdSet(fd: var TFdSet, s: seq[SocketHandle], m: var int) =
FD_ZERO(fd) FD_ZERO(fd)
for i in items(s): for i in items(s):
m = max(m, int(i)) m = max(m, int(i))
fdSet(i, fd) fdSet(i, fd)
proc pruneSocketSet(s: var seq[SocketHandle], fd: var FdSet) = proc pruneSocketSet(s: var seq[SocketHandle], fd: var TFdSet) =
var i = 0 var i = 0
var L = s.len var L = s.len
while i < L: while i < L:
@ -388,7 +388,7 @@ proc select*(readfds: var seq[SocketHandle], timeout = 500): int =
## be read/written to or has errors (``exceptfds``). ## be read/written to or has errors (``exceptfds``).
var tv {.noInit.}: Timeval = timeValFromMilliseconds(timeout) var tv {.noInit.}: Timeval = timeValFromMilliseconds(timeout)
var rd: FdSet var rd: TFdSet
var m = 0 var m = 0
createFdSet((rd), readfds, m) createFdSet((rd), readfds, m)
@ -410,7 +410,7 @@ proc selectWrite*(writefds: var seq[SocketHandle],
## an unlimited time. ## an unlimited time.
var tv {.noInit.}: Timeval = timeValFromMilliseconds(timeout) var tv {.noInit.}: Timeval = timeValFromMilliseconds(timeout)
var wr: FdSet var wr: TFdSet
var m = 0 var m = 0
createFdSet((wr), writefds, m) createFdSet((wr), writefds, m)

View file

@ -218,7 +218,7 @@ elif not defined(nimdoc):
result.tv_sec = seconds.int32 result.tv_sec = seconds.int32
result.tv_usec = ((timeout - seconds * 1000) * 1000).int32 result.tv_usec = ((timeout - seconds * 1000) * 1000).int32
proc createFdSet(rd, wr: var FdSet, fds: Table[SocketHandle, SelectorKey], proc createFdSet(rd, wr: var TFdSet, fds: Table[SocketHandle, SelectorKey],
m: var int) = m: var int) =
FD_ZERO(rd); FD_ZERO(wr) FD_ZERO(rd); FD_ZERO(wr)
for k, v in pairs(fds): for k, v in pairs(fds):
@ -229,7 +229,7 @@ elif not defined(nimdoc):
m = max(m, int(k)) m = max(m, int(k))
FD_SET(k, wr) FD_SET(k, wr)
proc getReadyFDs(rd, wr: var FdSet, fds: Table[SocketHandle, SelectorKey]): proc getReadyFDs(rd, wr: var TFdSet, fds: Table[SocketHandle, SelectorKey]):
seq[ReadyInfo] = seq[ReadyInfo] =
result = @[] result = @[]
for k, v in pairs(fds): for k, v in pairs(fds):
@ -244,7 +244,7 @@ elif not defined(nimdoc):
seq[ReadyInfo] = seq[ReadyInfo] =
var tv {.noInit.}: TimeVal = timeValFromMilliseconds(timeout) var tv {.noInit.}: TimeVal = timeValFromMilliseconds(timeout)
var rd, wr: FdSet var rd, wr: TFdSet
var m = 0 var m = 0
createFdSet(rd, wr, fds, m) createFdSet(rd, wr, fds, m)

View file

@ -931,13 +931,13 @@ proc timeValFromMilliseconds(timeout = 500): Timeval =
result.tv_sec = seconds.int32 result.tv_sec = seconds.int32
result.tv_usec = ((timeout - seconds * 1000) * 1000).int32 result.tv_usec = ((timeout - seconds * 1000) * 1000).int32
proc createFdSet(fd: var FdSet, s: seq[Socket], m: var int) = proc createFdSet(fd: var TFdSet, s: seq[Socket], m: var int) =
FD_ZERO(fd) FD_ZERO(fd)
for i in items(s): for i in items(s):
m = max(m, int(i.fd)) m = max(m, int(i.fd))
fdSet(i.fd, fd) fdSet(i.fd, fd)
proc pruneSocketSet(s: var seq[Socket], fd: var FdSet) = proc pruneSocketSet(s: var seq[Socket], fd: var TFdSet) =
var i = 0 var i = 0
var L = s.len var L = s.len
while i < L: while i < L:
@ -987,7 +987,7 @@ proc select*(readfds, writefds, exceptfds: var seq[Socket],
var tv {.noInit.}: Timeval = timeValFromMilliseconds(timeout) var tv {.noInit.}: Timeval = timeValFromMilliseconds(timeout)
var rd, wr, ex: FdSet var rd, wr, ex: TFdSet
var m = 0 var m = 0
createFdSet((rd), readfds, m) createFdSet((rd), readfds, m)
createFdSet((wr), writefds, m) createFdSet((wr), writefds, m)
@ -1010,7 +1010,7 @@ proc select*(readfds, writefds: var seq[Socket],
return buffersFilled return buffersFilled
var tv {.noInit.}: Timeval = timeValFromMilliseconds(timeout) var tv {.noInit.}: Timeval = timeValFromMilliseconds(timeout)
var rd, wr: FdSet var rd, wr: TFdSet
var m = 0 var m = 0
createFdSet((rd), readfds, m) createFdSet((rd), readfds, m)
createFdSet((wr), writefds, m) createFdSet((wr), writefds, m)
@ -1034,7 +1034,7 @@ proc selectWrite*(writefds: var seq[Socket],
## an unlimited time. ## an unlimited time.
var tv {.noInit.}: Timeval = timeValFromMilliseconds(timeout) var tv {.noInit.}: Timeval = timeValFromMilliseconds(timeout)
var wr: FdSet var wr: TFdSet
var m = 0 var m = 0
createFdSet((wr), writefds, m) createFdSet((wr), writefds, m)
@ -1052,7 +1052,7 @@ proc select*(readfds: var seq[Socket], timeout = 500): int =
return buffersFilled return buffersFilled
var tv {.noInit.}: Timeval = timeValFromMilliseconds(timeout) var tv {.noInit.}: Timeval = timeValFromMilliseconds(timeout)
var rd: FdSet var rd: TFdSet
var m = 0 var m = 0
createFdSet((rd), readfds, m) createFdSet((rd), readfds, m)

View file

@ -423,7 +423,7 @@ type
h_length*: int16 h_length*: int16
h_addr_list*: cstringArray h_addr_list*: cstringArray
FdSet* = object TFdSet* = object
fd_count*: cint # unsigned fd_count*: cint # unsigned
fd_array*: array[0..FD_SETSIZE-1, SocketHandle] fd_array*: array[0..FD_SETSIZE-1, SocketHandle]
@ -444,7 +444,7 @@ type
{.deprecated: [TSockaddr_in: Sockaddr_in, TAddrinfo: AddrInfo, {.deprecated: [TSockaddr_in: Sockaddr_in, TAddrinfo: AddrInfo,
TSockAddr: SockAddr, TSockLen: SockLen, TTimeval: Timeval, TSockAddr: SockAddr, TSockLen: SockLen, TTimeval: Timeval,
TWSADATA: WSADATA, TFdSet: FdSet, Thostent: Hostent, TServent: Servent, TWSADATA: WSADATA, Thostent: Hostent, TServent: Servent,
TInAddr: InAddr, Tin6_addr: In6_addr, Tsockaddr_in6: Sockaddr_in6, TInAddr: InAddr, Tin6_addr: In6_addr, Tsockaddr_in6: Sockaddr_in6,
Tsockaddr_in6_old: Sockaddr_in6_old].} Tsockaddr_in6_old: Sockaddr_in6_old].}
@ -510,7 +510,7 @@ proc recv*(s: SocketHandle, buf: pointer, len, flags: cint): cint {.
proc recvfrom*(s: SocketHandle, buf: cstring, len, flags: cint, proc recvfrom*(s: SocketHandle, buf: cstring, len, flags: cint,
fromm: ptr SockAddr, fromlen: ptr SockLen): cint {. fromm: ptr SockAddr, fromlen: ptr SockLen): cint {.
stdcall, importc: "recvfrom", dynlib: ws2dll.} stdcall, importc: "recvfrom", dynlib: ws2dll.}
proc select*(nfds: cint, readfds, writefds, exceptfds: ptr FdSet, proc select*(nfds: cint, readfds, writefds, exceptfds: ptr TFdSet,
timeout: ptr Timeval): cint {. timeout: ptr Timeval): cint {.
stdcall, importc: "select", dynlib: ws2dll.} stdcall, importc: "select", dynlib: ws2dll.}
proc send*(s: SocketHandle, buf: pointer, len, flags: cint): cint {. proc send*(s: SocketHandle, buf: pointer, len, flags: cint): cint {.
@ -530,18 +530,18 @@ proc getnameinfo*(a1: ptr SockAddr, a2: SockLen,
proc inet_addr*(cp: cstring): int32 {. proc inet_addr*(cp: cstring): int32 {.
stdcall, importc: "inet_addr", dynlib: ws2dll.} stdcall, importc: "inet_addr", dynlib: ws2dll.}
proc WSAFDIsSet(s: SocketHandle, set: var FdSet): bool {. proc WSAFDIsSet(s: SocketHandle, set: var TFdSet): bool {.
stdcall, importc: "__WSAFDIsSet", dynlib: ws2dll, noSideEffect.} stdcall, importc: "__WSAFDIsSet", dynlib: ws2dll, noSideEffect.}
proc FD_ISSET*(Socket: SocketHandle, set: var FdSet): cint = proc FD_ISSET*(socket: SocketHandle, set: var TFdSet): cint =
result = if WSAFDIsSet(Socket, set): 1'i32 else: 0'i32 result = if WSAFDIsSet(socket, set): 1'i32 else: 0'i32
proc fdSet*(socket: SocketHandle, s: var FdSet) = proc fdSet*(socket: SocketHandle, s: var TFdSet) =
if s.fd_count < FD_SETSIZE: if s.fd_count < FD_SETSIZE:
s.fd_array[int(s.fd_count)] = socket s.fd_array[int(s.fd_count)] = socket
inc(s.fd_count) inc(s.fd_count)
proc FD_ZERO*(s: var FdSet) = proc FD_ZERO*(s: var TFdSet) =
s.fd_count = 0 s.fd_count = 0
proc wsaStartup*(wVersionRequired: int16, WSData: ptr WSAData): cint {. proc wsaStartup*(wVersionRequired: int16, WSData: ptr WSAData): cint {.

View file

@ -41,9 +41,8 @@ Misc
- fix the bug that keeps 'defer' template from working - fix the bug that keeps 'defer' template from working
- make '--implicitStatic:on' the default - make '--implicitStatic:on' the default
- fix the tuple unpacking in lambda bug
- make tuple unpacking work in a non-var/let context - make tuple unpacking work in a non-var/let context
- special rule for ``[]=`` - special rule for ``[]=``, items, pairs
- built-in 'getImpl' - built-in 'getImpl'
- type API for macros; make 'spawn' a macro - type API for macros; make 'spawn' a macro
- markAndSweepGC should expose an API for fibers - markAndSweepGC should expose an API for fibers
@ -172,8 +171,6 @@ Not essential for 1.0.0
- implement "closure tuple consists of a single 'ref'" optimization - implement "closure tuple consists of a single 'ref'" optimization
- new feature: ``distinct T with operations`` - new feature: ``distinct T with operations``
- arglist as a type (iterator chaining); variable length type lists for generics - arglist as a type (iterator chaining); variable length type lists for generics
- implement marker procs for message passing
- implement closures that support nesting of *procs* > 1
- object constructors: static check for fields if discriminator is known at - object constructors: static check for fields if discriminator is known at
compile time compile time
- prove array accesses - prove array accesses