Merge branch 'devel' of github.com:Araq/Nimrod into devel
This commit is contained in:
commit
0f720a83d5
6 changed files with 77 additions and 27 deletions
|
|
@ -116,14 +116,6 @@ proc iiTablePut*(t: var TIITable, key, val: int)
|
||||||
|
|
||||||
# implementation
|
# implementation
|
||||||
|
|
||||||
proc skipConv*(n: PNode): PNode =
|
|
||||||
case n.kind
|
|
||||||
of nkObjUpConv, nkObjDownConv, nkChckRange, nkChckRangeF, nkChckRange64:
|
|
||||||
result = n.sons[0]
|
|
||||||
of nkHiddenStdConv, nkHiddenSubConv, nkConv:
|
|
||||||
result = n.sons[1]
|
|
||||||
else: result = n
|
|
||||||
|
|
||||||
proc skipConvAndClosure*(n: PNode): PNode =
|
proc skipConvAndClosure*(n: PNode): PNode =
|
||||||
result = n
|
result = n
|
||||||
while true:
|
while true:
|
||||||
|
|
@ -135,10 +127,6 @@ proc skipConvAndClosure*(n: PNode): PNode =
|
||||||
result = result.sons[1]
|
result = result.sons[1]
|
||||||
else: break
|
else: break
|
||||||
|
|
||||||
proc skipConvTakeType*(n: PNode): PNode =
|
|
||||||
result = n.skipConv
|
|
||||||
result.typ = n.typ
|
|
||||||
|
|
||||||
proc sameValue*(a, b: PNode): bool =
|
proc sameValue*(a, b: PNode): bool =
|
||||||
result = false
|
result = false
|
||||||
case a.kind
|
case a.kind
|
||||||
|
|
|
||||||
|
|
@ -1374,20 +1374,19 @@ proc lookUpForDefined(c: PContext, n: PNode, onlyCurrentScope: bool): PSym =
|
||||||
if onlyCurrentScope: return
|
if onlyCurrentScope: return
|
||||||
checkSonsLen(n, 2)
|
checkSonsLen(n, 2)
|
||||||
var m = lookUpForDefined(c, n.sons[0], onlyCurrentScope)
|
var m = lookUpForDefined(c, n.sons[0], onlyCurrentScope)
|
||||||
if (m != nil) and (m.kind == skModule):
|
if m != nil and m.kind == skModule:
|
||||||
if (n.sons[1].kind == nkIdent):
|
let ident = considerQuotedIdent(n[1])
|
||||||
var ident = n.sons[1].ident
|
if m == c.module:
|
||||||
if m == c.module:
|
result = strTableGet(c.topLevelScope.symbols, ident)
|
||||||
result = strTableGet(c.topLevelScope.symbols, ident)
|
|
||||||
else:
|
|
||||||
result = strTableGet(m.tab, ident)
|
|
||||||
else:
|
else:
|
||||||
localError(n.sons[1].info, errIdentifierExpected, "")
|
result = strTableGet(m.tab, ident)
|
||||||
of nkAccQuoted:
|
of nkAccQuoted:
|
||||||
result = lookUpForDefined(c, considerQuotedIdent(n), onlyCurrentScope)
|
result = lookUpForDefined(c, considerQuotedIdent(n), onlyCurrentScope)
|
||||||
of nkSym:
|
of nkSym:
|
||||||
result = n.sym
|
result = n.sym
|
||||||
else:
|
of nkOpenSymChoice, nkClosedSymChoice:
|
||||||
|
result = n.sons[0].sym
|
||||||
|
else:
|
||||||
localError(n.info, errIdentifierExpected, renderTree(n))
|
localError(n.info, errIdentifierExpected, renderTree(n))
|
||||||
result = nil
|
result = nil
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ proc isPureObject(typ: PType): bool =
|
||||||
|
|
||||||
proc getOrdValue(n: PNode): BiggestInt =
|
proc getOrdValue(n: PNode): BiggestInt =
|
||||||
case n.kind
|
case n.kind
|
||||||
of nkCharLit..nkInt64Lit: result = n.intVal
|
of nkCharLit..nkUInt64Lit: result = n.intVal
|
||||||
of nkNilLit: result = 0
|
of nkNilLit: result = 0
|
||||||
of nkHiddenStdConv: result = getOrdValue(n.sons[1])
|
of nkHiddenStdConv: result = getOrdValue(n.sons[1])
|
||||||
else:
|
else:
|
||||||
|
|
@ -1369,3 +1369,35 @@ proc containsCompileTimeOnly*(t: PType): bool =
|
||||||
if t.sons[i] != nil and isCompileTimeOnly(t.sons[i]):
|
if t.sons[i] != nil and isCompileTimeOnly(t.sons[i]):
|
||||||
return true
|
return true
|
||||||
return false
|
return false
|
||||||
|
|
||||||
|
type
|
||||||
|
OrdinalType* = enum
|
||||||
|
NoneLike, IntLike, FloatLike
|
||||||
|
|
||||||
|
proc classify*(t: PType): OrdinalType =
|
||||||
|
## for convenient type checking:
|
||||||
|
if t == nil:
|
||||||
|
result = NoneLike
|
||||||
|
else:
|
||||||
|
case skipTypes(t, abstractVarRange).kind
|
||||||
|
of tyFloat..tyFloat128: result = FloatLike
|
||||||
|
of tyInt..tyInt64, tyUInt..tyUInt64, tyBool, tyChar, tyEnum:
|
||||||
|
result = IntLike
|
||||||
|
else: result = NoneLike
|
||||||
|
|
||||||
|
proc skipConv*(n: PNode): PNode =
|
||||||
|
result = n
|
||||||
|
case n.kind
|
||||||
|
of nkObjUpConv, nkObjDownConv, nkChckRange, nkChckRangeF, nkChckRange64:
|
||||||
|
# only skip the conversion if it doesn't lose too important information
|
||||||
|
# (see bug #
|
||||||
|
if n.sons[0].typ.classify == n.typ.classify:
|
||||||
|
result = n.sons[0]
|
||||||
|
of nkHiddenStdConv, nkHiddenSubConv, nkConv:
|
||||||
|
if n.sons[1].typ.classify == n.typ.classify:
|
||||||
|
result = n.sons[1]
|
||||||
|
else: discard
|
||||||
|
|
||||||
|
proc skipConvTakeType*(n: PNode): PNode =
|
||||||
|
result = n.skipConv
|
||||||
|
result.typ = n.typ
|
||||||
|
|
|
||||||
15
tests/misc/tunsignedcmp.nim
Normal file
15
tests/misc/tunsignedcmp.nim
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
discard """
|
||||||
|
output: '''true
|
||||||
|
true
|
||||||
|
true'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
# bug 1420
|
||||||
|
import unsigned
|
||||||
|
|
||||||
|
var x = 40'u32
|
||||||
|
var y = 30'u32
|
||||||
|
echo x > y # works
|
||||||
|
|
||||||
|
echo((40'i32) > (30'i32))
|
||||||
|
echo((40'u32) > (30'u32)) # Error: ordinal type expected
|
||||||
|
|
@ -3,7 +3,8 @@ discard """
|
||||||
output: '''1
|
output: '''1
|
||||||
0
|
0
|
||||||
Whopie
|
Whopie
|
||||||
12'''
|
12
|
||||||
|
1.7'''
|
||||||
"""
|
"""
|
||||||
|
|
||||||
echo len([1_000_000]) #OUT 1
|
echo len([1_000_000]) #OUT 1
|
||||||
|
|
@ -39,3 +40,9 @@ var val12 = TSomeRange(hour: 12)
|
||||||
|
|
||||||
value = $(if val12.hour > 12: val12.hour - 12 else: val12.hour)
|
value = $(if val12.hour > 12: val12.hour - 12 else: val12.hour)
|
||||||
echo value
|
echo value
|
||||||
|
|
||||||
|
# bug #1334
|
||||||
|
|
||||||
|
var ys = @[4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2]
|
||||||
|
#var x = int(ys.high / 2) #echo ys[x] # Works
|
||||||
|
echo ys[int(ys.high / 2)] # Doesn't work
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,14 @@ one of the even fewer that produces native binaries that require no
|
||||||
runtime or interpreter.
|
runtime or interpreter.
|
||||||
|
|
||||||
|
|
||||||
|
What have been the major influences in the language's design?
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
The language borrows heavily from: Modula 3, Delphi, Ada, C++, Python, Lisp,
|
||||||
|
Oberon. As far as possible the list is sorted by the impact of influence.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
What is Nimrod's take on concurrency?
|
What is Nimrod's take on concurrency?
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
|
||||||
|
|
@ -89,8 +97,8 @@ Why is it named ``proc``?
|
||||||
|
|
||||||
*Procedure* used to be the common term as opposed to a *function* which is a
|
*Procedure* used to be the common term as opposed to a *function* which is a
|
||||||
mathematical entity that has no side effects. It was planned to have ``func``
|
mathematical entity that has no side effects. It was planned to have ``func``
|
||||||
as syntactic sugar for ``proc {.noSideEffect.}`` but the more fine-grained
|
as syntactic sugar for ``proc {.noSideEffect.}`` but with the more fine-grained
|
||||||
effect system makes that unimportant.
|
effect system it is not yet clear what ``func`` should be a shortcut for.
|
||||||
|
|
||||||
|
|
||||||
Compilation
|
Compilation
|
||||||
|
|
@ -117,15 +125,16 @@ Change the value of the ``cc`` variable to one of the following:
|
||||||
============== ============================================
|
============== ============================================
|
||||||
Abbreviation C/C++ Compiler
|
Abbreviation C/C++ Compiler
|
||||||
============== ============================================
|
============== ============================================
|
||||||
``dmc`` Digital Mars C++
|
|
||||||
``vcc`` Microsoft's Visual C++
|
``vcc`` Microsoft's Visual C++
|
||||||
``gcc`` Gnu C
|
``gcc`` Gnu C
|
||||||
``tcc`` Tiny C
|
|
||||||
``llvm_gcc`` LLVM-GCC compiler
|
``llvm_gcc`` LLVM-GCC compiler
|
||||||
``icc`` Intel C++ compiler
|
``icc`` Intel C++ compiler
|
||||||
|
``clang`` Clang compiler
|
||||||
``ucc`` Generic UNIX C compiler
|
``ucc`` Generic UNIX C compiler
|
||||||
============== ============================================
|
============== ============================================
|
||||||
|
|
||||||
|
Other C compilers are not officially supported, but might work too.
|
||||||
|
|
||||||
If your C compiler is not in the above list, try using the
|
If your C compiler is not in the above list, try using the
|
||||||
*generic UNIX C compiler* (``ucc``). If the C compiler needs
|
*generic UNIX C compiler* (``ucc``). If the C compiler needs
|
||||||
different command line arguments try the ``--passc`` and ``--passl`` switches.
|
different command line arguments try the ``--passc`` and ``--passl`` switches.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue