mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-04 12:07:51 +00:00
* fixes #3748
* fix the regression
* don't use the new allocator for the SSL wrapper
* fixes regression
(cherry picked from commit 07b645342a)
This commit is contained in:
@@ -67,7 +67,7 @@ type
|
||||
efWantStmt, efAllowStmt, efDetermineType, efExplain,
|
||||
efWantValue, efOperand, efNoSemCheck,
|
||||
efNoEvaluateGeneric, efInCall, efFromHlo, efNoSem2Check,
|
||||
efNoUndeclared
|
||||
efNoUndeclared, efIsDotCall
|
||||
# Use this if undeclared identifiers should not raise an error during
|
||||
# overload resolution.
|
||||
|
||||
|
||||
@@ -988,7 +988,7 @@ proc semIndirectOp(c: PContext, n: PNode, flags: TExprFlags; expectedType: PType
|
||||
var prc = n[0]
|
||||
if n[0].kind == nkDotExpr:
|
||||
checkSonsLen(n[0], 2, c.config)
|
||||
let n0 = semFieldAccess(c, n[0])
|
||||
let n0 = semFieldAccess(c, n[0], {efIsDotCall})
|
||||
if n0.kind == nkDotCall:
|
||||
# it is a static call!
|
||||
result = n0
|
||||
@@ -1519,8 +1519,9 @@ proc dotTransformation(c: PContext, n: PNode): PNode =
|
||||
proc semFieldAccess(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
||||
# this is difficult, because the '.' is used in many different contexts
|
||||
# in Nim. We first allow types in the semantic checking.
|
||||
result = builtinFieldAccess(c, n, flags)
|
||||
if result == nil:
|
||||
result = builtinFieldAccess(c, n, flags - {efIsDotCall})
|
||||
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)
|
||||
|
||||
proc buildOverloadedSubscripts(n: PNode, ident: PIdent): PNode =
|
||||
|
||||
@@ -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)
|
||||
let result = add(tree, 1, 1)
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user