From b76d2eac7f551cafa0ac797330e3bd0650ab26d9 Mon Sep 17 00:00:00 2001 From: Araq Date: Sat, 22 Mar 2014 22:59:23 +0100 Subject: [PATCH] fixes #1006 --- compiler/c2nim/cparse.nim | 3 ++- compiler/semgnrc.nim | 2 ++ doc/manual.txt | 17 ++++++++++------- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/compiler/c2nim/cparse.nim b/compiler/c2nim/cparse.nim index 86533fe26..52d50ca39 100644 --- a/compiler/c2nim/cparse.nim +++ b/compiler/c2nim/cparse.nim @@ -1279,7 +1279,8 @@ proc leftBindingPower(p : var TParser, tok : ref TToken) : int = of pxComma: return 10 # throw == 20 - of pxAsgn, pxPlusAsgn, pxMinusAsgn, pxStarAsgn, pxSlashAsgn, pxModAsgn, pxShlAsgn, pxShrAsgn, pxAmpAsgn, pxHatAsgn, pxBarAsgn: + of pxAsgn, pxPlusAsgn, pxMinusAsgn, pxStarAsgn, pxSlashAsgn, pxModAsgn, + pxShlAsgn, pxShrAsgn, pxAmpAsgn, pxHatAsgn, pxBarAsgn: return 30 of pxConditional: return 40 diff --git a/compiler/semgnrc.nim b/compiler/semgnrc.nim index ffc1a43b2..2de397e25 100644 --- a/compiler/semgnrc.nim +++ b/compiler/semgnrc.nim @@ -94,6 +94,8 @@ proc semGenericStmt(c: PContext, n: PNode, let luf = if withinMixin notin flags: {checkUndeclared} else: {} var s = qualifiedLookUp(c, n, luf) if s != nil: result = semGenericStmtSymbol(c, n, s) + else: + # XXX for example: ``result.add`` -- ``add`` needs to be looked up here... of nkEmpty, nkSym..nkNilLit: # see tests/compile/tgensymgeneric.nim: diff --git a/doc/manual.txt b/doc/manual.txt index 5c4aa2c17..c2acd3e6a 100644 --- a/doc/manual.txt +++ b/doc/manual.txt @@ -499,18 +499,21 @@ other binary operators are left-associative. Precedence ---------- -For operators that are not keywords the precedence is determined by the -following rules: +Unary operators always bind stronger than any binary +operator: ``$a + b`` is ``($a) + b`` and not ``$(a + b)``. + +If an unary operator's relevant character is ``@`` it is a `sigil-like`:idx: +operator which binds stronger than a ``primarySuffix``: ``@x.abc`` is parsed +as ``(@x).abc`` whereas ``$x.abc`` is parsed as ``$(x.abc)``. + + +For binary operators that are not keywords the precedence is determined by the +following rules: If the operator ends with ``=`` and its relevant character is none of ``<``, ``>``, ``!``, ``=``, ``~``, ``?``, it is an *assignment operator* which has the lowest precedence. -If the operator's relevant character is ``@`` it is a `sigil-like`:idx: -operator which binds stronger than a ``primarySuffix``: ``@x.abc`` is parsed -as ``(@x).abc`` whereas ``$x.abc`` is parsed as ``$(x.abc)``. - - Otherwise precedence is determined by the relevant character. ================ =============================================== ================== ===============