# HG changeset patch # User Louis Opter # Date 1374478520 25200 # Node ID 8eac160e5f1c2ef2d0d722e2b069aaba1bda47cf # Parent b22983cb9e3ae968ac36e3e11c0621861e4243cd WIP, add a new hack on the compiler diff -r b22983cb9e3a -r 8eac160e5f1c rathaxes_compiler_passes_hack_injection_of_chunks_into_rvalues.patch --- /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 , Louis Opter +# 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(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; + } diff -r b22983cb9e3a -r 8eac160e5f1c rathaxes_samples_e1000_use_the_dma_abstraction_in_socket.patch --- 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 diff -r b22983cb9e3a -r 8eac160e5f1c series --- 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