tvariantstack.nim 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. discard """
  2. output: "came here"
  3. """
  4. #BUG
  5. type
  6. TAnyKind = enum
  7. nkInt,
  8. nkFloat,
  9. nkString
  10. PAny = ref TAny
  11. TAny = object
  12. case kind: TAnyKind
  13. of nkInt: intVal: int
  14. of nkFloat: floatVal: float
  15. of nkString: strVal: string
  16. TStack* = object
  17. list*: seq[TAny]
  18. proc newStack(): TStack =
  19. result.list = @[]
  20. proc push(Stack: var TStack, item: TAny) =
  21. var nSeq: seq[TAny] = @[item]
  22. for i in items(Stack.list):
  23. nSeq.add(i)
  24. Stack.list = nSeq
  25. proc pop(Stack: var TStack): TAny =
  26. result = Stack.list[0]
  27. Stack.list.delete(0)
  28. var stack = newStack()
  29. var s: TAny
  30. s.kind = nkString
  31. s.strVal = "test"
  32. stack.push(s)
  33. var nr: TAny
  34. nr.kind = nkint
  35. nr.intVal = 78
  36. stack.push(nr)
  37. var t = stack.pop()
  38. echo "came here"
  39. # another regression:
  40. type
  41. LexerToken* = enum
  42. ltYamlDirective, ltYamlVersion, ltTagDirective, ltTagShorthand,
  43. ltTagUri, ltUnknownDirective, ltUnknownDirectiveParams, ltEmptyLine,
  44. ltDirectivesEnd, ltDocumentEnd, ltStreamEnd, ltIndentation, ltQuotedScalar,
  45. ltScalarPart, ltBlockScalarHeader, ltBlockScalar, ltSeqItemInd, ltMapKeyInd,
  46. ltMapValInd, ltBraceOpen, ltBraceClose, ltBracketOpen, ltBracketClose,
  47. ltComma, ltLiteralTag, ltTagHandle, ltAnchor, ltAlias
  48. const tokensWithValue =
  49. {ltScalarPart, ltQuotedScalar, ltYamlVersion, ltTagShorthand, ltTagUri,
  50. ltUnknownDirective, ltUnknownDirectiveParams, ltLiteralTag, ltAnchor,
  51. ltAlias, ltBlockScalar}
  52. type
  53. TokenWithValue = object
  54. case kind: LexerToken
  55. of tokensWithValue:
  56. value: string
  57. of ltIndentation:
  58. indentation: int
  59. of ltTagHandle:
  60. handle, suffix: string
  61. else: discard
  62. proc sp(v: string): TokenWithValue =
  63. # test.nim(27, 17) Error: a case selecting discriminator 'kind' with value 'ltScalarPart' appears in the object construction, but the field(s) 'value' are in conflict with this value.
  64. TokenWithValue(kind: ltScalarPart, value: v)
  65. let a = sp("test")