* fixes #3748 * fix the regression * don't use the new allocator for the SSL wrapper * fixes regression
This commit is contained in:
parent
b793ca7394
commit
07b645342a
4 changed files with 24 additions and 6 deletions
|
|
@ -69,7 +69,7 @@ type
|
||||||
efWantStmt, efAllowStmt, efDetermineType, efExplain,
|
efWantStmt, efAllowStmt, efDetermineType, efExplain,
|
||||||
efWantValue, efOperand, efNoSemCheck,
|
efWantValue, efOperand, efNoSemCheck,
|
||||||
efNoEvaluateGeneric, efInCall, efFromHlo, efNoSem2Check,
|
efNoEvaluateGeneric, efInCall, efFromHlo, efNoSem2Check,
|
||||||
efNoUndeclared
|
efNoUndeclared, efIsDotCall
|
||||||
# Use this if undeclared identifiers should not raise an error during
|
# Use this if undeclared identifiers should not raise an error during
|
||||||
# overload resolution.
|
# overload resolution.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -973,7 +973,7 @@ proc semIndirectOp(c: PContext, n: PNode, flags: TExprFlags; expectedType: PType
|
||||||
var prc = n[0]
|
var prc = n[0]
|
||||||
if n[0].kind == nkDotExpr:
|
if n[0].kind == nkDotExpr:
|
||||||
checkSonsLen(n[0], 2, c.config)
|
checkSonsLen(n[0], 2, c.config)
|
||||||
let n0 = semFieldAccess(c, n[0])
|
let n0 = semFieldAccess(c, n[0], {efIsDotCall})
|
||||||
if n0.kind == nkDotCall:
|
if n0.kind == nkDotCall:
|
||||||
# it is a static call!
|
# it is a static call!
|
||||||
result = n0
|
result = n0
|
||||||
|
|
@ -1474,8 +1474,9 @@ proc dotTransformation(c: PContext, n: PNode): PNode =
|
||||||
proc semFieldAccess(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
proc semFieldAccess(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
||||||
# this is difficult, because the '.' is used in many different contexts
|
# this is difficult, because the '.' is used in many different contexts
|
||||||
# in Nim. We first allow types in the semantic checking.
|
# in Nim. We first allow types in the semantic checking.
|
||||||
result = builtinFieldAccess(c, n, flags)
|
result = builtinFieldAccess(c, n, flags - {efIsDotCall})
|
||||||
if result == nil:
|
if result == nil or ((result.typ == nil or result.typ.skipTypes(abstractInst).kind != tyProc) and
|
||||||
|
efIsDotCall in flags and callOperator notin c.features):
|
||||||
result = dotTransformation(c, n)
|
result = dotTransformation(c, n)
|
||||||
|
|
||||||
proc buildOverloadedSubscripts(n: PNode, ident: PIdent): PNode =
|
proc buildOverloadedSubscripts(n: PNode, ident: PIdent): PNode =
|
||||||
|
|
|
||||||
|
|
@ -531,7 +531,10 @@ proc i2d_X509*(cert: PX509): string =
|
||||||
if length.int <= 0:
|
if length.int <= 0:
|
||||||
raise newException(Exception, "X.509 certificate encoding failed")
|
raise newException(Exception, "X.509 certificate encoding failed")
|
||||||
|
|
||||||
when not useWinVersion and not defined(macosx) and not defined(android) and not defined(nimNoAllocForSSL):
|
const
|
||||||
|
useNimsAlloc = not defined(nimNoAllocForSSL) and not defined(gcDestructors)
|
||||||
|
|
||||||
|
when not useWinVersion and not defined(macosx) and not defined(android) and useNimsAlloc:
|
||||||
proc CRYPTO_set_mem_functions(a,b,c: pointer){.cdecl,
|
proc CRYPTO_set_mem_functions(a,b,c: pointer){.cdecl,
|
||||||
dynlib: DLLUtilName, importc.}
|
dynlib: DLLUtilName, importc.}
|
||||||
|
|
||||||
|
|
@ -545,7 +548,7 @@ when not useWinVersion and not defined(macosx) and not defined(android) and not
|
||||||
if p != nil: deallocShared(p)
|
if p != nil: deallocShared(p)
|
||||||
|
|
||||||
proc CRYPTO_malloc_init*() =
|
proc CRYPTO_malloc_init*() =
|
||||||
when not useWinVersion and not defined(macosx) and not defined(android) and not defined(nimNoAllocForSSL):
|
when not useWinVersion and not defined(macosx) and not defined(android) and useNimsAlloc:
|
||||||
CRYPTO_set_mem_functions(allocWrapper, reallocWrapper, deallocWrapper)
|
CRYPTO_set_mem_functions(allocWrapper, reallocWrapper, deallocWrapper)
|
||||||
|
|
||||||
proc SSL_CTX_ctrl*(ctx: SslCtx, cmd: cint, larg: clong, parg: pointer): clong{.
|
proc SSL_CTX_ctrl*(ctx: SslCtx, cmd: cint, larg: clong, parg: pointer): clong{.
|
||||||
|
|
|
||||||
|
|
@ -75,3 +75,17 @@ proc add*[TKey, TData](root: var PElement[TKey, TData], key: TKey, data: TData)
|
||||||
var tree = PElement[int, int](kind: ElementKind.inner, key: 0, left: nil, right: nil)
|
var tree = PElement[int, int](kind: ElementKind.inner, key: 0, left: nil, right: nil)
|
||||||
let result = add(tree, 1, 1)
|
let result = add(tree, 1, 1)
|
||||||
echo(result)
|
echo(result)
|
||||||
|
|
||||||
|
# bug #3748
|
||||||
|
type
|
||||||
|
Foo = object
|
||||||
|
bar: int
|
||||||
|
|
||||||
|
proc bar(cur: Foo, val: int, s:seq[string]) =
|
||||||
|
discard cur.bar
|
||||||
|
|
||||||
|
proc does_fail(): Foo =
|
||||||
|
let a = @["a"]
|
||||||
|
result.bar(5, a)
|
||||||
|
|
||||||
|
doAssert does_fail().bar == 0
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue