annotate rathaxes_compiler_passes_hack_injection_of_chunks_into_rvalues.patch @ 122:52402232483f

WIP on the split up of e1000::set_up_device
author Louis Opter <louis@lse.epita.fr>
date Sun, 28 Jul 2013 02:50:43 -0700
parents 8eac160e5f1c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
114
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
1 # HG changeset patch
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
2 # User David Pineau <dav.pineau@gmail.com>, Louis Opter <louis@lse.epita.fr>
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
3 # Parent 98d25045a40891692a5e2e605ad9bccaea17f4ff
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
4 rathaxes: hack injection of chunks into a rvalue
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
5
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
6 It allows to hack a return value into a chunk ::CALL.
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
7
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
8 diff --git a/rathaxes/compiler/passes/common/rtxResolve.inc.cws b/rathaxes/compiler/passes/common/rtxResolve.inc.cws
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
9 --- a/rathaxes/compiler/passes/common/rtxResolve.inc.cws
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
10 +++ b/rathaxes/compiler/passes/common/rtxResolve.inc.cws
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
11 @@ -33,7 +33,7 @@
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
12 declare function rtxResolve_WrapChunkIntoType(chunkTree : node);
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
13
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
14 declare function rtxResolve_InsertCode(destBlock : node, startIdx : node, phName : value, phIdx : node, sourceNode : node);
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
15 -declare function rtxResolve_BuildParameterResVals(src_resVals : node, src_params : node, dst_resVals : node, dst_params : node, source_tree : reference, search_chunk : value = true);
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
16 +declare function rtxResolve_BuildParameterResVals(src_resVals : node, src_params : node, dst_resVals : node, dst_params : node, source_tree : reference, search_chunk : value = true, tpl_seq : value = false);
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
17 declare function rtxResolve_replaceCalls(theSeq : node, resolverValues : node, source_tree : reference);
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
18
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
19
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
20 @@ -318,20 +318,21 @@
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
21 dst_resVals : node,
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
22 dst_params : node,
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
23 source_tree : reference,
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
24 - search_chunk : value = true)
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
25 + search_chunk : value = true,
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
26 + tpl_seq : value = false)
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
27 {
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
28 localref dst_list = dst_params;
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
29
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
30 if (rtxNodeArgs(dst_resVals) == false)
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
31 error(RED + "[Error] Could not intialize argument container." + DEFAULT_COLOR);
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
32
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
33 - if (search_chunk)
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
34 + if (search_chunk && tpl_seq == false)
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
35 ref dst_list = dst_list.list;
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
36
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
37 foreach dst_p in dst_list
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
38 {
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
39 local src_p;
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
40 - if (search_chunk)
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
41 + if (search_chunk && tpl_seq == false)
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
42 ref src_p = src_params.list#[index(dst_p)];
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
43 else
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
44 ref src_p = src_params#[index(dst_p)];
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
45 @@ -941,7 +942,7 @@
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
46
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
47 // Now, resolve the loaded chunk...
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
48 local resVals;
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
49 - rtxResolve_BuildParameterResVals(resolverValues, local_node.body.seqArgs, resVals, chunkTree.tpl_params, source_tree, false);
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
50 + rtxResolve_BuildParameterResVals(resolverValues, local_node.body.seqArgs, resVals, chunkTree.tpl_params, source_tree, true, true);
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
51 if (instanceChunk<chunkTree.instanceKey>(resVals, chunkTree.body, source_tree) == false)
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
52 {
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
53 traceLine(RED + "[Error] Could not resolve sequence call to " + rtxRTypeFullQualifiedName<"sequence">(tplRtype,dummy) + DEFAULT_COLOR);
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
54 @@ -949,9 +950,19 @@
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
55 return false;
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
56 }
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
57
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
58 - insertModifier(theParent, local_node#parent);
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
59 - startIdx = local_node#parent.block_idx; // retrieve updated startIdx from dummy.
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
60 - rtxResolve_InsertCode(theParent, startIdx, phName, phIdx, chunkTree.body);
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
61 + switch (local_node#parent.type_target)
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
62 + {
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
63 + case "target_pointcut":
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
64 + insertModifier(theParent, local_node#parent);
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
65 + startIdx = local_node#parent.block_idx; // retrieve updated startIdx from dummy.
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
66 + rtxResolve_InsertCode(theParent, startIdx, phName, phIdx, chunkTree.body);
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
67 + break ;
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
68 + case "target_expr":
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
69 + setall local_node#parent.ref_placeholder = chunkTree.body.block[0].expr;
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
70 + break ;
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
71 + default:
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
72 + error(RED + "[Error] Unmanaged weaving target type: " + local_node#parent.type_target + "." + DEFAULT_COLOR);
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
73 + }
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
74
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
75 return true;
8eac160e5f1c WIP, add a new hack on the compiler
Louis Opter <louis@lse.epita.fr>
parents:
diff changeset
76 }