aboutsummaryrefslogtreecommitdiff
path: root/Tools/CodeGen
diff options
context:
space:
mode:
authorIan Hinder <ian.hinder@aei.mpg.de>2012-04-26 18:14:12 +0200
committerIan Hinder <ian.hinder@aei.mpg.de>2012-04-27 14:09:35 +0200
commit08217508e4168660a0484f64507041e2502a50dd (patch)
treea94d00c4e4caa33ea6e5988ac4b23853e3d14e4c /Tools/CodeGen
parentfa9c9d4ab4a739ba88c7dfdbf8e3df8def24c086 (diff)
ScriptOutput.m: Support several options and flags
Also write comments into the output file containing unsupported options
Diffstat (limited to 'Tools/CodeGen')
-rw-r--r--Tools/CodeGen/ScriptOutput.m32
1 files changed, 31 insertions, 1 deletions
diff --git a/Tools/CodeGen/ScriptOutput.m b/Tools/CodeGen/ScriptOutput.m
index 5f50966..fc8a402 100644
--- a/Tools/CodeGen/ScriptOutput.m
+++ b/Tools/CodeGen/ScriptOutput.m
@@ -40,16 +40,40 @@ Options[WriteScript] = ThornOptions;
DefFn[
WriteScript[groups_List, parentDirectory_String, thornName_String, OptionsPattern[]] :=
Module[
- {script, docDir, scriptFile, derivs},
+ {script, docDir, scriptFile, derivs, allOptionNames, setOptions,
+ setOptionsWithValues},
Print["Writing script"];
derivs = Head/@Map[First,OptionValue[PartialDerivatives]];
Block[{$DerivativeNames = derivs},
+ allOptionNames = First/@ThornOptions;
+ setOptions = Select[allOptionNames, OptionValue[#] =!= (#/.ThornOptions) &];
+ setOptionsWithValues = Map[(#->OptionValue[#]) &,setOptions];
+
+ setOptions = Complement[setOptions,
+ Join[{Calculations,
+ DeclaredGroups,
+ InheritedImplementations}, Last/@ScriptFlags]];
+ remainingOptionsWithValues = Map[(#->OptionValue[#]) &,setOptions];
+
script =
{"# Expressions within @{...} are not yet supported by the script generator\n",
beginEndBlock["thorn", thornName,
{"\n",
+ Riffle[Map["# " <> ToString[#,InputForm] &,
+ remainingOptionsWithValues],"\n\n"],
+ "\n\n",
+
+ If[OptionValue[InheritedImplementations] =!= {},
+ {"inherit ",
+ Riffle[Map[ToString,
+ OptionValue[InheritedImplementations]],
+ " "], "\n\n"},{}],
+
+ writeFlags[setOptionsWithValues],
+ "\n",
+
writeVariables[Join@@(variablesInGroup[#,groups]&/@OptionValue[DeclaredGroups])],
"\n",
writeTemporaries[OptionValue[Calculations]],
@@ -72,6 +96,12 @@ DefFn[writeTemporaries[calcs_List] :=
"temporaries","",
wrap[FlattenBlock[Riffle[Map[writeExpression,Union@@Map[lookup[#,Shorthands,{}]&,calcs]]," "]],0],Indent->True]];
+DefFn[writeFlags[options_List] :=
+ Module[{rFlags, flagsSet},
+ rFlags = Map[Reverse, ScriptFlags];
+ flagsSet = Intersection[First/@options, Last/@ScriptFlags];
+ Map[{If[#/.options,"use","disable"]," ", #/.rFlags, "\n"} &, flagsSet]]];
+
DefFn[
writeCalculation[calc_List] :=
beginEndBlock["calculation", lookup[calc, Name],