summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2015-09-30 21:04:21 +0200
committerAraq <rumpf_a@web.de>2015-09-30 21:13:13 +0200
commit5a003532d0660a962a978ee6763dd9b3a5425ab8 (patch)
tree32f7b2e61d5dbe41af9479bfc96cc021c38379a9
parent1a63e630ae2c0dfa54bda79aa2d0dddbf67e2cc4 (diff)
downloadNim-5a003532d0660a962a978ee6763dd9b3a5425ab8.tar.gz
fixes #2473; cleanup of some tests
-rw-r--r--compiler/vmgen.nim15
-rw-r--r--examples/curlex.nim10
-rw-r--r--examples/iupex1.nim37
-rw-r--r--tests/stdlib/tmemfiles2.nim2
-rw-r--r--tests/vm/tsimpleglobals.nim16
-rw-r--r--tests/vm/twrongconst.nim2
6 files changed, 28 insertions, 54 deletions
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]