string to cstring conversions produce the empty C string for nil; this will be consistent with alternative string implementations
This commit is contained in:
parent
84c4e7a502
commit
aded62520b
3 changed files with 9 additions and 6 deletions
|
|
@ -11,7 +11,7 @@
|
||||||
to deal with!
|
to deal with!
|
||||||
- Indexing into a ``cstring`` for the JS target is now mapped
|
- Indexing into a ``cstring`` for the JS target is now mapped
|
||||||
to ``charCodeAt``.
|
to ``charCodeAt``.
|
||||||
- Assignments that would "slice" an object into its supertype are not prevented
|
- Assignments that would "slice" an object into its supertype are now prevented
|
||||||
at runtime. Use ``ref object`` with inheritance rather than ``object`` with
|
at runtime. Use ``ref object`` with inheritance rather than ``object`` with
|
||||||
inheritance to prevent this issue.
|
inheritance to prevent this issue.
|
||||||
|
|
||||||
|
|
@ -81,6 +81,9 @@
|
||||||
Imported exceptions can be raised and caught just like Nim exceptions.
|
Imported exceptions can be raised and caught just like Nim exceptions.
|
||||||
More details in language manual.
|
More details in language manual.
|
||||||
|
|
||||||
|
- ``nil`` for strings/seqs is finally gone. Instead the default value for
|
||||||
|
these is ``"" / @[]``.
|
||||||
|
|
||||||
### Tool changes
|
### Tool changes
|
||||||
|
|
||||||
- ``jsondoc2`` has been renamed ``jsondoc``, similar to how ``doc2`` was renamed
|
- ``jsondoc2`` has been renamed ``jsondoc``, similar to how ``doc2`` was renamed
|
||||||
|
|
|
||||||
|
|
@ -125,15 +125,15 @@ proc openArrayLoc(p: BProc, n: PNode): Rope =
|
||||||
of tyString, tySequence:
|
of tyString, tySequence:
|
||||||
if skipTypes(n.typ, abstractInst).kind == tyVar and
|
if skipTypes(n.typ, abstractInst).kind == tyVar and
|
||||||
not compileToCpp(p.module):
|
not compileToCpp(p.module):
|
||||||
result = "(*$1)->data, (*$1)->$2" % [a.rdLoc, lenField(p)]
|
result = "(*$1)->data, (*$1 ? (*$1)->$2 : 0)" % [a.rdLoc, lenField(p)]
|
||||||
else:
|
else:
|
||||||
result = "$1->data, $1->$2" % [a.rdLoc, lenField(p)]
|
result = "$1->data, ($1 ? $1->$2 : 0)" % [a.rdLoc, lenField(p)]
|
||||||
of tyArray:
|
of tyArray:
|
||||||
result = "$1, $2" % [rdLoc(a), rope(lengthOrd(a.t))]
|
result = "$1, $2" % [rdLoc(a), rope(lengthOrd(a.t))]
|
||||||
of tyPtr, tyRef:
|
of tyPtr, tyRef:
|
||||||
case lastSon(a.t).kind
|
case lastSon(a.t).kind
|
||||||
of tyString, tySequence:
|
of tyString, tySequence:
|
||||||
result = "(*$1)->data, (*$1)->$2" % [a.rdLoc, lenField(p)]
|
result = "(*$1)->data, (*$1 ? (*$1)->$2 : 0)" % [a.rdLoc, lenField(p)]
|
||||||
of tyArray:
|
of tyArray:
|
||||||
result = "$1, $2" % [rdLoc(a), rope(lengthOrd(lastSon(a.t)))]
|
result = "$1, $2" % [rdLoc(a), rope(lengthOrd(lastSon(a.t)))]
|
||||||
else:
|
else:
|
||||||
|
|
@ -143,7 +143,7 @@ proc openArrayLoc(p: BProc, n: PNode): Rope =
|
||||||
proc genArgStringToCString(p: BProc, n: PNode): Rope {.inline.} =
|
proc genArgStringToCString(p: BProc, n: PNode): Rope {.inline.} =
|
||||||
var a: TLoc
|
var a: TLoc
|
||||||
initLocExpr(p, n.sons[0], a)
|
initLocExpr(p, n.sons[0], a)
|
||||||
result = "$1->data" % [a.rdLoc]
|
result = "($1 ? $1->data : \"\")" % [a.rdLoc]
|
||||||
|
|
||||||
proc genArg(p: BProc, n: PNode, param: PSym; call: PNode): Rope =
|
proc genArg(p: BProc, n: PNode, param: PSym; call: PNode): Rope =
|
||||||
var a: TLoc
|
var a: TLoc
|
||||||
|
|
|
||||||
|
|
@ -1740,7 +1740,7 @@ proc genConv(p: BProc, e: PNode, d: var TLoc) =
|
||||||
proc convStrToCStr(p: BProc, n: PNode, d: var TLoc) =
|
proc convStrToCStr(p: BProc, n: PNode, d: var TLoc) =
|
||||||
var a: TLoc
|
var a: TLoc
|
||||||
initLocExpr(p, n.sons[0], a)
|
initLocExpr(p, n.sons[0], a)
|
||||||
putIntoDest(p, d, n, "$1->data" % [rdLoc(a)],
|
putIntoDest(p, d, n, "($1 ? $1->data : \"\")" % [rdLoc(a)],
|
||||||
a.storage)
|
a.storage)
|
||||||
|
|
||||||
proc convCStrToStr(p: BProc, n: PNode, d: var TLoc) =
|
proc convCStrToStr(p: BProc, n: PNode, d: var TLoc) =
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue