summary refs log tree commit diff stats
path: root/tests/run/tusingstatement.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run/tusingstatement.nim')
-rw-r--r--tests/run/tusingstatement.nim102
1 files changed, 0 insertions, 102 deletions
diff --git a/tests/run/tusingstatement.nim b/tests/run/tusingstatement.nim
deleted file mode 100644
index 0017af556..000000000
--- a/tests/run/tusingstatement.nim
+++ /dev/null
@@ -1,102 +0,0 @@
-discard """
-  file: "tusingstatement.nim"
-  output: "Using test.Closing test."
-"""
-
-import 
-  macros
-
-# This macro mimics the using statement from C#
-#
-# XXX: 
-#  It doen't match the C# version exactly yet.
-#  In particular, it's not recursive, which prevents it from dealing 
-#  with exceptions thrown from the variable initializers when multiple.
-#  variables are used.
-#
-#  Also, since nimrod relies less on exceptions in general, a more
-#  idiomatic definition could be:
-#  var x = init()
-#  if opened(x): 
-#    try:
-#      body
-#    finally:
-#      close(x)
-#
-#  `opened` here could be an overloaded proc which any type can define.
-#  A common practice can be returing an Optional[Resource] obj for which
-#  `opened` is defined to `optional.hasValue`
-macro using(e: expr) : stmt =
-  if e.len != 2:
-    error "Using statement: unexpected number of arguments. Got " &
-      $e.len & ", expected: 1 or more variable assignments and a block"
-
-  var args = e[0]
-  var body = e[1]
-  
-  var 
-    variables : seq[PNimrodNode]
-    closingCalls : seq[PNimrodNode]
-
-  newSeq(variables, 0)
-  newSeq(closingCalls, 0)
-
-  for i in countup(1, args.len-1):
-    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(!"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
-  
-  return 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 & ".")
-
-using(r = openResource("test")):
-  use r
-
-