summary refs log tree commit diff stats
path: root/tests/usingstmt
diff options
context:
space:
mode:
Diffstat (limited to 'tests/usingstmt')
-rw-r--r--tests/usingstmt/tthis.nim15
-rw-r--r--tests/usingstmt/tusingstatement.nim88
-rw-r--r--tests/usingstmt/tusingstmt.nim16
3 files changed, 16 insertions, 103 deletions
diff --git a/tests/usingstmt/tthis.nim b/tests/usingstmt/tthis.nim
deleted file mode 100644
index 83d75d08c..000000000
--- a/tests/usingstmt/tthis.nim
+++ /dev/null
@@ -1,15 +0,0 @@
-
-# bug #4177
-
-type
-  Parent = object of RootObj
-    parentField: int
-  Child = object of Parent
-    childField: int
-
-{.this: self.}
-proc sumFields(self: Child): int =
-  result = parentField + childField # Error: undeclared identifier: 'parentField'
-
-proc sumFieldsWorks(self: Child): int =
-  result = self.parentField + childField
diff --git a/tests/usingstmt/tusingstatement.nim b/tests/usingstmt/tusingstatement.nim
deleted file mode 100644
index dd4cf589d..000000000
--- a/tests/usingstmt/tusingstatement.nim
+++ /dev/null
@@ -1,88 +0,0 @@
-discard """
-  output: "Using test.Closing test."
-"""
-
-import
-  macros
-
-# This macro mimics the using statement from C#
-#
-# It's kept only as a test for the macro system
-# Nim's destructors offer a mechanism for automatic
-# disposal of resources.
-#
-macro autoClose(args: varargs[untyped]): untyped =
-  let e = callsite()
-  if e.len != 3:
-    error "Using statement: unexpected number of arguments. Got " &
-      $e.len & ", expected: 1 or more variable assignments and a block"
-
-  var args = e
-  var body = e[2]
-
-  var
-    variables : seq[NimNode]
-    closingCalls : seq[NimNode]
-
-  newSeq(variables, 0)
-  newSeq(closingCalls, 0)
-
-  for i in countup(1, args.len-2):
-    if args[i].kind == nnkExprEqExpr:
-      var varName = args[i][0]
-      var varValue = args[i][1]
-
-      var varAssignment = newNimNode(nnkIdentDefs)
-      varAssignment.add(varName)
-      varAssignment.add(newNimNode(nnkEmpty)) # empty means no type
-      varAssignment.add(varValue)
-      variables.add(varAssignment)
-
-      closingCalls.add(newCall(newIdentNode("close"), varName))
-    else:
-      error "Using statement: Unexpected expression. Got " &
-        $args[i].kind & " instead of assignment."
-
-  var varSection = newNimNode(nnkVarSection)
-  varSection.add(variables)
-
-  var finallyBlock = newNimNode(nnkStmtList)
-  finallyBlock.add(closingCalls)
-
-  # XXX: Use a template here once getAst is working properly
-  var targetAst = parseStmt"""block:
-    var
-      x = foo()
-      y = bar()
-
-    try:
-      body()
-
-    finally:
-      close x
-      close y
-  """
-
-  targetAst[0][1][0] = varSection
-  targetAst[0][1][1][0] = body
-  targetAst[0][1][1][1][0] = finallyBlock
-
-  result = targetAst
-
-type
-  TResource* = object
-    field*: string
-
-proc openResource(param: string): TResource =
-  result.field = param
-
-proc close(r: var TResource) =
-  write(stdout, "Closing " & r.field & ".")
-
-proc use(r: var TResource) =
-  write(stdout, "Using " & r.field & ".")
-
-autoClose(r = openResource("test")):
-  use r
-
-write stdout, "\n"
diff --git a/tests/usingstmt/tusingstmt.nim b/tests/usingstmt/tusingstmt.nim
new file mode 100644
index 000000000..11803878e
--- /dev/null
+++ b/tests/usingstmt/tusingstmt.nim
@@ -0,0 +1,16 @@
+type
+  Foo = object
+
+using
+  c: Foo
+  x, y: int
+
+proc usesSig(c) = discard
+
+proc foobar(c, y) = discard
+
+usesSig(Foo())
+foobar(Foo(), 123)
+doAssert not compiles(usesSig(123))
+doAssert not compiles(foobar(Foo(), Foo()))
+doAssert not compiles(foobar(123, 123))