'nimfix' improvements; FdSet is TFdSet again
This commit is contained in:
parent
a90f73ca4c
commit
7333237be6
11 changed files with 46 additions and 54 deletions
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 {.
|
||||||
|
|
|
||||||
5
todo.txt
5
todo.txt
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue