fixes #2473; cleanup of some tests
This commit is contained in:
parent
1a63e630ae
commit
5a003532d0
6 changed files with 28 additions and 54 deletions
|
|
@ -37,7 +37,7 @@ when hasFFI:
|
||||||
import evalffi
|
import evalffi
|
||||||
|
|
||||||
type
|
type
|
||||||
TGenFlag = enum gfNone, gfAddrOf
|
TGenFlag = enum gfAddrOf, gfFieldAccess
|
||||||
TGenFlags = set[TGenFlag]
|
TGenFlags = set[TGenFlag]
|
||||||
|
|
||||||
proc debugInfo(info: TLineInfo): string =
|
proc debugInfo(info: TLineInfo): string =
|
||||||
|
|
@ -535,7 +535,7 @@ proc genIndex(c: PCtx; n: PNode; arr: PType): TRegister =
|
||||||
proc genAsgnPatch(c: PCtx; le: PNode, value: TRegister) =
|
proc genAsgnPatch(c: PCtx; le: PNode, value: TRegister) =
|
||||||
case le.kind
|
case le.kind
|
||||||
of nkBracketExpr:
|
of nkBracketExpr:
|
||||||
let dest = c.genx(le.sons[0], {gfAddrOf})
|
let dest = c.genx(le.sons[0], {gfAddrOf, gfFieldAccess})
|
||||||
let idx = c.genIndex(le.sons[1], le.sons[0].typ)
|
let idx = c.genIndex(le.sons[1], le.sons[0].typ)
|
||||||
c.gABC(le, opcWrArr, dest, idx, value)
|
c.gABC(le, opcWrArr, dest, idx, value)
|
||||||
c.freeTemp(dest)
|
c.freeTemp(dest)
|
||||||
|
|
@ -543,7 +543,7 @@ proc genAsgnPatch(c: PCtx; le: PNode, value: TRegister) =
|
||||||
of nkDotExpr, nkCheckedFieldExpr:
|
of nkDotExpr, nkCheckedFieldExpr:
|
||||||
# XXX field checks here
|
# XXX field checks here
|
||||||
let left = if le.kind == nkDotExpr: le else: le.sons[0]
|
let left = if le.kind == nkDotExpr: le else: le.sons[0]
|
||||||
let dest = c.genx(left.sons[0], {gfAddrOf})
|
let dest = c.genx(left.sons[0], {gfAddrOf, gfFieldAccess})
|
||||||
let idx = genField(left.sons[1])
|
let idx = genField(left.sons[1])
|
||||||
c.gABC(left, opcWrObj, dest, idx, value)
|
c.gABC(left, opcWrObj, dest, idx, value)
|
||||||
c.freeTemp(dest)
|
c.freeTemp(dest)
|
||||||
|
|
@ -1216,7 +1216,7 @@ proc preventFalseAlias(c: PCtx; n: PNode; opc: TOpcode;
|
||||||
proc genAsgn(c: PCtx; le, ri: PNode; requiresCopy: bool) =
|
proc genAsgn(c: PCtx; le, ri: PNode; requiresCopy: bool) =
|
||||||
case le.kind
|
case le.kind
|
||||||
of nkBracketExpr:
|
of nkBracketExpr:
|
||||||
let dest = c.genx(le.sons[0], {gfAddrOf})
|
let dest = c.genx(le.sons[0], {gfAddrOf, gfFieldAccess})
|
||||||
let idx = c.genIndex(le.sons[1], le.sons[0].typ)
|
let idx = c.genIndex(le.sons[1], le.sons[0].typ)
|
||||||
let tmp = c.genx(ri)
|
let tmp = c.genx(ri)
|
||||||
if le.sons[0].typ.skipTypes(abstractVarRange-{tyTypeDesc}).kind in {
|
if le.sons[0].typ.skipTypes(abstractVarRange-{tyTypeDesc}).kind in {
|
||||||
|
|
@ -1228,7 +1228,7 @@ proc genAsgn(c: PCtx; le, ri: PNode; requiresCopy: bool) =
|
||||||
of nkDotExpr, nkCheckedFieldExpr:
|
of nkDotExpr, nkCheckedFieldExpr:
|
||||||
# XXX field checks here
|
# XXX field checks here
|
||||||
let left = if le.kind == nkDotExpr: le else: le.sons[0]
|
let left = if le.kind == nkDotExpr: le else: le.sons[0]
|
||||||
let dest = c.genx(left.sons[0], {gfAddrOf})
|
let dest = c.genx(left.sons[0], {gfAddrOf, gfFieldAccess})
|
||||||
let idx = genField(left.sons[1])
|
let idx = genField(left.sons[1])
|
||||||
let tmp = c.genx(ri)
|
let tmp = c.genx(ri)
|
||||||
c.preventFalseAlias(left, opcWrObj, dest, idx, tmp)
|
c.preventFalseAlias(left, opcWrObj, dest, idx, tmp)
|
||||||
|
|
@ -1321,7 +1321,7 @@ proc genRdVar(c: PCtx; n: PNode; dest: var TDest; flags: TGenFlags) =
|
||||||
c.gABx(n, opcLdGlobal, cc, s.position)
|
c.gABx(n, opcLdGlobal, cc, s.position)
|
||||||
c.gABC(n, opcNodeToReg, dest, cc)
|
c.gABC(n, opcNodeToReg, dest, cc)
|
||||||
c.freeTemp(cc)
|
c.freeTemp(cc)
|
||||||
elif gfAddrOf in flags:
|
elif {gfAddrOf, gfFieldAccess} * flags == {gfAddrOf}:
|
||||||
c.gABx(n, opcLdGlobalAddr, dest, s.position)
|
c.gABx(n, opcLdGlobalAddr, dest, s.position)
|
||||||
else:
|
else:
|
||||||
c.gABx(n, opcLdGlobal, dest, s.position)
|
c.gABx(n, opcLdGlobal, dest, s.position)
|
||||||
|
|
@ -1773,6 +1773,9 @@ proc genExpr*(c: PCtx; n: PNode, requiresValue = true): int =
|
||||||
d = 0
|
d = 0
|
||||||
c.gABC(n, opcEof, d)
|
c.gABC(n, opcEof, d)
|
||||||
|
|
||||||
|
#echo renderTree(n)
|
||||||
|
#c.echoCode(result)
|
||||||
|
|
||||||
proc genParams(c: PCtx; params: PNode) =
|
proc genParams(c: PCtx; params: PNode) =
|
||||||
# res.sym.position is already 0
|
# res.sym.position is already 0
|
||||||
c.prc.slots[0] = (inUse: true, kind: slotFixedVar)
|
c.prc.slots[0] = (inUse: true, kind: slotFixedVar)
|
||||||
|
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
import
|
|
||||||
libcurl
|
|
||||||
|
|
||||||
var hCurl = easy_init()
|
|
||||||
if hCurl != nil:
|
|
||||||
discard easy_setopt(hCurl, OPT_VERBOSE, true)
|
|
||||||
discard easy_setopt(hCurl, OPT_URL, "http://nim-lang.org/")
|
|
||||||
discard easy_perform(hCurl)
|
|
||||||
easy_cleanup(hCurl)
|
|
||||||
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
||||||
# Example IUP program
|
|
||||||
|
|
||||||
# iupTabs: Creates a iupTabs control.
|
|
||||||
|
|
||||||
import iup
|
|
||||||
|
|
||||||
discard iup.open(nil, nil)
|
|
||||||
|
|
||||||
var vbox1 = iup.vbox(iup.label("Inside Tab A"), iup.button("Button A", ""), nil)
|
|
||||||
var vbox2 = iup.vbox(iup.label("Inside Tab B"), iup.button("Button B", ""), nil)
|
|
||||||
|
|
||||||
iup.setAttribute(vbox1, "TABTITLE", "Tab A")
|
|
||||||
iup.setAttribute(vbox2, "TABTITLE", "Tab B")
|
|
||||||
|
|
||||||
var tabs1 = iup.tabs(vbox1, vbox2, nil)
|
|
||||||
|
|
||||||
vbox1 = iup.vbox(iup.label("Inside Tab C"), iup.button("Button C", ""), nil)
|
|
||||||
vbox2 = iup.vbox(iup.label("Inside Tab D"), iup.button("Button D", ""), nil)
|
|
||||||
|
|
||||||
iup.setAttribute(vbox1, "TABTITLE", "Tab C")
|
|
||||||
iup.setAttribute(vbox2, "TABTITLE", "Tab D")
|
|
||||||
|
|
||||||
var tabs2 = iup.tabs(vbox1, vbox2, nil)
|
|
||||||
iup.setAttribute(tabs2, "TABTYPE", "LEFT")
|
|
||||||
|
|
||||||
var box = iup.hbox(tabs1, tabs2, nil)
|
|
||||||
iup.setAttribute(box, "MARGIN", "10x10")
|
|
||||||
iup.setAttribute(box, "GAP", "10")
|
|
||||||
|
|
||||||
var dlg = iup.dialog(box)
|
|
||||||
iup.setAttribute(dlg, "TITLE", "iupTabs")
|
|
||||||
iup.setAttribute(dlg, "SIZE", "200x100")
|
|
||||||
|
|
||||||
discard showXY(dlg, IUP_CENTER, IUP_CENTER)
|
|
||||||
discard mainLoop()
|
|
||||||
close()
|
|
||||||
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
discard """
|
discard """
|
||||||
file: "tmemfiles2.nim"
|
file: "tmemfiles2.nim"
|
||||||
|
disabled: true
|
||||||
output: '''Full read size: 20
|
output: '''Full read size: 20
|
||||||
Half read size: 10 Data: Hello'''
|
Half read size: 10 Data: Hello'''
|
||||||
"""
|
"""
|
||||||
|
# doesn't work on windows. fmReadWrite doesn't create a file.
|
||||||
import memfiles, os
|
import memfiles, os
|
||||||
var
|
var
|
||||||
mm, mm_full, mm_half: MemFile
|
mm, mm_full, mm_half: MemFile
|
||||||
|
|
|
||||||
16
tests/vm/tsimpleglobals.nim
Normal file
16
tests/vm/tsimpleglobals.nim
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
discard """
|
||||||
|
msg: "abc xyz bb"
|
||||||
|
"""
|
||||||
|
|
||||||
|
# bug #2473
|
||||||
|
type
|
||||||
|
Test = tuple[a,b: string]
|
||||||
|
|
||||||
|
static:
|
||||||
|
var s:seq[Test] = @[(a:"a", b:"b")]
|
||||||
|
s[0] = (a:"aa", b:"bb")
|
||||||
|
|
||||||
|
var x: Test
|
||||||
|
x.a = "abc"
|
||||||
|
x.b = "xyz"
|
||||||
|
echo x.a, " ", x.b, " ", s[0].b
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
discard """
|
discard """
|
||||||
errormsg: "cannot evaluate at compile time: x"
|
errormsg: "cannot evaluate at compile time: x"
|
||||||
line: 9
|
line: 7
|
||||||
"""
|
"""
|
||||||
|
|
||||||
var x: array[100, char]
|
var x: array[100, char]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue