mirror of
https://github.com/nim-lang/Nim.git
synced 2026-07-17 14:31:15 +00:00
Fixed string concatenation and other bugs in the JS backend. Fixed a small bug in the IRC module.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
23
lib/system/reprjs.nim
Normal 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!)"
|
||||
|
||||
Reference in New Issue
Block a user