Fixed string concatenation and other bugs in the JS backend. Fixed a small bug in the IRC module.

This commit is contained in:
dom96
2011-09-23 21:43:24 +01:00
parent 2359b8b107
commit 6deda5a973
9 changed files with 117 additions and 44 deletions

View File

@@ -227,6 +227,7 @@ type
getAttributeNode*: proc (attr: cstring): ref TNode
getElementsByTagName*: proc (): seq[ref TNode]
hasChildNodes*: proc (): bool
innerHTML*: cstring
insertBefore*: proc (newNode, before: ref TNode)
insertData*: proc (position: int, data: cstring)
removeAttribute*: proc (attr: cstring)

View File

@@ -70,7 +70,12 @@ type
proc send*(irc: var TIRC, message: string) =
## Sends ``message`` as a raw command. It adds ``\c\L`` for you.
irc.sock.send(message & "\c\L")
try:
irc.sock.send(message & "\c\L")
except EOS:
# Assuming disconnection of every EOS could be bad,
# but I can't exactly check for EBrokenPipe.
irc.connected = false
proc privmsg*(irc: var TIRC, target, message: string) =
## Sends ``message`` to ``target``. ``Target`` can be a channel, or a user.
@@ -199,6 +204,7 @@ proc poll*(irc: var TIRC, ev: var TIRCEvent,
##
## This function should be called often as it also handles pinging
## the server.
if not irc.connected: ev.typ = EvDisconnected
var line = ""
var socks = @[irc.sock]
var ret = socks.select(timeout)

View File

@@ -52,7 +52,7 @@ elif defined(windows):
elif defined(ECMAScript):
type
TTime* {.final.} = object
TTime* {.final, importc.} = object
getDay: proc (): int
getFullYear: proc (): int
getHours: proc (): int
@@ -62,6 +62,7 @@ elif defined(ECMAScript):
getSeconds: proc (): int
getTime: proc (): int
getTimezoneOffset: proc (): int
getDate: proc (): int
getUTCDate: proc (): int
getUTCFullYear: proc (): int
getUTCHours: proc (): int
@@ -310,7 +311,8 @@ when not defined(ECMAScript):
result = toFloat(int(clock())) / toFloat(clocksPerSec)
else:
proc getTime(): TTime {.importc: "new Date", nodecl.}
proc newDate(): TTime {.importc: "new Date", nodecl.}
proc getTime(): TTime = return newDate()
const
weekDays: array [0..6, TWeekDay] = [
@@ -346,7 +348,7 @@ else:
result.setDate(timeInfo.monthday)
proc `$`(timeInfo: TTimeInfo): string = return $(TimeInfoToTIme(timeInfo))
proc `$`(time: TTime): string = $time.toLocaleString()
proc `$`(time: TTime): string = return $time.toLocaleString()
proc `-` (a, b: TTime): int64 =
return a.getTime() - b.getTime()

View File

@@ -1495,6 +1495,8 @@ else:
`x`[0][len] = 0
"""
proc add*(x: var cstring, y: cstring) {.magic: "AppendStrStr".}
proc echo*[Ty](x: openarray[Ty]) {.magic: "Echo", noSideEffect.}
## special built-in that takes a variable number of arguments. Each argument
## is converted to a string via ``$``, so it works for user-defined
@@ -1886,6 +1888,7 @@ elif defined(ecmaScript) or defined(NimrodVM):
when defined(ecmaScript):
include "system/ecmasys"
include "system/reprjs"
elif defined(NimrodVM):
proc cmp(x, y: string): int =
if x == y: return 0

View File

@@ -228,7 +228,7 @@ proc cmp(x, y: string): int = return cmpStrings(x, y)
proc eqStrings(a, b: string): bool {.noStackFrame, compilerProc.} =
asm """
if (`a == `b`) return true;
if (`a` == `b`) return true;
if ((!`a`) || (!`b`)) return false;
var alen = `a`.length;
if (alen != `b`.length) return false;

23
lib/system/reprjs.nim Normal file
View File

@@ -0,0 +1,23 @@
#
#
# Nimrod's Runtime Library
# (c) Copyright 2011 Andreas Rumpf
#
# See the file "copying.txt", included in this
# distribution, for details about the copyright.
#
proc reprInt(x: int64): string {.compilerproc.} = return $x
proc reprEnum(e: int, typ: PNimType): string {.compilerRtl.} =
if ntfEnumHole notin typ.flags:
if e <% typ.node.len:
return $typ.node.sons[e].name
else:
# ugh we need a slow linear search:
var n = typ.node
var s = n.sons
for i in 0 .. n.len-1:
if s[i].offset == e: return $s[i].name
result = $e & " (invalid data!)"