changeset 114:8eac160e5f1c

WIP, add a new hack on the compiler
author Louis Opter <louis@lse.epita.fr>
date Mon, 22 Jul 2013 00:35:20 -0700
parents b22983cb9e3a
children 5a663f8f0e54
files rathaxes_compiler_passes_hack_injection_of_chunks_into_rvalues.patch rathaxes_samples_e1000_use_the_dma_abstraction_in_socket.patch series
diffstat 3 files changed, 117 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rathaxes_compiler_passes_hack_injection_of_chunks_into_rvalues.patch	Mon Jul 22 00:35:20 2013 -0700
@@ -0,0 +1,76 @@
+# HG changeset patch
+# User David Pineau <dav.pineau@gmail.com>, Louis Opter <louis@lse.epita.fr>
+# Parent 98d25045a40891692a5e2e605ad9bccaea17f4ff
+rathaxes: hack injection of chunks into a rvalue
+
+It allows to hack a return value into a chunk ::CALL.
+
+diff --git a/rathaxes/compiler/passes/common/rtxResolve.inc.cws b/rathaxes/compiler/passes/common/rtxResolve.inc.cws
+--- a/rathaxes/compiler/passes/common/rtxResolve.inc.cws
++++ b/rathaxes/compiler/passes/common/rtxResolve.inc.cws
+@@ -33,7 +33,7 @@
+ declare function rtxResolve_WrapChunkIntoType(chunkTree : node);
+ 
+ declare function rtxResolve_InsertCode(destBlock : node, startIdx : node, phName : value, phIdx : node, sourceNode : node);
+-declare function rtxResolve_BuildParameterResVals(src_resVals   : node, src_params    : node, dst_resVals   : node, dst_params    : node, source_tree   : reference, search_chunk  : value = true);
++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);
+ declare function rtxResolve_replaceCalls(theSeq : node, resolverValues : node, source_tree : reference);
+ 
+ 
+@@ -318,20 +318,21 @@
+                                           dst_resVals   : node,
+                                           dst_params    : node, 
+                                           source_tree   : reference,
+-                                          search_chunk  : value = true)
++                                          search_chunk  : value = true,
++                                          tpl_seq       : value = false)
+ {
+     localref   dst_list = dst_params;
+ 
+     if (rtxNodeArgs(dst_resVals) == false)
+         error(RED + "[Error] Could not intialize argument container." + DEFAULT_COLOR);
+ 
+-    if (search_chunk)
++    if (search_chunk && tpl_seq == false)
+         ref dst_list = dst_list.list;
+ 
+     foreach dst_p in dst_list
+     {
+         local src_p;
+-        if (search_chunk)
++        if (search_chunk && tpl_seq == false)
+             ref src_p = src_params.list#[index(dst_p)];
+         else
+             ref src_p = src_params#[index(dst_p)];
+@@ -941,7 +942,7 @@
+ 
+     // Now, resolve the loaded chunk...
+     local resVals;
+-    rtxResolve_BuildParameterResVals(resolverValues, local_node.body.seqArgs, resVals, chunkTree.tpl_params, source_tree, false);
++    rtxResolve_BuildParameterResVals(resolverValues, local_node.body.seqArgs, resVals, chunkTree.tpl_params, source_tree, true, true);
+     if (instanceChunk<chunkTree.instanceKey>(resVals, chunkTree.body, source_tree) == false)
+     {
+         traceLine(RED + "[Error] Could not resolve sequence call to " + rtxRTypeFullQualifiedName<"sequence">(tplRtype,dummy) + DEFAULT_COLOR);
+@@ -949,9 +950,19 @@
+         return false;
+     }
+ 
+-    insertModifier(theParent, local_node#parent);
+-    startIdx = local_node#parent.block_idx; // retrieve updated startIdx from dummy.
+-    rtxResolve_InsertCode(theParent, startIdx, phName, phIdx, chunkTree.body);
++    switch (local_node#parent.type_target)
++    {
++        case "target_pointcut":
++            insertModifier(theParent, local_node#parent);
++            startIdx = local_node#parent.block_idx; // retrieve updated startIdx from dummy.
++            rtxResolve_InsertCode(theParent, startIdx, phName, phIdx, chunkTree.body);
++            break ;
++        case "target_expr":
++            setall local_node#parent.ref_placeholder = chunkTree.body.block[0].expr;
++            break ;
++        default:
++            error(RED + "[Error] Unmanaged weaving target type: " + local_node#parent.type_target + "." + DEFAULT_COLOR);
++    }
+ 
+     return true;
+ }
--- a/rathaxes_samples_e1000_use_the_dma_abstraction_in_socket.patch	Sat Jul 20 20:45:39 2013 -0700
+++ b/rathaxes_samples_e1000_use_the_dma_abstraction_in_socket.patch	Mon Jul 22 00:35:20 2013 -0700
@@ -1,11 +1,19 @@
 # HG changeset patch
-# Parent 05460906d5aba5d3671969d9ac53182d0ac91649
+# Parent 5a53813ed1306484aa98dd95fe1d284ed24111ab
 Replace Linux specific code in Socket by DMA calls
 
 diff --git a/rathaxes/samples/e1000/dma.blt b/rathaxes/samples/e1000/dma.blt
 --- a/rathaxes/samples/e1000/dma.blt
 +++ b/rathaxes/samples/e1000/dma.blt
-@@ -14,7 +14,7 @@
+@@ -1,6 +1,6 @@
+ with DMA, Builtin, LKM, Device
+ {
+-    template type   AbstractDMAHandle()
++    template type   DMA::AbstractDMAHandle()
+     {
+         chunk   LKM::includes()
+         {
+@@ -14,11 +14,11 @@
  
          map
          {
@@ -14,20 +22,40 @@
          }
      }
  
-@@ -51,7 +51,7 @@
+-    template type   AbstractDMADirection()
++    template type   DMA::AbstractDMADirection()
+     {
+         decl    data_types()
+         {
+@@ -42,7 +42,7 @@
+ 
+         map
+         {
+-            /* XXX: we should use ${AbstractDMADirection} here: */
++            /* XXX: we should use ${DMA::AbstractDMADirection} here: */
+             dma_direction: ((enum dma_data_direction)${self});
+         }
+     }
+@@ -51,11 +51,11 @@
      {
          chunk  ::CALL()
          {
 -            dma_map_single(${dev.k_device}, ${buf}, ${size}, ${dir.dma_direction});
-+            ((${DMA::AbstractDMAHandle})dma_map_single(${dev.k_device}, ${buf}, ${size}, ${dir.dma_direction}));
++            ((${DMA::DMA::AbstractDMAHandle})dma_map_single(${dev.k_device}, ${buf}, ${size}, ${dir.dma_direction}));
          }
      }
  
-@@ -63,11 +63,19 @@
+-    template sequence   unmap(Device::AbstractDevice dev, AbstractDMAHandle handle, Builtin::number size, DMADirection dir)
++    template sequence   unmap(Device::AbstractDevice dev, DMA::AbstractDMAHandle handle, Builtin::number size, DMADirection dir)
+     {
+         chunk  ::CALL()
+         {
+@@ -63,15 +63,23 @@
          }
      }
  
-+    template sequence   mapping_error(Device::AbstractDevice dev, AbstractDMAHandle handle)
+-    template sequence   alloc_coherent(Device::AbstractDevice dev, Builtin::number size, AbstractDMAHandle handle)
++    template sequence   mapping_error(Device::AbstractDevice dev, DMA::AbstractDMAHandle handle)
 +    {
 +        chunk ::CALL()
 +        {
@@ -35,7 +63,7 @@
 +        }
 +    }
 +
-     template sequence   alloc_coherent(Device::AbstractDevice dev, Builtin::number size, AbstractDMAHandle handle)
++    template sequence   alloc_coherent(Device::AbstractDevice dev, Builtin::number size, DMA::AbstractDMAHandle handle)
      {
          chunk  ::CALL()
          {
@@ -44,6 +72,11 @@
          }
      }
  
+-    template sequence   free_coherent(Device::AbstractDevice dev, Builtin::number size, Builtin::symbol addr, AbstractDMAHandle handle)
++    template sequence   free_coherent(Device::AbstractDevice dev, Builtin::number size, Builtin::symbol addr, DMA::AbstractDMAHandle handle)
+     {
+         chunk  ::CALL()
+         {
 diff --git a/rathaxes/samples/e1000/dma.rti b/rathaxes/samples/e1000/dma.rti
 --- a/rathaxes/samples/e1000/dma.rti
 +++ b/rathaxes/samples/e1000/dma.rti
--- a/series	Sat Jul 20 20:45:39 2013 -0700
+++ b/series	Mon Jul 22 00:35:20 2013 -0700
@@ -1,4 +1,5 @@
 rathaxes_compiler_passes_correctly_resolve_all_variables_subidentifiers.patch
+rathaxes_compiler_passes_hack_injection_of_chunks_into_rvalues.patch
 rathaxes_samples_e1000_add_a_dma_abstraction.patch
 rathaxes_samples_e1000_use_the_dma_abstraction_in_socket.patch
 rathaxes_samples_e1000_add_alloc_sequences_in_socket.patch