annotate nworker.rhope @ 74:a844c623c7df

Add support for Worker type
author Mike Pavone <pavone@retrodev.com>
date Thu, 01 Jul 2010 21:32:08 -0400
parents 6a1a7d5cc2d9
children 0083b2f7b3c7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1 Import extendlib.rhope
20
b715532225c0 Differentiate between method and normal calls in dataflow graph compiler
Mike Pavone <pavone@retrodev.com>
parents: 19
diff changeset
2 Import cbackend.rhope
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
3 Import number.rhope
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
4 Import boolean.rhope
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
5
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
6 Blueprint Condition Set
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
7 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
8 Variables
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
9 Subsets
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
10 Condition Type
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
11 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
12
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
13 AndSet[:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
14 {
48
a24eb366195c Fixed some bugs introduced in previous commit and moved definition of integer methods out of runtime and into the compiler
Mike Pavone <pavone@retrodev.com>
parents: 47
diff changeset
15 out <- [[[Build["Condition Set"]]Variables <<[Dictionary[]]]Subsets <<[Dictionary[]]]Condition Type <<["And"]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
16 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
17
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
18 OrSet[:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
19 {
48
a24eb366195c Fixed some bugs introduced in previous commit and moved definition of integer methods out of runtime and into the compiler
Mike Pavone <pavone@retrodev.com>
parents: 47
diff changeset
20 out <- [[[Build["Condition Set"]]Variables <<[Dictionary[]]]Subsets <<[Dictionary[]]]Condition Type <<["Or"]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
21 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
22
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
23 To String@Condition Set[set:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
24 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
25 out <- [[[[[set]Condition Type >>
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
26 ]Append["Set:\n\tVariables:\n\t\t"]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
27 ]Append[ Join[Keys[[set]Variables >>], "\n\t\t"] ]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
28 ]Append["\n\tSubsets:\n\t\t"]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
29 ]Append[ Join[Keys[[set]Subsets >>], "\n\t\t"] ]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
30 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
31
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
32 Add Condition@Condition Set[set,cond:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
33 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
34 If[[Type Of[cond]] = ["Condition Set"]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
35 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
36 out <- [set]Subsets <<[ [[set]Subsets>>]Set[[cond]To String, cond] ]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
37 }{
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
38 out <- [set]Variables <<[ [[set]Variables >>]Set[cond, Yes] ]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
39 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
40 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
41
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
42 =@Condition Set[set1,set2:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
43 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
44 ,out <- If[[[set1]Condition Type >>] = [[set2]Condition Type >>]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
45 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
46 ,out <- If[[[set1]Variables >>] = [[set2]Variables >>]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
47 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
48 out,out <- If[[[set1]Subsets >>] = [[set2]Subsets >>]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
49 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
50 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
51 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
52
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
53 _For Backend Var[current,junk,variable,type:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
54 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
55 out <- [[<String@Worker[[type]Append["Cond"]]]Do[ [[()]Append[current]]Append[variable] ]]Index[0]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
56 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
57
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
58 _For Backend Subset[current,subset,type:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
59 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
60 [subset]For Backend
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
61 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
62 out <- [[<String@Worker[[type]Append["Cond"]]]Do[ [[()]Append[current]]Append[~] ]]Index[0]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
63 }{
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
64 out <- current
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
65 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
66 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
67
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
68 Empty?@Condition Set[set:not empty,empty]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
69 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
70 [[set]Variables >>]First
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
71 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
72 not empty <- Yes
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
73 }{
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
74 ,empty <- [[set]Subsets >>]First Non-empty Set
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
75 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
76 not empty <- Yes
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
77 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
78 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
79 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
80
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
81 _First Non-empty Set[setlist,index:out,none]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
82 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
83 current <- [setlist]Index[index]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
84 [[current]Variables >>]First
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
85 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
86 out <- index
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
87 }{
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
88 ,trynext <- [[current]Subsets >>]First Non-empty Set
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
89 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
90 out <- index
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
91 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
92 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
93 Val[trynext]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
94 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
95 ,none <- [setlist]Next[index]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
96 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
97 out,none <- _First Non-empty Set[setlist, ~]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
98 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
99 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
100 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
101
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
102 First Non-empty Set[setlist:index,none]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
103 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
104 ,none <- [setlist]First
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
105 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
106 index,none <- _First Non-empty Set[setlist,~]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
107 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
108 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
109
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
110 For Backend@Condition Set[set:out,none]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
111 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
112 firstvar <- [[set]Variables >>]First
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
113 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
114 [[set]Variables >>]Next[~]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
115 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
116 vars <- _Fold[[set]Variables >>, ~, firstvar, ["_For Backend Var"]Set Input[3, [set]Condition Type >>]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
117 }{
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
118 vars <- Val[firstvar]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
119 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
120 out <- Fold[["_For Backend Subset"]Set Input[2, [set]Condition Type >>], vars, [set]Subsets >>]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
121 }{
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
122 [[set]Subsets >>]First Non-empty Set
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
123 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
124 firstsub <- [[[set]Subsets >>]Index[~]]For Backend
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
125 [[set]Subsets >>]Next[~]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
126 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
127 out <- _Fold[[set]Subsets >>, ~, firstsub, ["_For Backend Subset"]Set Input[2, [set]Condition Type >>]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
128 }{
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
129 out <- Val[firstsub]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
130 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
131 }{
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
132 none <- Yes
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
133 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
134 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
135 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
136
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
137 Set@Range[range,index,val:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
138 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
139 out <- [[()]Concatenate[range]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
140 ]Set[index,val]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
141 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
142
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
143 List of Lists[num:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
144 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
145 out <- Fold[["Append"]Set Input[1, ()],(), Range[0,num]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
146 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
147
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
148 Blueprint Worker Ref
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
149 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
150 Name
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
151 Convention
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
152 Inputs
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
153 Outputs
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
154 Is Method?
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
155 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
156
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
157 Worker Ref[name,convention,inputs,outputs,ismethod?:out]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
158 {
47
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
159 out <- [[[[[Build["Worker Ref"]]Name <<[name]]Convention <<[convention]]Inputs <<[inputs]]Outputs <<[outputs]]Is Method? <<[ismethod?]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
160 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
161
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
162 Blueprint Node Ref
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
163 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
164 Index
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
165 IO Num
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
166 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
167
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
168 Node Ref[index,ionum:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
169 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
170 out <- [[Build["Node Ref"]]Index <<[index]]IO Num <<[ionum]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
171 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
172
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
173 =@Node Ref[left,right:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
174 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
175 ,out <- If[[[left]Index >>] = [[right]Index >>]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
176 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
177 out <- [[left]IO Num>>] = [[right]IO Num >>]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
178 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
179 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
180
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
181 Blueprint NWorker Node
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
182 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
183 Type
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
184 Data
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
185 Inputs
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
186 Input Types
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
187 Outputs
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
188 Output Types
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
189 Wires From
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
190 Wires To
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
191 Conditions
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
192 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
193
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
194 Wire To@NWorker Node[node,from,output,pre input:out]
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
195 {
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
196 existing cons <- [[node]Wires To >>]Index[input] {}
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
197 { existing cons <- () }
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
198 input <- [pre input]+[1]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
199 out <- [node]Wires To <<[
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
200 [[node]Wires To >>]Set[input,
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
201 [existing cons]Append[Node Ref[from,output]]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
202 ]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
203 ]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
204 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
205
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
206 Wire From@NWorker Node[node,to,input,output:out]
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
207 {
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
208 existing cons <- [[node]Wires From >>]Index[output] {}
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
209 { exist cons <- () }
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
210 out <- [node]Wires From <<[
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
211 [[node]Wires From >>]Set[output,
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
212 [existing cons]Append[Node Ref[to,input]]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
213 ]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
214 ]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
215 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
216
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
217 _Has Input Types@NWorker Node[node,input num:does,does not]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
218 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
219 does <- If[[input num] > [[node]Inputs >>]] {}
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
220 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
221 ,does not <- [[node]Input Types >>]Index[input num]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
222 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
223 count <- [~]Index[1]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
224 ,does not <- If[[count] = [[[[node]Wires To >>]Index[input num]]Length]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
225 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
226 does,does not <- [node]_Has Input Types[[input num]+[1]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
227 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
228 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
229 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
230 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
231
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
232 Has Input Types?@NWorker Node[node:does,does not]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
233 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
234 If[[[[node]Inputs >>]Length] > [0]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
235 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
236 does,does not <- _Has Input Types[node,0]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
237 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
238 does <- Yes
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
239 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
240 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
241
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
242 _Dependency[dlist,ref:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
243 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
244 [dlist]Find[ref]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
245 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
246 out <- dlist
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
247 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
248 out <- [dlist]Append[ref]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
249 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
250 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
251
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
252 Dependencies@NWorker Node[node:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
253 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
254 out <- Fold[["Fold"]Set Input[0, "_Dependency"], (), [node]Wires To >>]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
255 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
256
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
257
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
258 NWorker Node[type,data,inputs,outputs:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
259 {
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
260 out <- [[[[[[[[[Build["NWorker Node"]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
261 ]Type <<[type]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
262 ]Data <<[data]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
263 ]Inputs <<[inputs]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
264 ]Outputs <<[outputs]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
265 ]Wires From <<[List of Lists[outputs]]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
266 ]Wires To <<[List of Lists[[inputs]+[1]]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
267 ]Conditions <<[AndSet[]]
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
268 ]Input Types <<[()]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
269 ]Output Types <<[()]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
270 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
271
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
272 Blueprint NWorker
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
273 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
274 Convention
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
275 Nodes
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
276 Inputs
37
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
277 Input Types
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
278 Outputs
37
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
279 Output Types
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
280 Uses
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
281 NodeResults
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
282 Free Temps
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
283 Name
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
284 Builtin?
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
285 Library
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
286 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
287
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
288 NWorker[convention:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
289 {
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
290 out <- [[[[[[[[[Build["NWorker"]]Convention <<[convention]]Nodes <<[()]]Inputs <<[()]]Outputs <<[()]]Input Types <<[()]]Output Types <<[()]]Name <<["Anonymous"]]Builtin? <<[No]]Library << [""]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
291 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
292
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
293 Add Node@NWorker[worker,type,data,inputs,outputs:out,node index]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
294 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
295 out <- [worker]Nodes <<[[[worker]Nodes >>]Append[NWorker Node[type,data,inputs,outputs]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
296 node index <- [[worker]Nodes >>]Length
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
297 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
298
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
299 Propagate Type[nodelist,dest,prog,worker,type:out]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
300 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
301 node <- [nodelist]Index[[dest]Index >>]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
302
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
303 [[node]Input Types >>]Index[[dest]IO Num >>]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
304 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
305 existing type <- [~]Index[0]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
306 new count <- [[~]Index[1]]+[1]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
307 If[[[existing type]Name >>] = [[type]Name >>]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
308 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
309 If[[[existing type]Variant >>] = [[type]Variant >>]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
310 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
311 If[[[existing type]Params >>] = [[type]Params >>]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
312 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
313 new type <- Val[existing type]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
314 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
315 new variant <- [existing type]Variant >>
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
316 new params <- ()
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
317 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
318 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
319 new variant <- "Boxed"
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
320 If[[[existing type]Params >>] = [[type]Params >>]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
321 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
322 new params <- [existing type]Params >>
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
323 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
324 new params <- ()
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
325 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
326 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
327 new type <- [[existing type]Set Variant[new variant]]Params <<[new params]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
328 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
329 new type <- Type Instance["Any Type"]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
330 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
331 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
332 new type <- Val[type]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
333 new count <- 1
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
334 }
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
335 new node <- [node]Input Types <<[
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
336 [ [node]Input Types >> ]Set[ [dest]IO Num >>, [[()]Append[new type]]Append[new count] ]
47
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
337 ]
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
338 out <- Infer Types Node[[nodelist]Set[[dest]Index >>, new node], new node, [dest]Index >>, prog, worker]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
339 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
340
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
341 Propagate Types[nodelist,dests,output num,prog,worker,source node:out]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
342 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
343 out <- Fold[[[["Propagate Type"]Set Input[2, prog]]Set Input[3, worker]]Set Input[4, [[source node]Output Types >>]Index[output num]], nodelist, dests]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
344 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
345
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
346 Infer Types Node[nodelist,node,index,prog,worker:out]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
347 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
348 If[[[node]Type >>] = ["const"]]
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
349 {
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
350 const type <- Type Of[[node]Data >>]
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
351 //Temporary hack
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
352 If[[const type] = ["Whole Number"]]
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
353 {
47
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
354 outtype <- Type Instance["Int32"]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
355 }{
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
356 If[[const type] = ["Type Instance"]]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
357 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
358 outtype <- Type Instance["Blueprint"]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
359 }{
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
360 If[[const type] = ["Machine Integer"]]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
361 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
362 If[[[node]Data >>]Signed? >>]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
363 { base <- "Int" }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
364 { base <- "UInt" }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
365
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
366 outtype <- Type Instance[[base]Append[ [[node]Data >>]Size >> ]]
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
367 }{
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
368 If[[const type] = ["Worker Literal"]]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
369 {
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
370 outtype <- Type Instance["Worker"]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
371 }{
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
372 outtype <- Type Instance[const type]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
373 }
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
374 }
47
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
375 }
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
376 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
377 nextnode <- [node]Output Types <<[ [()]Append[outtype] ]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
378
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
379 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
380 If[[[node]Type >>] = ["input"]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
381 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
382 nextnode <- [node]Output Types <<[ [()]Append[ [[worker]Input Types >>]Index[[node]Data >>] ] ]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
383 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
384 If[[[node]Type >>] = ["output"]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
385 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
386 out <- nodelist
73
6a1a7d5cc2d9 Add some error checking, cleanup output and add a bad test file
Mike Pavone <pavone@retrodev.com>
parents: 69
diff changeset
387
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
388 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
389 [node]Has Input Types?
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
390 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
391 If[[[node]Type >>] = ["setfield"]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
392 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
393 nextnode <- [node]Output Types <<[ [()]Append[ [[[node]Input Types >>]Index[0]]Index[0] ] ]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
394 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
395 If[[[node]Type >>] = ["getfield"]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
396 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
397 type <- [[[node]Input Types >>]Index[0]]Index[0]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
398 If[[[type]Name >>] = ["Any Type"]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
399 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
400 outtype <- Val[type]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
401 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
402 outtype <- [prog]Find Field[[node]Data >>, type] {}
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
403 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
404 //TODO: Return errors rather than printing them
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
405 Print[
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
406 [[[[["Type "
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
407 ]Append[[type]Name >>]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
408 ]Append[" does not have a field named "]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
409 ]Append[[node]Data >>]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
410 ]Append[" in worker "]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
411 ]Append[worker name]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
412 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
413 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
414 nextnode <- [node]Output Types <<[ [()]Append[outtype] ]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
415 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
416 worker name <- [[node]Data >>]Name >>
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
417 [prog]Is Method?[worker name]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
418 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
419 first arg type <- [[[node]Input Types >>]Index[0]]Index[0]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
420 If[[[first arg type]Name >>] = ["Any Type"]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
421 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
422 outtypes <- Fold[["Append"]Set Input[1, Type Instance["Any Type"]], (), Range[0, [node]Inputs >>]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
423 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
424 worker def <- [prog]Find Method[worker name, first arg type] {}
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
425 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
426 //TODO: Return errors instead of printing them
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
427 Print[
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
428 [[[[["Type "
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
429 ]Append[[first arg type]Name >>]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
430 ]Append[" does not support method "]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
431 ]Append[worker name]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
432 ]Append[" in worker "]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
433 ]Append[ [worker]Name >> ]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
434 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
435 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
436 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
437 worker def <- [prog]Find Worker Def[worker name]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
438 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
439 outtypes <- [worker def]Output Types >>
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
440 nextnode <- [node]Output Types <<[ outtypes ]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
441 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
442 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
443 }{
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
444 out <- nodelist
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
445 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
446 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
447 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
448 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
449
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
450 Val[nextnode]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
451 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
452 nextlist <- [nodelist]Set[index, nextnode]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
453 out <- Fold[[[["Propagate Types"]Set Input[3, prog]]Set Input[4, worker]]Set Input[5, nextnode], nodelist, [nextnode]Wires From >>]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
454 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
455 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
456
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
457 Infer Types@NWorker[worker,prog:out]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
458 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
459 out <- [worker]Nodes <<[Fold[[["Infer Types Node"]Set Input[3, prog]]Set Input[4, worker], [worker]Nodes >>, [worker]Nodes >>]]
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
460 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
461
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
462 Add Worker Call@NWorker[worker,tocall:out,node index]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
463 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
464 out, node index <- [worker]Add Node["call",tocall,[tocall]Inputs >>,[tocall]Outputs >>]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
465 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
466
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
467 Add Constant@NWorker[worker,constant:out,node index]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
468 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
469 out, node index <- [worker]Add Node["const",constant,0,1]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
470 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
471
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
472 Add Input@NWorker[worker,name,number:out,node index]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
473 {
37
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
474 out,node index <- [worker]Add Typed Input[name,number,Type Instance["Any Type"]]
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
475 }
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
476
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
477 Add Typed Input@NWorker[worker,name,number,type:out,node index]
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
478 {
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
479 ,node index <- [worker]Add Node["input",number,0,1]
37
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
480 {
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
481 out <- [[~]Inputs <<[[[~]Inputs >>]Set[number,name]]
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
482 ]Input Types <<[[[~]Input Types >>]Set[number,type]]
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
483 }
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
484 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
485
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
486 Add Output@NWorker[worker,name,number:out,node index]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
487 {
37
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
488 out,node index <- [worker]Add Typed Output[name,number,Type Instance["Any Type"]]
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
489 }
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
490
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
491 Add Typed Output@NWorker[worker,name,number,type:out,node index]
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
492 {
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
493 ,node index <- [worker]Add Node["output",number,1,0]
37
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
494 {
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
495 out <- [[~]Outputs <<[[[~]Outputs >>]Set[number,name]]
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
496 ]Output Types <<[[[~]Output Types >>]Set[number,type]]
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
497 }
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
498 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
499
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
500 Add Object Get@NWorker[worker,fieldname:out,node index]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
501 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
502 out, node index <- [worker]Add Node["getfield",fieldname,1,1]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
503 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
504
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
505 Add Object Set@NWorker[worker,fieldname:out,node index]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
506 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
507 out, node index <- [worker]Add Node["setfield",fieldname,2,1]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
508 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
509
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
510 Add Wire@NWorker[worker,from,output,to,input:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
511 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
512 fromw <- [[[worker]Nodes >>]Index[from]]Wire From[to,input,output]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
513 tow <- [[[worker]Nodes >>]Index[to]]Wire To[from,output,input]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
514 nodes <- [[[worker]Nodes >>]Set[from, fromw]]Set[to, tow]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
515 out <- [worker]Nodes <<[nodes]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
516 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
517
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
518 Uses@NWorker[worker,uses:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
519 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
520 out <- [worker]Uses <<[uses]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
521 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
522
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
523 _No Dependencies[list,node,index:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
524 {
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
525 [[node]Wires To>>]Index[1]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
526 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
527 out <- Val[list]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
528 }{
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
529 [[[node]Wires To>>]Index[0]]First
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
530 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
531 out <- Val[list]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
532 }{
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
533 out <- [list]Append[index]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
534 }
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
535 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
536 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
537
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
538 No Dependencies@NWorker[worker:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
539 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
540 out <- Fold["_No Dependencies", (), [worker]Nodes >>]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
541 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
542
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
543 _Collect Dests[candidates,wire:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
544 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
545 out <- [candidates]Set[[wire]Index >>, Yes]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
546 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
547
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
548 Collect Dests@NWorker[worker,candidates,node index:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
549 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
550 out <- Fold[["Fold"]Set Input[0, "_Collect Dests"], candidates, [[[worker]Nodes >>]Index[node index]]Wires From >>]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
551 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
552
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
553 Check Dependency@NWorker[worker,nodes,wires,wire index:met?]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
554 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
555 ref <- [wires]Index[wire index]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
556 [nodes]Find[[ref]Index >>]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
557 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
558 [wires]Next[wire index]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
559 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
560 met? <- [worker]Check Dependency[nodes,wires,~]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
561 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
562 met? <- Yes
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
563 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
564 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
565 met? <- No
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
566 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
567 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
568 _Check Dependencies@NWorker[worker,nodes,inputs,input index:met?]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
569 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
570 wires <- [inputs]Index[input index]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
571 [wires]First
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
572 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
573 current met? <- [worker]Check Dependency[nodes, wires, ~]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
574 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
575 current met? <- Yes
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
576 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
577 If[current met?]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
578 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
579 [inputs]Next[input index]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
580 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
581 met? <- [worker]_Check Dependencies[nodes,inputs,~]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
582 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
583 met? <- Yes
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
584 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
585 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
586 met? <- No
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
587 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
588 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
589
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
590 Check Dependencies@NWorker[worker,nodes,candidate:met?]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
591 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
592 inputs <- [[[worker]Nodes >>]Index[candidate]]Wires To >>
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
593 [inputs]First
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
594 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
595 met? <- [worker]_Check Dependencies[nodes, inputs, ~]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
596 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
597 met? <- Yes
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
598 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
599 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
600
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
601 Dependants@NWorker[worker,direct nodes,nodes:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
602 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
603 candidates <- Keys[Fold[["Collect Dests"]Set Input[0,worker], (), direct nodes]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
604 out <- Filter[candidates, [["Check Dependencies"]Set Input[0, worker]]Set Input[1, nodes]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
605 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
606
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
607 _Dependency Groups@NWorker[worker,last,all,grouped:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
608 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
609 current <- [worker]Dependants[last,all]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
610 [current]First
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
611 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
612 out <- [worker]_Dependency Groups[current, [all]Concatenate[current], [grouped]Append[current]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
613 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
614 out <- grouped
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
615 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
616 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
617 Dependency Groups@NWorker[worker:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
618 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
619 no deps <- [worker]No Dependencies
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
620 out <- [worker]_Dependency Groups[no deps, no deps, [()]Append[no deps]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
621 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
622
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
623 Format Input@NWorker[worker,noderef:out]
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
624 {
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
625 node <- [[worker]Nodes >>]Index[[noderef]Index >>]
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
626 [("call","getfield","setfield")]Find[[node]Type >>]
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
627 {
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
628 out <- AddRef[ [[["__result_"]Append[[noderef]Index >>]]Append["_"]]Append[[noderef]IO Num >>] ]
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
629 }{
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
630 If[[[node]Type >>] = ["input"]]
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
631 {
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
632 input name <- [[worker]Inputs >>]Index[ [node]Data >> ]
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
633 out <- AddRef[input name]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
634 }{
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
635 If[[[node]Type >>] = ["const"]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
636 {
37
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
637 If[[Type Of[[node]Data >>]] = ["Type Instance"]]
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
638 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
639 //TODO: Support parametric types
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
640 datstring <- [[node]Data >>]Name >>
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
641 }{
50
689fb73e7612 Add support for various integer literals and add support for raw pointers to objects and raw pointers to arrays in the FFI
Mike Pavone <pavone@retrodev.com>
parents: 49
diff changeset
642 If[[Type Of[[node]Data >>]] = ["Machine Integer"]]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
643 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
644 If[[[node]Data >>]Signed? >>]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
645 { s <- "i" }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
646 { s <- "u" }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
647 datstring <- [[[[node]Data >>]Value >>]Append[s]]Append[[[node]Data >>]Size >>]
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
648 }{
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
649 If[[Type Of[[node]Data >>]] = ["Worker Literal"]]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
650 {
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
651 If[[[[[node]Data >>]Args >>]Length] > [0]]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
652 {
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
653 datstring <- [[["Arg "]Append[[noderef]Index >>]]Append[" "]]Append[[worker]Name >>]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
654 }{
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
655 datstring <- [[node]Data >>]Name >>
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
656 }
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
657 }{
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
658 datstring <- [node]Data >>
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
659 }
50
689fb73e7612 Add support for various integer literals and add support for raw pointers to objects and raw pointers to arrays in the FFI
Mike Pavone <pavone@retrodev.com>
parents: 49
diff changeset
660 }
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
661 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
662 out <- Constant[[[Type Of[[node]Data >>]]Append["_"]]Append[datstring]]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
663
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
664 }
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
665 }
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
666 }
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
667 }
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
668
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
669 Collect Input@NWorker[worker,nodeinput:out]
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
670 {
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
671 inputchoices <- Map[nodeinput, ["Format Input"]Set Input[0, worker]]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
672
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
673 [inputchoices]First
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
674 {
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
675 first <- [inputchoices]Index[~]
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
676 [inputchoices]Next[~]
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
677 {
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
678 out <- _Fold[inputchoices, ~, first, "OrValue"]
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
679 }{
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
680 out <- Val[first]
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
681 }
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
682 }{
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
683 out <- No
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
684 }
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
685 }
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
686
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
687 Collect Inputs@NWorker[worker,node:out]
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
688 {
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
689 out <- Map[Tail[[node]Wires To>>, 1], ["Collect Input"]Set Input[0, worker]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
690 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
691
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
692 Collect Input Condition@NWorker[worker,set,noderef:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
693 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
694 node <- [[worker]Nodes >>]Index[ [noderef]Index >> ]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
695 If[[[node]Outputs >>] > [1]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
696 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
697 out <- [set]Add Condition[ [["__result_"]Append[[noderef]Index >>]]Append[["_"]Append[[noderef]IO Num >>]] ]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
698 }{
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
699 out <- [set]Add Condition[[node]Conditions >>]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
700 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
701 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
702
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
703 Collect Condition@NWorker[worker,set,nodeinput:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
704 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
705 out <- [set]Add Condition[Fold[["Collect Input Condition"]Set Input[0, worker], OrSet[], nodeinput]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
706 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
707
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
708 Collect Conditions@NWorker[worker,node:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
709 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
710 out <- Fold[["Collect Condition"]Set Input[0, worker], AndSet[], [node]Wires To>>]
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
711 }
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
712
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
713 Save Result[func,num,node index:out]
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
714 {
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
715 out var <- [[["__result_"]Append[node index]]Append["_"]]Append[num]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
716 /*out <- [[func]Allocate Var[out var, "Any Type"]
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
717 ]Move[Result[num], out var]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
718 */
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
719 out <- [func]Move[Result[num], out var]
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
720 }
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
721
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
722 Compile Call Node[node,program,func,inputs,node index:out]
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
723 {
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
724 If[[[node]Type >>] = ["getfield"]]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
725 {
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
726 with call <- [func]Get Field Call[[node]Data >>, [inputs]Index[0]]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
727 }{
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
728 If[[[node]Type >>] = ["setfield"]]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
729 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
730 with call <- [func]Set Field Call[[node]Data >>, [inputs]Index[0], [inputs]Index[1]]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
731 }{
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
732 [program]Method?[[[node]Data >>]Name >>]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
733 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
734 with call <- [func]Method Call[[[node]Data >>]Name >>, inputs]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
735 }{
69
d0ce696786cc Clean up debug print statements a bit. Fix bug that prevented workers that took no inputs from working. Remove workaround in Array for said bug.
Mike Pavone <pavone@retrodev.com>
parents: 66
diff changeset
736 with call <- [func]Call[[[node]Data >>]Name >>, inputs]
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
737 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
738 }
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
739 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
740 out <- Fold[["Save Result"]Set Input[2, node index], with call, Range[0, [node]Outputs >>]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
741 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
742
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
743 Compile Node@NWorker[worker,program,func,nodes,current:out,out worker]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
744 {
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
745 node index <- [nodes]Index[current]
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
746 node <- [[worker]Nodes >>]Index[node index]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
747 conditions <- [worker]Collect Conditions[node]
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
748 [("call","getfield","setfield")]Find[[node]Type >>]
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
749 {
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
750 inputs <- [worker]Collect Inputs[node]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
751 [conditions]For Backend
20
b715532225c0 Differentiate between method and normal calls in dataflow graph compiler
Mike Pavone <pavone@retrodev.com>
parents: 19
diff changeset
752 {
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
753 stream <- [func]Instruction Stream
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
754 nfunc <- [func]Do If[~, nstream]
20
b715532225c0 Differentiate between method and normal calls in dataflow graph compiler
Mike Pavone <pavone@retrodev.com>
parents: 19
diff changeset
755 }{
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
756 stream <- Val[func]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
757 nfunc <- Val[nstream]
20
b715532225c0 Differentiate between method and normal calls in dataflow graph compiler
Mike Pavone <pavone@retrodev.com>
parents: 19
diff changeset
758 }
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
759 nstream <- Compile Call Node[node, program, stream, inputs, node index]
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
760 }{
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
761 If[[[node]Type >>] = ["output"]]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
762 {
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
763 inputs <- [worker]Collect Inputs[node]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
764 [conditions]For Backend
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
765 {
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
766 stream <- [func]Instruction Stream
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
767 nfunc <- [func]Do If[~, nstream]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
768 }{
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
769 stream <- Val[func]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
770 nfunc <- Val[nstream]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
771 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
772 nstream <- [stream]Move[[inputs]Index[0], [[worker]Outputs >>]Index[ [node]Data >> ] ]
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
773 }{
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
774 If[[[node]Type >>] = ["const"]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
775 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
776 //TODO: Handle list constants
37
640f541e9116 Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
777 If[[Type Of[[node]Data >>]] = ["Type Instance"]]
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
778 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
779 //TODO: Support parametric types
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
780 datstring <- [[node]Data >>]Name >>
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
781 }{
50
689fb73e7612 Add support for various integer literals and add support for raw pointers to objects and raw pointers to arrays in the FFI
Mike Pavone <pavone@retrodev.com>
parents: 49
diff changeset
782 If[[Type Of[[node]Data >>]] = ["Machine Integer"]]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
783 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
784 If[[[node]Data >>]Signed? >>]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
785 { s <- "i" }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
786 { s <- "u" }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
787 datstring <- [[[[node]Data >>]Value >>]Append[s]]Append[[[node]Data >>]Size >>]
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
788 }{
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
789 If[[Type Of[[node]Data >>]] = ["Worker Literal"]]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
790 {
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
791 If[[[[[node]Data >>]Args >>]Length] > [0]]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
792 {
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
793 datstring <- [[["Arg "]Append[node index]]Append[" "]]Append[[worker]Name >>]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
794 }{
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
795 datstring <- [[node]Data >>]Name >>
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
796 }
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
797 }{
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
798 datstring <- [node]Data >>
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
799 }
50
689fb73e7612 Add support for various integer literals and add support for raw pointers to objects and raw pointers to arrays in the FFI
Mike Pavone <pavone@retrodev.com>
parents: 49
diff changeset
800 }
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
801 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
802 nfunc <- [func]Register Constant[[[Type Of[[node]Data >>]]Append["_"]]Append[datstring], [node]Data >>]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
803 }{
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
804 nfunc <- Val[func]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
805 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
806
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
807 }
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
808 }
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
809 If[[[node]Outputs >>] = [0]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
810 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
811 nworker <- Val[worker]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
812 }{
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
813 nworker <- [worker]Nodes <<[ [[worker]Nodes >>]Set[node index, [node]Conditions <<[conditions]] ]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
814 }
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
815 [nodes]Next[current]
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
816 {
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
817 out,out worker <- [nworker]Compile Node[program,nfunc,nodes,~]
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
818 }{
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
819 out <- Val[nfunc]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
820 out worker <- Val[nworker]
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
821 }
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
822 }
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
823
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
824 Compile Group@NWorker[worker,program,func,groups,current:out,out worker]
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
825 {
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
826 nodes <- [groups]Index[current]
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
827 [nodes]First
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
828 {
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
829 nfunc,nworker <- [worker]Compile Node[program,func,nodes,~]
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
830 }{
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
831 nfunc <- Val[func]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
832 nworker <- Val[worker]
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
833 }
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
834 [groups]Next[current]
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
835 {
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
836 out,out worker <- [nworker]Compile Group[program,nfunc,groups,~]
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
837 }{
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
838 out <- Val[nfunc]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
839 out worker <- Val[nworker]
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
840 }
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
841 }
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
842
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
843 Release Var@NWorker[worker,func,name:out]
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
844 {
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
845 //_result_index_ionum
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
846 parts <- [name]Split["_"]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
847 index <- <String@Whole Number[ [parts]Index[2] ]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
848 io num <- <String@Whole Number[ [parts]Index[3] ]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
849 node <- [[worker]Nodes >>]Index[index]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
850 do if <- If[[[node]Outputs >>] > [1]] {}
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
851 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
852 ,do if <- [[node]Conditions >>]Empty?
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
853 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
854 out <- [func]Release[name]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
855 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
856 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
857
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
858 Val[do if]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
859 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
860 stream <- [[func]Instruction Stream]Release[name]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
861 out <- [func]Do If[name, stream]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
862 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
863 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
864
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
865 Result Var[vars,io num,index:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
866 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
867 out <- [vars]Append[[[["__result_"]Append[index]]Append["_"]]Append[io num]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
868 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
869
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
870 Node Result Vars[vars,node,index:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
871 {
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
872 [("call","getfield","setfield")]Find[[node]Type >>]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
873 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
874 out <- Fold[["Result Var"]Set Input[2, index], vars, Range[0, [node]Outputs >>]]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
875 }{
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
876 out <- vars
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
877 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
878 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
879
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
880 Result Vars@NWorker[worker:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
881 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
882 out <- Fold["Node Result Vars", (), [worker]Nodes >>]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
883 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
884
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
885 Make Basic Type[type:out]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
886 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
887 out <- [Type Instance[[type]Name >>]]Params <<[ [type]Params >> ]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
888 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
889
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
890 FInputs[ifunc, input type, index, inputs:out]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
891 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
892 func <- [ifunc]Set Input Type[Make Basic Type[input type], index]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
893 name <- [inputs]Index[index]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
894 If[[[input type]Variant >>] = ["Naked"]]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
895 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
896
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
897 naked <- [" naked"]Append[name]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
898
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
899 out <- [[[func]Allocate Var[naked, input type]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
900 ]Unbox[name, naked]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
901 ]Release[name]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
902 }{
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
903 If[[input type]Mutable? >>]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
904 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
905 name <- [inputs]Index[index]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
906 copied <- [func]Copy[name, name]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
907
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
908 }{
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
909 copied <- Val[func]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
910 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
911 If[[[input type]Variant >>] = ["Raw Pointer"]]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
912 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
913 raw <- [" raw"]Append[name]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
914 If[[[input type]Name >>]=["Array"]]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
915 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
916
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
917 out <- [[copied]Allocate Var[raw, input type]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
918 ]Array Raw Pointer[name, raw]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
919 }{
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
920 out <- [[copied]Allocate Var[raw, input type]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
921 ]Get Raw Pointer[name, raw]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
922 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
923 }{
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
924 out <- Val[copied]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
925 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
926 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
927 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
928
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
929 FParams[input:out]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
930 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
931 iname <- [input]Index[0]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
932 type <- [input]Index[1]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
933 If[[[type]Variant >>] = ["Naked"]]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
934 { out <- [" naked"]Append[iname] }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
935 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
936 If[[[type]Variant >>] = ["Raw Pointer"]]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
937 { out <- [" raw"]Append[iname] }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
938 { out <- Val[iname] }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
939 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
940 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
941 _Return Param[outputs, inputs, input types, index:out,none]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
942 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
943 output <- [outputs]Index[index]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
944 [inputs]Find[output]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
945 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
946 If[[[input types]Index[~]]Mutable? >>]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
947 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
948 ,none <- [outputs]Next[index]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
949 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
950 out,none <- _Return Param[outputs, inputs, input types, ~]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
951 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
952 } {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
953 out <- index
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
954 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
955 }{
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
956 out <- index
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
957 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
958 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
959
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
960 Return Param[outputs, inputs, input types:out,none]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
961 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
962 ,none <- [outputs]First
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
963 { out,none <- _Return Param[outputs, inputs, input types, ~] }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
964
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
965 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
966
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
967 Save Foreign Result[func, output, index, output types, inputs, input types:out]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
968 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
969 type <- [output types]Index[index]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
970 If[[[type]Variant >>] = ["Naked"]]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
971 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
972 out <- [func]Box[[" naked"]Append[output], output, type]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
973 }{
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
974 [inputs]Find[output]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
975 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
976 If[[[input types]Index[~]]Mutable? >>]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
977 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
978 out <- [func]Move[output, Output[output]]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
979 }{
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
980 out <- func
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
981 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
982 }{
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
983 out <- func
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
984 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
985 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
986 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
987
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
988 Compile Foreign Stub[worker,program,name:out]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
989 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
990 ifunc <- [[program]Create Function[name, [worker]Inputs >>, [worker]Outputs >>, "rhope"]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
991 ]Output Types <<[Map[[worker]Output Types >>, "Make Basic Type"]]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
992
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
993 rp num <- Return Param[[worker]Outputs >>, [worker]Inputs >>, [worker]Input Types >>]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
994 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
995 rbase <- [[worker]Outputs >>]Index[rp num]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
996 If[[[[[worker]Output Types >>]Index[rp num]]Variant >>] = ["Naked"]]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
997 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
998 rparam <- [" naked"]Append[rbase]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
999 rfunc <- [ifunc]Allocate Var[rparam, [[worker]Output Types >>]Index[rp num]]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1000 }{
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1001 rparam <- Val[rbase]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1002 rfunc <- Val[ifunc]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1003 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1004 }{
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1005 rparam <- ""
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1006 rfunc <- Val[ifunc]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1007 }
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1008
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1009 Fold[["FInputs"]Set Input[3, [worker]Inputs >>], rfunc, [worker]Input Types >>]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1010 { [~]Call Foreign[name, [worker]Convention >>, Map[Zip[[worker]Inputs >>, [worker]Input Types >>], "FParams"], rparam]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1011 { Fold[[[["Save Foreign Result"]Set Input[3, [worker]Output Types >>]]Set Input[4, [worker]Inputs >>]]Set Input[5, [worker]Input Types >>], ~, [worker]Outputs >>]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1012 { out <- [program]Store Function[~] }}}
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1013 }
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
1014
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
1015 Compile Worker@NWorker[worker,program,name:out]
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
1016 {
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1017 If[[worker]Builtin? >>]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1018 {
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1019 out <- program
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1020 }{
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1021 If[[[worker]Library >>] = [""]]
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1022 {
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1023 ifunc <- Fold["Set Output Type", Fold["Set Input Type", [program]Create Function[name,[worker]Inputs >>, [worker]Outputs >>, [worker]Convention >>], [worker]Input Types >>], [worker]Output Types >>]
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1024
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1025 res vars <- [worker]Result Vars
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1026 func <- Fold["Set Null", Fold["Set Null", Fold[["Allocate Var"]Set Input[2, "Any Type"], ifunc, res vars], res vars], [worker]Outputs >>]
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1027
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1028 groups <- [worker]Dependency Groups
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1029 [groups]First
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1030 {
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1031 final func <- [worker]Compile Group[program,func,groups, ~]
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1032 }{
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1033 final func <- Val[func]
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1034 }
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1035 out <- [program]Store Function[Fold["Release", Fold[["Release Var"]Set Input[0, worker], final func, res vars], [worker]Inputs >>]]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1036 }{
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1037 out <- Compile Foreign Stub[worker,[program]Link[[worker]Convention >>, [worker]Library >> ],name]
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1038 }
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1039 }
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
1040 }
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
1041
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1042 Test[:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1043 {
34
df038cef648b More work on supporting user defined types in the C backend
Mike Pavone <pavone@retrodev.com>
parents: 30
diff changeset
1044 ref+ <- Worker Ref["+","rhope",2,1]
df038cef648b More work on supporting user defined types in the C backend
Mike Pavone <pavone@retrodev.com>
parents: 30
diff changeset
1045 ref* <- Worker Ref["*","rhope",2,1]
df038cef648b More work on supporting user defined types in the C backend
Mike Pavone <pavone@retrodev.com>
parents: 30
diff changeset
1046 ,a <- [NWorker["rhope"]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1047 ]Add Input["a", 0] {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1048 ,b <- [~]Add Input["b", 1] {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1049 ,c <- [~]Add Input["c", 2] {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1050 ,outref <- [~]Add Output["out", 0] {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1051 ,call+ <- [~]Add Worker Call[ref+] {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1052 ,call* <- [~]Add Worker Call[ref*] {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1053 out <- [[[[[~]Add Wire[a,0,call+,0]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1054 ]Add Wire[b,0,call+,1]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1055 ]Add Wire[call+,0,call*,0]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1056 ]Add Wire[c,0,call*,1]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1057 ]Add Wire[call*,0,outref,0]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1058 }}}}}}
19
90c20dc3f4e5 Initial work on compiling dataflow graphs to a backend
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
1059 }
20
b715532225c0 Differentiate between method and normal calls in dataflow graph compiler
Mike Pavone <pavone@retrodev.com>
parents: 19
diff changeset
1060
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
1061 Test Graph to Backend[:out]
20
b715532225c0 Differentiate between method and normal calls in dataflow graph compiler
Mike Pavone <pavone@retrodev.com>
parents: 19
diff changeset
1062 {
21
e9272f7ebd26 Limited compilation from dataflow graph to C backend
Mike Pavone <pavone@retrodev.com>
parents: 20
diff changeset
1063 out <- [Test[]]Compile Worker[C Program[], "Test"]
20
b715532225c0 Differentiate between method and normal calls in dataflow graph compiler
Mike Pavone <pavone@retrodev.com>
parents: 19
diff changeset
1064 }
b715532225c0 Differentiate between method and normal calls in dataflow graph compiler
Mike Pavone <pavone@retrodev.com>
parents: 19
diff changeset
1065
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1066 Blueprint NBlueprint
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1067 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1068 Fields
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1069 Methods
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1070 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1071
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1072 NBlueprint[:out]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1073 {
48
a24eb366195c Fixed some bugs introduced in previous commit and moved definition of integer methods out of runtime and into the compiler
Mike Pavone <pavone@retrodev.com>
parents: 47
diff changeset
1074 out <- [[Build["NBlueprint"]]Fields <<[()]]Methods <<[Dictionary[]]
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1075 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1076
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1077 Add Field@NBlueprint[bp,name,type:out]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1078 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1079 out <- [bp]Fields <<[ [[bp]Fields >>]Append[ [[()]Append[name]]Append[type] ] ]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1080 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1081
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1082 Add Method@NBlueprint[bp,name:out]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1083 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1084 out <- [bp]Methods <<[ [[bp]Methods >>]Set[name, Yes] ]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1085 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1086
43
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1087 Understands Method@NBlueprint[bp,name:out]
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1088 {
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1089 out <- [[bp]Methods >>]Index[name] {}
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1090 { out <- No }
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1091 }
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1092
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1093 Get Field Type@NBlueprint[bp,name:out,notfound]
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1094 {
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1095 ,notfound <- [[bp]Fields >>]Index[name]
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1096 { out <- [~]Index[1] }
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1097 }
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1098
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1099 _Compile Blueprint Fields[type,field:out]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1100 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1101 name <- [field]Index[0]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1102 ftype <- [field]Index[1]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1103 out <- [type]Add Field[name,ftype]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1104 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1105
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1106 _Compile Blueprint Methods[type,junk,name:out]
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1107 {
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1108 If[[[name]=["Call"]] And [[[type]Name >>] = ["Worker"]]]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1109 {
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1110 out <- type
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1111 }{
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1112 out <- [type]Add Method[name]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1113 }
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1114 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1115
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1116 Make Init[func,field:out]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1117 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1118 name <- [field]Index[0]
40
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1119 variant <- [[field]Index[1]]Variant >>
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1120 If[[variant] = ["Boxed"]]
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1121 {
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1122 out <- [func]Set Field Null["obj", name]
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1123 }{
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1124 out <- func
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1125 }
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1126 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1127
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1128 Make Copy[func,field:out]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1129 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1130 name <- [field]Index[0]
40
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1131 variant <- [[field]Index[1]]Variant >>
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1132 If[[variant] = ["Boxed"]]
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1133 {
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1134 got <- [func]Read Field["obj", name] {}
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1135 {
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1136 stream <- [[got]Instruction Stream
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1137 ]AddRef No Dest[~]
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1138 out <- [got]Do If[~, stream]
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1139 }
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1140 }{
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1141 out <- func
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1142 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1143 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1144
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1145 Make Cleanup[func,field:out]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1146 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1147 name <- [field]Index[0]
40
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1148 variant <- [[field]Index[1]]Variant >>
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1149 If[[variant] = ["Boxed"]]
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1150 {
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1151 got <- [func]Read Field["obj", name] {}
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1152 {
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1153 stream <- [[got]Instruction Stream
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1154 ]Release[~]
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1155 out <- [got]Do If[~, stream]
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1156 }
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1157 }{
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 37
diff changeset
1158 out <- func
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1159 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1160 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1161
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1162 Make Special@NBlueprint[bp,backend,func name,bp name,pop worker:out]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1163 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1164 func <- [[backend]Create Function[func name,("obj"),(),"cdecl"]
42
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1165 ]Set Input Type[Type Instance[bp name], 0]
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1166 out <- [backend]Store Function[Fold[pop worker, func, [bp]Fields >>]]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1167 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1168
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1169 Getters Setters[backend,field,type name:out]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1170 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1171 //TODO: Throw an exception or something if we read a field that is empty
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1172 name <- [field]Index[0]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1173 type <- [field]Index[1]
42
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1174 mytype <- Type Instance[type name]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1175 start getter,getref <- [[[[backend]Create Function[ [[[name]Append[" >>"]]Append["@"]]Append[type name], ("obj"), ("out"), "rhope"]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1176 ]Set Input Type[mytype, 0]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1177 ]Set Output Type[[type]Set Variant["Boxed"], 0]
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1178 ]Read Field["obj", name]
42
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1179 If[[[type]Variant >>] = ["Boxed"]]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1180 {
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1181 getter <- [[start getter]Do AddRef[getref, "out"]]Release["obj"]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1182 }{
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1183 getter <- [[start getter]Box[getref, "out", type]]Release["obj"]
42
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1184 }
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1185
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1186 begin setter <- [[[[[backend]Create Function[ [[[name]Append[" <<"]]Append["@"]]Append[type name], ("obj","newval"), ("out"), "rhope"]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1187 ]Set Input Type[mytype, 0]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1188 ]Set Input Type[[type]Set Variant["Boxed"], 1]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1189 ]Set Output Type[mytype, 0]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1190 ]Copy["obj"]
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1191
42
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1192 If[[[type]Variant >>] = ["Boxed"]]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1193 {
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1194 ,origref <- [begin setter]Read Field["obj", name]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1195 {
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1196 stream <- [[~]Instruction Stream
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1197 ]Release[origref]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1198 ,setref <- [[~]Do If[origref, stream]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1199 ]Write Field["obj", name]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1200 {
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1201 setter <- [[~]Move["newval", setref]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1202 ]Move["obj", "out"]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1203 }
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1204 }
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1205 }{
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1206 ,setref <- [begin setter]Write Field["obj", name]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1207 {
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1208 setter <- [[~]Unbox["newval", setref]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1209 ]Move["obj", "out"]
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1210 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1211 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1212
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1213 out <- [[backend]Store Function[getter]]Store Function[setter]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1214
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1215 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1216
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1217 Compile Blueprint@NBlueprint[bp,backend,name:out]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1218 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1219 //Rhope identifiers can't start with spaces, so we can use identifiers that start with spaces for special functions
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1220 init name <- [" init "]Append[name]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1221 copy name <- [" copy "]Append[name]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1222 cleanup name <- [" cleanup "]Append[name]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1223 type <- [[[Fold["_Compile Blueprint Methods", Fold["_Compile Blueprint Fields", [backend]Create Type[name], [bp]Fields >>], [bp]Methods >>]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1224 ]Init <<[init name]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1225 ]Copy <<[copy name]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1226 ]Cleanup <<[cleanup name]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1227
42
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1228 out <- [backend]Register Type[type]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1229 }
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1230
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1231 Compile Special@NBlueprint[bp,backend,name:out]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1232 {
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1233 init name <- [" init "]Append[name]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1234 copy name <- [" copy "]Append[name]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1235 cleanup name <- [" cleanup "]Append[name]
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1236 got specials <- [bp]Make Special[
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1237 [bp]Make Special[
42
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1238 [bp]Make Special[backend, init name, name, "Make Init"],
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1239 copy name, name, "Make Copy"],
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1240 cleanup name, name, "Make Cleanup"]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1241 out <- Fold[["Getters Setters"]Set Input[2, name], got specials, [bp]Fields >>]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1242 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1243
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1244 Blueprint NProgram
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1245 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1246 Blueprints
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1247 Workers
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1248 Worker Refs
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1249 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1250
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1251 NProgram[:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1252 {
48
a24eb366195c Fixed some bugs introduced in previous commit and moved definition of integer methods out of runtime and into the compiler
Mike Pavone <pavone@retrodev.com>
parents: 47
diff changeset
1253 out <- [[[Build["NProgram"]]Blueprints <<[Dictionary[]]]Workers <<[Dictionary[]]]Worker Refs <<[Dictionary[]]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1254 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1255
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1256 Bind Worker@NProgram[prog,name,worker:out]
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1257 {
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1258 after bind <- [prog]Workers << [ [[prog]Workers >>]Set[name, [worker]Name <<[name]] ]
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1259 parts <- [name]Split["@"]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1260 [parts]Index[1]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1261 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1262 orig bp <- [[after bind]Blueprints >>]Index[~] {}
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1263 { orig bp <- NBlueprint[] }
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
1264 out <- [after bind]Blueprints <<[ [[after bind]Blueprints >>]Set[~, [orig bp]Add Method[[parts]Index[0]] ] ]
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1265 }{
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1266 out <- Val[after bind]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1267 }
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1268 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1269
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1270 Bind Blueprint@NProgram[prog,name,blueprint:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1271 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1272 out <- [prog]Blueprints << [ [[prog]Blueprints >>]Set[name, blueprint] ]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1273 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1274
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1275 _Compile Program BP[backend, blueprint, name:out]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1276 {
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1277 out <- [blueprint]Compile Blueprint[backend, name]
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1278 }
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1279
42
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1280 _Compile Program BP Special[backend, blueprint, name:out]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1281 {
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1282 out <- [blueprint]Compile Special[backend, name]
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1283 }
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
1284
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1285 _Compile Program[backend, worker, name:out]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1286 {
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1287 out <- [worker]Compile Worker[backend, name]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1288 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1289
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1290 Compile Program@NProgram[prog, backend:out]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1291 {
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1292 backend with bps <- Generate Boolean Methods[Generate Number Methods[Fold["_Compile Program BP Special", Fold["_Compile Program BP", backend, [prog]Blueprints >>], [prog]Blueprints >>]]]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1293 workers with infer <- SMap[[prog]Workers >>, ["Infer Types"]Set Input[1, prog]]
48
a24eb366195c Fixed some bugs introduced in previous commit and moved definition of integer methods out of runtime and into the compiler
Mike Pavone <pavone@retrodev.com>
parents: 47
diff changeset
1294 out <- Fold["_Compile Program", backend with bps, workers with infer]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1295 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1296
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1297 Register Method@NProgram[prog, name, convention, inputs, outputs: out]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1298 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1299 out <- [prog]Worker Refs <<[ [[prog]Worker Refs >>]Set[name, Worker Ref[name, convention, inputs, outputs, Yes]]]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1300 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1301
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1302 Register Worker@NProgram[prog, name, convention, inputs, outputs: out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1303 {
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1304 after reg <- [prog]Worker Refs <<[
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1305 [ [prog]Worker Refs >> ]Set[name,
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1306 Worker Ref[name, convention, inputs, outputs, No]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1307 ]
47
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
1308 ]
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
1309 parts <- [name]Split["@"]
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
1310 [parts]Index[1]
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
1311 {
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
1312 out <- [after reg]Register Method@NProgram[[parts]Index[0], convention, inputs, outputs]
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
1313 }{
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
1314 out <- Val[after reg]
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
1315 }
20
b715532225c0 Differentiate between method and normal calls in dataflow graph compiler
Mike Pavone <pavone@retrodev.com>
parents: 19
diff changeset
1316 }
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1317
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1318 Register Builtins@NProgram[prog:out]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1319 {
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1320 registered <- [[[[[[prog]Register Worker["Print", "rhope", 1, 1]
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1321 ]Register Worker["If@Boolean", "rhope", 1, 2]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1322 ]Register Worker["Build", "rhope", 1, 1]
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1323 ]Register Worker["Blueprint Of", "rhope", 1, 1]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1324 ]Register Worker["Call@Worker", "rhope", 1, 2] //We're using 2 because we need to assume that the outputs are conditional
48
a24eb366195c Fixed some bugs introduced in previous commit and moved definition of integer methods out of runtime and into the compiler
Mike Pavone <pavone@retrodev.com>
parents: 47
diff changeset
1325 ]Register Number Methods
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1326
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1327 out <- [[[[[registered]Bind Worker["If@Boolean",
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1328 [[[[[NWorker["rhope"]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1329 ]Inputs <<[("condition")]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1330 ]Input Types <<[ [()]Append[Type Instance["Boolean"]] ]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1331 ]Outputs <<[("isyes","isno")]
47
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
1332 ]Output Types <<[ [[()]Append[Type Instance["Boolean"]]]Append[Type Instance["Boolean"]] ]
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
1333 ]Builtin? <<[Yes]]
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1334 ]Bind Worker["Print",
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1335 [[[[[NWorker["rhope"]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1336 ]Inputs <<[("value")]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1337 ]Input Types <<[ [()]Append[Type Instance["Any Type"]] ]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1338 ]Outputs <<[("out")]
47
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
1339 ]Output Types <<[ [()]Append[Type Instance["Int32"]] ]
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
1340 ]Builtin? <<[Yes]]
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1341 ]Bind Worker["Build",
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1342 [[[[[NWorker["rhope"]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1343 ]Inputs <<[("type")]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1344 ]Input Types <<[ [()]Append[Type Instance["Blueprint"]] ]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1345 ]Outputs <<[("out")]
47
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
1346 ]Output Types <<[ [()]Append[Type Instance["Any Type"]] ]
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1347 ]Builtin? <<[Yes]]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1348 ]Bind Worker["Blueprint Of",
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1349 [[[[[NWorker["rhope"]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1350 ]Inputs <<[("object")]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1351 ]Input Types <<[ [()]Append[Type Instance["Any Type"]]]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1352 ]Outputs <<[("type")]
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
1353 ]Output Types <<[ [()]Append[Type Instance["Blueprint"]]]
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1354 ]Builtin? <<[Yes]]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1355 ]Bind Worker["Call@Worker",
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1356 [[[[[NWorker["rhope"]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1357 ]Inputs <<[("worker")]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1358 ]Input Types <<[ [()]Append[Type Instance["Worker"]] ]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1359 ]Outputs <<[("ret1","ret2")]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1360 ]Output Types <<[ [[()]Append[Type Instance["Any Type"]]]Append[Type Instance["Any Type"]] ]
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 73
diff changeset
1361 ]Builtin? << [Yes]]
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1362 }
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1363
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1364 Find Worker@NProgram[prog, name:out,notfound]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1365 {
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1366 out,notfound <- [[prog]Worker Refs >>]Index[name]
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 21
diff changeset
1367 }
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
1368
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1369 Find Worker Def@NProgram[prog,name:out,notfound]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1370 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1371 out,notfound <- [[prog]Workers >>]Index[name]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1372 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1373
43
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1374 Find Method@NProgram[prog, name, type:out,notfound]
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1375 {
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1376 bp,notfound <- [[prog]Blueprints >>]Index[[type]Name >>]
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1377 ,notfound <- If[[bp]Understands Method[name]]
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1378 {
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1379 out <- [[prog]Workers >>]Index[[[name]Append["@"]]Append[[type]Name >>]]
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1380 }
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1381 }
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1382
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1383 Find Field@NProgram[prog, name, type:fieldtype,notfound]
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1384 {
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1385 bp,notfound <- [[prog]Blueprints >>]Index[[type]Name >>]
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1386 fieldtype,notfound <- [bp]Get Field Type[name]
709df3e82bb4 Added methods to support type inference
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
1387 }
44
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1388
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1389 Implicit Conversion@NProgram[prog, fromtype, totype:func,notfound]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1390 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1391 notfound <- No
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1392 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1393
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1394 Is Method?@NProgram[prog,name:is,is not]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1395 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1396 ,is not <- [[prog]Worker Refs>>]Index[name]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1397 {
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1398 is,is not <- If[[~]Is Method? >>]
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1399 }
a7c79ac22efc Beginning of basic type inference
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
1400 }