Merge branch 'devel' into sighashes
This commit is contained in:
commit
24239c2361
14 changed files with 341 additions and 216 deletions
|
|
@ -973,7 +973,11 @@ proc genAsmOrEmitStmt(p: BProc, t: PNode, isAsmStmt=false): Rope =
|
|||
r = mangleName(p.module, sym)
|
||||
sym.loc.r = r # but be consequent!
|
||||
res.add($r)
|
||||
else: internalError(t.sons[i].info, "genAsmOrEmitStmt()")
|
||||
else:
|
||||
var a: TLoc
|
||||
initLocExpr(p, t.sons[i], a)
|
||||
res.add($a.rdLoc)
|
||||
#internalError(t.sons[i].info, "genAsmOrEmitStmt()")
|
||||
|
||||
if isAsmStmt and hasGnuAsm in CC[cCompiler].props:
|
||||
for x in splitLines(res):
|
||||
|
|
|
|||
|
|
@ -659,8 +659,14 @@ proc compileCFile(list: TLinkedList, script: var Rope, cmds: var TStringSeq,
|
|||
|
||||
proc getLinkCmd(projectfile, objfiles: string): string =
|
||||
if optGenStaticLib in gGlobalOptions:
|
||||
let name = splitFile(gProjectName).name
|
||||
result = CC[cCompiler].buildLib % ["libfile", (libNameTmpl() % name),
|
||||
var libname: string
|
||||
if options.outFile.len > 0:
|
||||
libname = options.outFile.expandTilde
|
||||
if not libname.isAbsolute():
|
||||
libname = getCurrentDir() / libname
|
||||
else:
|
||||
libname = (libNameTmpl() % splitFile(gProjectName).name)
|
||||
result = CC[cCompiler].buildLib % ["libfile", libname,
|
||||
"objfiles", objfiles]
|
||||
else:
|
||||
var linkerExe = getConfigVar(cCompiler, ".linkerexe")
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ type
|
|||
errIndexOutOfBounds, errIndexTypesDoNotMatch, errBracketsInvalidForType,
|
||||
errValueOutOfSetBounds, errFieldInitTwice, errFieldNotInit,
|
||||
errExprXCannotBeCalled, errExprHasNoType, errExprXHasNoType,
|
||||
errCastNotInSafeMode, errExprCannotBeCastedToX, errCommaOrParRiExpected,
|
||||
errCastNotInSafeMode, errExprCannotBeCastToX, errCommaOrParRiExpected,
|
||||
errCurlyLeOrParLeExpected, errSectionExpected, errRangeExpected,
|
||||
errMagicOnlyInSystem, errPowerOfTwoExpected,
|
||||
errStringMayNotBeEmpty, errCallConvExpected, errProcOnlyOneCallConv,
|
||||
|
|
@ -229,7 +229,7 @@ const
|
|||
errExprHasNoType: "expression has no type",
|
||||
errExprXHasNoType: "expression \'$1\' has no type (or is ambiguous)",
|
||||
errCastNotInSafeMode: "\'cast\' not allowed in safe mode",
|
||||
errExprCannotBeCastedToX: "expression cannot be casted to $1",
|
||||
errExprCannotBeCastToX: "expression cannot be cast to $1",
|
||||
errCommaOrParRiExpected: "',' or ')' expected",
|
||||
errCurlyLeOrParLeExpected: "\'{\' or \'(\' expected",
|
||||
errSectionExpected: "section (\'type\', \'proc\', etc.) expected",
|
||||
|
|
|
|||
|
|
@ -460,8 +460,22 @@ proc semAsmOrEmit*(con: PContext, n: PNode, marker: char): PNode =
|
|||
result = newNode(nkAsmStmt, n.info)
|
||||
|
||||
proc pragmaEmit(c: PContext, n: PNode) =
|
||||
discard getStrLitNode(c, n)
|
||||
n.sons[1] = semAsmOrEmit(c, n, '`')
|
||||
if n.kind != nkExprColonExpr:
|
||||
localError(n.info, errStringLiteralExpected)
|
||||
else:
|
||||
let n1 = n[1]
|
||||
if n1.kind == nkBracket:
|
||||
var b = newNodeI(nkBracket, n1.info, n1.len)
|
||||
for i in 0..<n1.len:
|
||||
b.sons[i] = c.semExpr(c, n1[i])
|
||||
n.sons[1] = b
|
||||
else:
|
||||
n.sons[1] = c.semConstExpr(c, n1)
|
||||
case n.sons[1].kind
|
||||
of nkStrLit, nkRStrLit, nkTripleStrLit:
|
||||
n.sons[1] = semAsmOrEmit(c, n, '`')
|
||||
else:
|
||||
localError(n.info, errStringLiteralExpected)
|
||||
|
||||
proc noVal(n: PNode) =
|
||||
if n.kind == nkExprColonExpr: invalidPragma(n)
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ proc checkConvertible(c: PContext, castDest, src: PType): TConvStatus =
|
|||
discard
|
||||
|
||||
proc isCastable(dst, src: PType): bool =
|
||||
## Checks whether the source type can be casted to the destination type.
|
||||
## Checks whether the source type can be cast to the destination type.
|
||||
## Casting is very unrestrictive; casts are allowed as long as
|
||||
## castDest.size >= src.size, and typeAllowed(dst, skParam)
|
||||
#const
|
||||
|
|
@ -223,7 +223,7 @@ proc semCast(c: PContext, n: PNode): PNode =
|
|||
addSon(result, copyTree(n.sons[0]))
|
||||
addSon(result, semExprWithType(c, n.sons[1]))
|
||||
if not isCastable(result.typ, result.sons[1].typ):
|
||||
localError(result.info, errExprCannotBeCastedToX,
|
||||
localError(result.info, errExprCannotBeCastToX,
|
||||
typeToString(result.typ))
|
||||
|
||||
proc semLowHigh(c: PContext, n: PNode, m: TMagic): PNode =
|
||||
|
|
|
|||
|
|
@ -760,8 +760,10 @@ proc typeSectionRightSidePass(c: PContext, n: PNode) =
|
|||
internalAssert st.kind in {tyPtr, tyRef}
|
||||
internalAssert st.lastSon.sym == nil
|
||||
incl st.flags, tfRefsAnonObj
|
||||
st.lastSon.sym = newSym(skType, getIdent(s.name.s & ":ObjectType"),
|
||||
let obj = newSym(skType, getIdent(s.name.s & ":ObjectType"),
|
||||
getCurrOwner(), s.info)
|
||||
obj.typ = st.lastSon
|
||||
st.lastSon.sym = obj
|
||||
|
||||
|
||||
proc checkForMetaFields(n: PNode) =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue