annotate geninterp.rhope @ 175:03e4fa277291

Use worker refs for geninterp
author Mike Pavone <pavone@retrodev.com>
date Wed, 08 Jun 2011 23:24:15 -0700
parents 0c7c5671fcd3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
174
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2 Import parser_old_c.rhope
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3 Import cbackend_c.rhope
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 Worker Set[lines,worker:out]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6 {
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
7 If[[[worker]Name >>]Starts With["_"]]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
8 {
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
9 out <- lines
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 }{
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
11 If[[[worker]Name >>]=["Call@Worker"]]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 { out <- lines }
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13 { out <- [lines]Append[ [[[["\t\t]Set[\""]Append[[worker]Name >>]]Append["\", "]]Append[[worker]Name >>]]Append["[?]]"] ] }
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
14 }
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
15 }
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
16
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
17 Get Constant Type[func,const:out]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
18 {
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
19 out <- func
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
20 }
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
22 Get Var Type[func,varname:out]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
23 {
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24 out <- func
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25 }
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
27 Main[args]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
28 {
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
29
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
30 fname <- [args]Index[1]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
31 {
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
32 file <- [File[~]]Open["r"]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
33 text <- String[[file]Read[[file]Length]]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
34 params <- Parser[]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35 Print[["Parsing "]Append[fname]]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
36 Null[text, params, Parse Program[], 0]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37 {
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38 Print["Parsing imports"]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39 Process Imports[~, params]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
40 {
175
03e4fa277291 Use worker refs for geninterp
Mike Pavone <pavone@retrodev.com>
parents: 174
diff changeset
41 tree <- [~]Workers << [ Map[[~]Worker Refs >>, Check Worker Literals[?, ~]] ]
174
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
42 { Print["Compiling"] }
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
43 }
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
44
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
45 program <- Tree to Program Native[tree, [C Program[]]Supported Number Types]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
46 lines <- Fold[Worker Set[?], (), [program]Workers >>]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
47
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
48 out text <- [[[Fold[Append[?, "["], "Func Lookup[:out]\n{\n\tout <- ", Range[0, Length[lines]]]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
49 ]Append["Dictionary[]\n"]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
50 ]Append[[lines]Join["\n"]]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
51 ]Append["\n}\n"]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
52
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
53
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
54 outname <- [args]Index[2] {}
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
55 { outname <- "interplookup.rhope" }
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
56 outfile <- [[File[outname]]Open["w"]]Truncate
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
57
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
58 [[out text]Write to File[outfile]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
59 ]Close
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
60 }
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
61 }{
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
62 Print["You must provide a file name to compile"]
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
63 }
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
64 }
0c7c5671fcd3 Start work on interpreter
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
65