mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-22 23:35:22 +00:00
preparations for dealing with the 'echo $foo' gotcha
This commit is contained in:
@@ -241,9 +241,15 @@ proc isOperator(tok: TToken): bool =
|
||||
|
||||
proc isUnary(p: TParser): bool =
|
||||
## Check if the current parser token is a unary operator
|
||||
p.strongSpaces and p.tok.tokType in {tkOpr, tkDotDot} and
|
||||
p.tok.strongSpaceB == 0 and
|
||||
p.tok.strongSpaceA > 0
|
||||
if p.tok.tokType in {tkOpr, tkDotDot} and
|
||||
p.tok.strongSpaceB == 0 and
|
||||
p.tok.strongSpaceA > 0:
|
||||
# XXX change this after 0.10.4 is out
|
||||
if p.strongSpaces:
|
||||
result = true
|
||||
else:
|
||||
parMessage(p, warnDeprecated,
|
||||
"will be parsed as unary operator; inconsistent spacing")
|
||||
|
||||
proc checkBinary(p: TParser) {.inline.} =
|
||||
## Check if the current parser token is a binary operator.
|
||||
|
||||
@@ -253,16 +253,16 @@ proc product*[T](x: openArray[seq[T]]): seq[seq[T]] =
|
||||
while true:
|
||||
while indexes[index] == -1:
|
||||
indexes[index] = initial[index]
|
||||
index +=1
|
||||
index += 1
|
||||
if index == x.len: return
|
||||
indexes[index] -=1
|
||||
indexes[index] -= 1
|
||||
for ni, i in indexes:
|
||||
next[ni] = x[ni][i]
|
||||
var res: seq[T]
|
||||
shallowCopy(res, next)
|
||||
result.add(res)
|
||||
index = 0
|
||||
indexes[index] -=1
|
||||
indexes[index] -= 1
|
||||
|
||||
proc nextPermutation*[T](x: var openarray[T]): bool {.discardable.} =
|
||||
## Calculates the next lexicographic permutation, directly modifying ``x``.
|
||||
|
||||
4
todo.txt
4
todo.txt
@@ -1,16 +1,16 @@
|
||||
version 0.10.4
|
||||
==============
|
||||
|
||||
- improve the parser; deal with echo $foo gotcha
|
||||
- improve GC-unsafety warnings
|
||||
- make 'nil' work for 'add' and 'len'
|
||||
- add "all threads are blocked" detection to 'spawn'
|
||||
- overloading of '='
|
||||
|
||||
|
||||
version 1.0
|
||||
===========
|
||||
|
||||
- remove echo $foo gotcha
|
||||
- add "all threads are blocked" detection to 'spawn'
|
||||
- figure out why C++ bootstrapping is so much slower
|
||||
- nimsuggest: auto-completion needs to work in 'class' macros
|
||||
- The bitwise 'not' operator will be renamed to 'bnot' to
|
||||
|
||||
@@ -42,7 +42,7 @@ News
|
||||
structure; for immediate macro parameters ``nkCall('addr', 'x')`` is
|
||||
produced instead of ``nkAddr('x')``.
|
||||
- ``concept`` is now a keyword and is used instead of ``generic``.
|
||||
- The ``inc``, ``dec``, ``+=``, ``-=`` builtins now produces OverflowError
|
||||
- The ``inc``, ``dec``, ``+=``, ``-=`` builtins now produce OverflowError
|
||||
exceptions. This means code like the following:
|
||||
|
||||
.. code-block:: nim
|
||||
@@ -64,6 +64,10 @@ News
|
||||
use ``a[0.. ^1]``. This also works with accessing a single
|
||||
element ``a[^1]``. Note that we cannot detect this reliably as it is
|
||||
determined at **runtime** whether negative indexing is used!
|
||||
- The compiler now warns about code like ``foo +=1`` which uses inconsistent
|
||||
spacing around binary operators. Later versions of the language will parse
|
||||
these as unary operators instead so that ``echo $foo`` finally can do what
|
||||
people expect it to do.
|
||||
|
||||
|
||||
Language Additions
|
||||
|
||||
Reference in New Issue
Block a user