Mercurial > archived > louis > epitech > mq > rathaxes
annotate rathaxes_compiler_passes_hack_injection_of_chunks_into_rvalues.patch @ 142:cbff597d307e default tip
Wip doc
author | Louis Opter <louis@lse.epita.fr> |
---|---|
date | Sun, 09 Feb 2014 15:48:57 -0800 |
parents | 8eac160e5f1c |
children |
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 } |