summary refs log tree commit diff stats
path: root/tests/compile/tccgen1.nim
blob: 137dd545d74f128b83a290a9b1960090162a8699 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
type
  Feature = tuple[name: string, version: string]
  PDOMImplementation* = ref DOMImplementation
  DOMImplementation = object
    Features: seq[Feature] # Read-Only

  PNode* = ref Node
  Node = object {.inheritable.}
    attributes*: seq[PAttr]
    childNodes*: seq[PNode]
    FLocalName: string # Read-only
    FNamespaceURI: string # Read-only
    FNodeName: string # Read-only
    nodeValue*: string
    FNodeType: int # Read-only
    FOwnerDocument: PDocument # Read-Only
    FParentNode: PNode # Read-Only
    prefix*: string # Setting this should change some values... TODO!
  
  PElement* = ref Element
  Element = object of Node
    FTagName: string # Read-only
  
  PCharacterData = ref CharacterData
  CharacterData = object of Node
    data*: string
    
  PDocument* = ref Document
  Document = object of Node
    FImplementation: PDOMImplementation # Read-only
    FDocumentElement: PElement # Read-only
    
  PAttr* = ref Attr  
  Attr = object of Node
    FName: string # Read-only
    FSpecified: bool # Read-only
    value*: string
    FOwnerElement: PElement # Read-only

  PDocumentFragment* = ref DocumentFragment
  DocumentFragment = object of Node

  PText* = ref Text
  Text = object of CharacterData
  
  PComment* = ref comment
  Comment = object of CharacterData
  
  PCDataSection* = ref CDataSection
  CDataSection = object of Text
    
  PProcessingInstruction* = ref ProcessingInstruction
  ProcessingInstruction = object of Node
    data*: string
    FTarget: string # Read-only

proc `namespaceURI=`*(n: var PNode, value: string) = 
  n.FNamespaceURI = value
  
proc main = 
  var n: PNode
  new(n)
  n.namespaceURI = "test"

main()
class="p">>[a]</span> <span class="Constant">1</span>:character/<span class="Special">raw &lt;- </span>read contents <span class="Constant">2</span>:character/<span class="Special">raw &lt;- </span>read contents <span class="Constant">3</span>:character/<span class="Special">raw &lt;- </span>read contents <span class="Constant">4</span>:character/<span class="Special">raw &lt;- </span>read contents _, <span class="Constant">5</span>:boolean/<span class="Special">raw &lt;- </span>read contents memory-should-contain [ <span class="Constant">1</span><span class="Special"> &lt;- </span><span class="Constant">120</span> <span class="Comment"># x</span> <span class="Constant">2</span><span class="Special"> &lt;- </span><span class="Constant">121</span> <span class="Comment"># y</span> <span class="Constant">3</span><span class="Special"> &lt;- </span><span class="Constant">122</span> <span class="Comment"># z</span> <span class="Constant">4</span><span class="Special"> &lt;- </span><span class="Constant">10</span> <span class="Comment"># newline</span> <span class="Constant">5</span><span class="Special"> &lt;- </span><span class="Constant">1</span> <span class="Comment"># eof</span> ] ] <span class="muScenario">scenario</span> write-to-fake-file [ <span class="Constant">local-scope</span> assume-filesystem [ ] sink:address:sink:character, writer:number/routine<span class="Special"> &lt;- </span>start-writing filesystem:address:filesystem, <span class="Constant">[a]</span> sink<span class="Special"> &lt;- </span>write sink, <span class="Constant">120/x</span> sink<span class="Special"> &lt;- </span>write sink, <span class="Constant">121/y</span> close sink wait-for-routine writer contents-read-back:address:array:character<span class="Special"> &lt;- </span>slurp filesystem, <span class="Constant">[a]</span> <span class="Constant">10</span>:boolean/<span class="Special">raw &lt;- </span>equal contents-read-back, <span class="Constant">[xy]</span> memory-should-contain [ <span class="Constant">10</span><span class="Special"> &lt;- </span><span class="Constant">1</span> <span class="Comment"># file contents read back exactly match what was written</span> ] ] <span class="muScenario">scenario</span> write-to-fake-file-that-exists [ <span class="Constant">local-scope</span> assume-filesystem [ <span class="Constant">[a]</span><span class="Special"> &lt;- </span><span class="Constant">[]</span> ] sink:address:sink:character, writer:number/routine<span class="Special"> &lt;- </span>start-writing filesystem:address:filesystem, <span class="Constant">[a]</span> sink<span class="Special"> &lt;- </span>write sink, <span class="Constant">120/x</span> sink<span class="Special"> &lt;- </span>write sink, <span class="Constant">121/y</span> close sink wait-for-routine writer contents-read-back:address:array:character<span class="Special"> &lt;- </span>slurp filesystem, <span class="Constant">[a]</span> <span class="Constant">10</span>:boolean/<span class="Special">raw &lt;- </span>equal contents-read-back, <span class="Constant">[xy]</span> memory-should-contain [ <span class="Constant">10</span><span class="Special"> &lt;- </span><span class="Constant">1</span> <span class="Comment"># file contents read back exactly match what was written</span> ] ] <span class="muScenario">scenario</span> write-to-existing-file-preserves-other-files [ <span class="Constant">local-scope</span> assume-filesystem [ <span class="Constant">[a]</span><span class="Special"> &lt;- </span><span class="Constant">[]</span> <span class="Constant">[b]</span><span class="Special"> &lt;- </span>[ <span class="Constant"> |bcd|</span> ] ] sink:address:sink:character, writer:number/routine<span class="Special"> &lt;- </span>start-writing filesystem:address:filesystem, <span class="Constant">[a]</span> sink<span class="Special"> &lt;- </span>write sink, <span class="Constant">120/x</span> sink<span class="Special"> &lt;- </span>write sink, <span class="Constant">121/y</span> close sink wait-for-routine writer contents-read-back:address:array:character<span class="Special"> &lt;- </span>slurp filesystem, <span class="Constant">[a]</span> <span class="Constant">10</span>:boolean/<span class="Special">raw &lt;- </span>equal contents-read-back, <span class="Constant">[xy]</span> other-file-contents:address:array:character<span class="Special"> &lt;- </span>slurp filesystem, <span class="Constant">[b]</span> <span class="Constant">11</span>:boolean/<span class="Special">raw &lt;- </span>equal other-file-contents, <span class="Constant">[bcd</span> <span class="Constant">]</span> memory-should-contain [ <span class="Constant">10</span><span class="Special"> &lt;- </span><span class="Constant">1</span> <span class="Comment"># file contents read back exactly match what was written</span> <span class="Constant">11</span><span class="Special"> &lt;- </span><span class="Constant">1</span> <span class="Comment"># other files also continue to persist unchanged</span> ] ] <span class="muRecipe">def</span> slurp fs:address:filesystem, filename:address:array:character<span class="muRecipe"> -&gt; </span>contents:address:array:character [ <span class="Constant">local-scope</span> <span class="Constant">load-ingredients</span> source:address:source:character<span class="Special"> &lt;- </span>start-reading fs, filename buf:address:buffer<span class="Special"> &lt;- </span>new-buffer <span class="Constant">30/capacity</span> <span class="Delimiter">{</span> c:character, done?:boolean, source<span class="Special"> &lt;- </span>read source <span class="muControl">break-if</span> done? buf<span class="Special"> &lt;- </span>append buf, c <span class="muControl">loop</span> <span class="Delimiter">}</span> contents<span class="Special"> &lt;- </span>buffer-to-array buf ] </pre> </body> </html> <!-- vim: set foldmethod=manual : -->