mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-03 11:42:33 +00:00
c2nim compiles again
This commit is contained in:
@@ -283,7 +283,7 @@ proc parsePegLit(p: var TParser): TPeg =
|
||||
try:
|
||||
result = parsePeg(
|
||||
pattern = if p.tok.xkind == pxStrLit: p.tok.s else: escapePeg(p.tok.s),
|
||||
filename = p.lex.filename,
|
||||
filename = p.lex.fileIdx.ToFilename,
|
||||
line = p.lex.linenumber,
|
||||
col = col)
|
||||
getTok(p)
|
||||
|
||||
@@ -410,23 +410,23 @@ proc newFileInfo(fullPath, projPath: string): TFileInfo =
|
||||
|
||||
proc fileInfoIdx*(filename: string): int32 =
|
||||
var
|
||||
canonical: string
|
||||
canon: string
|
||||
pseudoPath = false
|
||||
|
||||
try:
|
||||
canonical = canonicalizePath(filename)
|
||||
canon = canonicalizePath(filename)
|
||||
except:
|
||||
canonical = filename
|
||||
canon = filename
|
||||
# The compiler uses "filenames" such as `command line` or `stdin`
|
||||
# This flag indicates that we are working with such a path here
|
||||
pseudoPath = true
|
||||
|
||||
if filenameToIndexTbl.hasKey(canonical):
|
||||
result = filenameToIndexTbl[canonical]
|
||||
if filenameToIndexTbl.hasKey(canon):
|
||||
result = filenameToIndexTbl[canon]
|
||||
else:
|
||||
result = fileInfos.len.int32
|
||||
fileInfos.add(newFileInfo(canonical, if pseudoPath: "" else: canonical.shortenDir))
|
||||
filenameToIndexTbl[canonical] = result
|
||||
fileInfos.add(newFileInfo(canon, if pseudoPath: "" else: canon.shortenDir))
|
||||
filenameToIndexTbl[canon] = result
|
||||
|
||||
proc newLineInfo*(fileInfoIdx: int32, line, col: int): TLineInfo =
|
||||
result.fileIndex = fileInfoIdx
|
||||
@@ -478,6 +478,10 @@ proc ToFilename*(info: TLineInfo): string =
|
||||
if info.fileIndex < 0: result = "???"
|
||||
else: result = fileInfos[info.fileIndex].projPath
|
||||
|
||||
proc ToFilename*(fileIdx: int32): string =
|
||||
if fileIdx < 0: result = "???"
|
||||
else: result = fileInfos[fileIdx].projPath
|
||||
|
||||
proc toFullPath*(info: TLineInfo): string =
|
||||
if info.fileIndex < 0: result = "???"
|
||||
else: result = fileInfos[info.fileIndex].fullPath
|
||||
|
||||
@@ -420,7 +420,7 @@ proc newObjRC1(typ: PNimType, size: int): pointer {.compilerRtl.} =
|
||||
if framePtr != nil and framePtr.prev != nil:
|
||||
res.filename = framePtr.prev.filename
|
||||
res.line = framePtr.prev.line
|
||||
res.refcount = rcIncrement # refcount is 1
|
||||
res.refcount = rcIncrement # refcount is 1
|
||||
sysAssert(isAllocatedPtr(gch.region, res), "newObj: 3")
|
||||
when logGC: writeCell("new cell", res)
|
||||
gcTrace(res, csAllocated)
|
||||
|
||||
@@ -52,7 +52,7 @@ proc copyStrLast(s: NimString, start, last: int): NimString {.compilerProc.} =
|
||||
c_memcpy(result.data, addr(s.data[start]), len * sizeof(Char))
|
||||
result.data[len] = '\0'
|
||||
else:
|
||||
result = mnewString(0)
|
||||
result = rawNewString(len)
|
||||
|
||||
proc copyStr(s: NimString, start: int): NimString {.compilerProc.} =
|
||||
result = copyStrLast(s, start, s.len-1)
|
||||
|
||||
1
todo.txt
1
todo.txt
@@ -5,6 +5,7 @@ version 0.8.14
|
||||
- compiler should optimize string creation
|
||||
- marker procs for the GC
|
||||
- need to generate code to prevent tail call optimization
|
||||
- write barrier specialization
|
||||
- warning for implicit openArray -> varargs convention
|
||||
- implement explicit varargs; **but** ``len(varargs)`` problem remains!
|
||||
--> solve by implicit conversion from varargs to openarray
|
||||
|
||||
Reference in New Issue
Block a user