[svn] r7619: nemerle/trunk/macros/io.n
VladD2
svnadmin at nemerle.org
Wed Apr 25 16:13:00 CEST 2007
Log:
Refactoring pf make_splice_distribution().
Author: VladD2
Date: Wed Apr 25 16:12:59 2007
New Revision: 7619
Modified:
nemerle/trunk/macros/io.n
Modified: nemerle/trunk/macros/io.n
==============================================================================
--- nemerle/trunk/macros/io.n (original)
+++ nemerle/trunk/macros/io.n Wed Apr 25 16:12:59 2007
@@ -350,7 +350,58 @@
- store intermediate results in variables
- return list of evaluators and reference variables in reverse order
*/
- public make_splice_distribution (str : string, _env : GlobalEnv) : list [PT.PExpr]
+ public make_splice_distribution (str : string, env : GlobalEnv) : list [PT.PExpr]
+ {
+ def makeEllipsisSplaceExpr(env : GlobalEnv, expr : string, isComplexExpr : bool) : PT.PExpr
+ {
+ if (isComplexExpr)
+ {
+ env.Manager.MacroColors.PushUseSiteColor ();
+ try
+ {
+ def pExpr = MainParser.ParseExpr (env, expr);
+ def makeSeqExpr(seqExpr, sepExpr, cnvFuncExpr)
+ {
+ <[ string.Join($sepExpr, NCollectionsUtils.MapToArray($seqExpr, $cnvFuncExpr)) ]>
+ }
+ match (pExpr)
+ {
+ | <[ $seqExpr; $sepExpr; $cnvFuncExpr; ]> => makeSeqExpr(seqExpr, sepExpr, cnvFuncExpr)
+ | <[ $seqExpr; $sepExpr; ]> => makeSeqExpr(seqExpr, sepExpr, <[ Convert.ToString(_) ]>)
+ | _ => makeSeqExpr(pExpr, <[ ", " ]>, <[ Convert.ToString(_) ]>)
+ }
+ }
+ finally { env.Manager.MacroColors.PopColor (); }
+ } else if (expr == "this")
+ <[ string.Join(", ", NCollectionsUtils.MapToArray(this, Convert.ToString(_))) ]>
+ else <[ string.Join(", ", NCollectionsUtils.MapToArray($(expr : usesite), Convert.ToString(_))) ]>;
+ }
+
+ def makeSplaceExpr(env : GlobalEnv, expr : string, isComplexExpr : bool) : PT.PExpr
+ {
+ if (isComplexExpr)
+ {
+ env.Manager.MacroColors.PushUseSiteColor ();
+ try
+ {
+ def pExpr = MainParser.ParseExpr (env, expr);
+ <[ Convert.ToString ($pExpr) ]>
+ }
+ finally { env.Manager.MacroColors.PopColor (); }
+ } else if (expr == "this") <[ Convert.ToString (this) ]>
+ else <[ Convert.ToString ($(expr : usesite)) ]>;
+ }
+
+ make_splice_distribution (str, env, makeSplaceExpr, makeEllipsisSplaceExpr)
+ }
+
+ public make_splice_distribution (
+ str : string,
+ _env : GlobalEnv,
+ makeSplaceExpr : GlobalEnv * string * bool -> PT.PExpr, // env * strExpr * isComplexExpr
+ makeEllipsisSplaceExpr : GlobalEnv * string * bool -> PT.PExpr // env * strExpr * isComplexExpr
+ )
+ : list [PT.PExpr]
{
mutable seen_non_alnum = false;
@@ -443,35 +494,9 @@
{
def end = find_end (1, idx + 2);
def expr = str.Substring (idx + 2, end - idx - 2);
- def expr =
- if (expr == "" || expr == "_" || seen_non_alnum || char.IsDigit(expr[0]))
- {
- _env.Manager.MacroColors.PushUseSiteColor ();
- try
- {
- def pExpr = MainParser.ParseExpr (_env, expr);
- def makeSeqExpr(pExpr)
- {
- def makeSeqExpr(seqExpr, sepExpr, cnvFuncExpr)
- {
- <[ string.Join($sepExpr, NCollectionsUtils.MapToArray($seqExpr, $cnvFuncExpr)) ]>
- }
- match (pExpr)
- {
- | <[ $seqExpr; $sepExpr; $cnvFuncExpr; ]> => makeSeqExpr(seqExpr, sepExpr, cnvFuncExpr)
- | <[ $seqExpr; $sepExpr; ]> => makeSeqExpr(seqExpr, sepExpr, <[ Convert.ToString(_) ]>)
- | _ => makeSeqExpr(pExpr, <[ ", " ]>, <[ Convert.ToString(_) ]>)
- }
- }
-
- if (isSimple) <[ Convert.ToString ($pExpr) ]> else makeSeqExpr(pExpr)
- }
- finally { _env.Manager.MacroColors.PopColor (); }
- } else if (expr == "this")
- if (isSimple) <[ Convert.ToString (this) ]>
- else <[ string.Join(", ", NCollectionsUtils.MapToArray(this, Convert.ToString(_))) ]>
- else if (isSimple) <[ Convert.ToString ($(expr : usesite)) ]>;
- else <[ string.Join(", ", NCollectionsUtils.MapToArray($(expr : usesite), Convert.ToString(_))) ]>;
+ def isComplexExpr = expr == "" || expr == "_" || seen_non_alnum || char.IsDigit(expr[0]);
+ def expr = if (isSimple) makeSplaceExpr(_env, expr, isComplexExpr)
+ else makeEllipsisSplaceExpr(_env, expr, isComplexExpr);
loop (expr :: res, end + 1)
}
else if (str[nextIndex] == '$')
@@ -488,13 +513,8 @@
}
else
{
- def expr =
- if (variable_name == "this")
- if (isSimple) <[ Convert.ToString (this) ]>
- else <[ string.Join(", ", NCollectionsUtils.MapToArray(this, Convert.ToString(_))) ]>
- else if (isSimple)
- <[ Convert.ToString ($(variable_name : usesite)) ]>
- else <[ string.Join(", ", NCollectionsUtils.MapToArray($(variable_name : usesite), Convert.ToString(_))) ]>;
+ def expr = if (isSimple) makeSplaceExpr(_env, variable_name, false)
+ else makeEllipsisSplaceExpr(_env, variable_name, false);
loop (expr :: res, end)
}
}
More information about the svn
mailing list