From 5a003532d0660a962a978ee6763dd9b3a5425ab8 Mon Sep 17 00:00:00 2001 From: Araq Date: Wed, 30 Sep 2015 21:04:21 +0200 Subject: fixes #2473; cleanup of some tests --- compiler/vmgen.nim | 15 +++++++++------ examples/curlex.nim | 10 ---------- examples/iupex1.nim | 37 ------------------------------------- tests/stdlib/tmemfiles2.nim | 2 ++ tests/vm/tsimpleglobals.nim | 16 ++++++++++++++++ tests/vm/twrongconst.nim | 2 +- 6 files changed, 28 insertions(+), 54 deletions(-) delete mode 100644 examples/curlex.nim delete mode 100644 examples/iupex1.nim create mode 100644 tests/vm/tsimpleglobals.nim diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim index 0559acc88..92db0d513 100644 --- a/compiler/vmgen.nim +++ b/compiler/vmgen.nim @@ -37,7 +37,7 @@ when hasFFI: import evalffi type - TGenFlag = enum gfNone, gfAddrOf + TGenFlag = enum gfAddrOf, gfFieldAccess TGenFlags = set[TGenFlag] 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) = case le.kind 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) c.gABC(le, opcWrArr, dest, idx, value) c.freeTemp(dest) @@ -543,7 +543,7 @@ proc genAsgnPatch(c: PCtx; le: PNode, value: TRegister) = of nkDotExpr, nkCheckedFieldExpr: # XXX field checks here 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]) c.gABC(left, opcWrObj, dest, idx, value) c.freeTemp(dest) @@ -1216,7 +1216,7 @@ proc preventFalseAlias(c: PCtx; n: PNode; opc: TOpcode; proc genAsgn(c: PCtx; le, ri: PNode; requiresCopy: bool) = case le.kind 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 tmp = c.genx(ri) 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: # XXX field checks here 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 tmp = c.genx(ri) 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.gABC(n, opcNodeToReg, dest, cc) c.freeTemp(cc) - elif gfAddrOf in flags: + elif {gfAddrOf, gfFieldAccess} * flags == {gfAddrOf}: c.gABx(n, opcLdGlobalAddr, dest, s.position) else: c.gABx(n, opcLdGlobal, dest, s.position) @@ -1773,6 +1773,9 @@ proc genExpr*(c: PCtx; n: PNode, requiresValue = true): int = d = 0 c.gABC(n, opcEof, d) + #echo renderTree(n) + #c.echoCode(result) + proc genParams(c: PCtx; params: PNode) = # res.sym.position is already 0 c.prc.slots[0] = (inUse: true, kind: slotFixedVar) diff --git a/examples/curlex.nim b/examples/curlex.nim deleted file mode 100644 index 21786a6ee..000000000 --- a/examples/curlex.nim +++ /dev/null @@ -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) - diff --git a/examples/iupex1.nim b/examples/iupex1.nim deleted file mode 100644 index f768fb23f..000000000 --- a/examples/iupex1.nim +++ /dev/null @@ -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() - diff --git a/tests/stdlib/tmemfiles2.nim b/tests/stdlib/tmemfiles2.nim index 28af3296a..026443e93 100644 --- a/tests/stdlib/tmemfiles2.nim +++ b/tests/stdlib/tmemfiles2.nim @@ -1,8 +1,10 @@ discard """ file: "tmemfiles2.nim" + disabled: true output: '''Full read size: 20 Half read size: 10 Data: Hello''' """ +# doesn't work on windows. fmReadWrite doesn't create a file. import memfiles, os var mm, mm_full, mm_half: MemFile diff --git a/tests/vm/tsimpleglobals.nim b/tests/vm/tsimpleglobals.nim new file mode 100644 index 000000000..27bfdce50 --- /dev/null +++ b/tests/vm/tsimpleglobals.nim @@ -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 diff --git a/tests/vm/twrongconst.nim b/tests/vm/twrongconst.nim index 68ab2757c..424ed080e 100644 --- a/tests/vm/twrongconst.nim +++ b/tests/vm/twrongconst.nim @@ -1,6 +1,6 @@ discard """ errormsg: "cannot evaluate at compile time: x" - line: 9 + line: 7 """ var x: array[100, char] -- cgit 1.4.1-2-gfad0