diff options
author | Ian Hinder <ian.hinder@aei.mpg.de> | 2012-04-26 18:14:12 +0200 |
---|---|---|
committer | Ian Hinder <ian.hinder@aei.mpg.de> | 2012-04-27 14:09:35 +0200 |
commit | 08217508e4168660a0484f64507041e2502a50dd (patch) | |
tree | a94d00c4e4caa33ea6e5988ac4b23853e3d14e4c /Tools/CodeGen | |
parent | fa9c9d4ab4a739ba88c7dfdbf8e3df8def24c086 (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.m | 32 |
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], |