Mercurial > archived > louis > epitech > mq > rathaxes
diff rathaxes_compiler_passes_fix_ref_scalar_issues_with_chunk_parameters.patch @ 127:72b5b4a62cc5
Wip on fixing ref/scalar issues, partly fixed
author | Louis Opter <louis@lse.epita.fr> |
---|---|
date | Sun, 18 Aug 2013 15:33:24 -0700 |
parents | |
children | 518d9c8ac70c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rathaxes_compiler_passes_fix_ref_scalar_issues_with_chunk_parameters.patch Sun Aug 18 15:33:24 2013 -0700 @@ -0,0 +1,76 @@ +# HG changeset patch +# Parent aa64f4dc928c5e844d1a7005652d059979544239 +rathaxes: fix ref/scalar issues with chunk parameters + +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 +@@ -449,22 +449,35 @@ + } + else if (search_chunk == false) // This may be the rtx implementation chunk -> different way to resolve... + { +- if (rtxNode2cnormNode<src_p.type>(src_p, param_value) == false) +- error(RED + "Could not translate rathaxes node " + toString(src_p, true) +- + " to a resVal (containing one cnorm) node." + DEFAULT_COLOR); +- setall param_type = src_p.rtype; +- if (param_value.type == "__expr__" && param_value.operator != "__literal__") ++ ++ if (rtxNodeArgs_GetArgByName(src_resVals, src_p.val, src_arg) == true) + { +- local src_arg; +- local src_name = param_value.id; +- if (rtxNodeArgs_GetArgByName(src_resVals, src_name, src_arg)) +- return false; + if (rtxNodeArg_getRType(src_arg, param_type) == false) + return false; + if (rtxNodeArg_getValue(src_arg, param_value) == false) + return false; + param_name = dst_p; + } ++ else ++ { ++ if (rtxNode2cnormNode<src_p.type>(src_p, param_value) == false) ++ error(RED + "Could not translate rathaxes node " + toString(src_p, true) ++ + " to a resVal (containing one cnorm) node." + DEFAULT_COLOR); ++ ++ setall param_type = src_p.rtype; ++ if (param_value.type == "__expr__" && param_value.operator != "__literal__") ++ { ++ local src_arg; ++ local src_name = param_value.id; ++ if (rtxNodeArgs_GetArgByName(src_resVals, src_name, src_arg)) ++ return false; ++ if (rtxNodeArg_getRType(src_arg, param_type) == false) ++ return false; ++ if (rtxNodeArg_getValue(src_arg, param_value) == false) ++ return false; ++ param_name = dst_p; ++ } ++ } + } + else + { +@@ -529,7 +542,13 @@ + + // Now, resolve the loaded chunk... + local resVals; +- rtxResolve_BuildParameterResVals(resolverValues, call.args, resVals, chunkTree.tpl_params, source_tree, false); ++ if (rtxResolve_BuildParameterResVals(resolverValues, call.args, resVals, chunkTree.tpl_params, source_tree, false) == false) ++ { ++ // TODO: should be an error, but will be break to many things at ++ // this point: ++ traceLine(RED + "[Error] Could not build front-end parameter resvals." + DEFAULT_COLOR); ++ } ++ + if (instanceChunk<chunkTree.instanceKey>(resVals, chunkTree.body, source_tree) == false) + { + increment(errcount); +@@ -716,6 +735,8 @@ + } + else + { ++ traceLine(YELLOW + "[Warning] Using variable's identifier as resolved value (high probability to be wrong): " ++ + local_node#parent.location + DEFAULT_COLOR); + clearVariable(self_value); + cnormNode_TerminalId(self_value, varName); + }