private ChangeSet Eval(ColaNode node) { var canonical = node.Script.ToCanonicalCola(); var className = canonical.Substring(0, canonical.NthIndexOf(" ", 2)).Substring(4); // todo. regularly purge no more useful classes VM.Load(canonical); VM.Context["cc_values"] = _tempValues; VM.Context["cc_node"] = node; var changeset = new ChangeSet(() => _tempValues, v => { _tempValues = v; }).StartRecording(); try { VM.CreateEntryPoint(className, "Main").RunTillEnd(); } catch(ErroneousScriptException e) { // todo. a good idea would be to continue evaluation of everything that doesn't depend on this node var findings = InspectCompositionAndParameters(); throw new FatalFindingsException(new Findings( findings.Concat(new ScriptIsErroneousFactum(node, e).AsArray()))); } return changeset.Capture(); }
public ChangeSet Merge(ChangeSet nextVersion) { if (this.NewVersion == nextVersion.BaseLine) { var merged = new ChangeSet(Get, Set); merged.BaseLine = this.BaseLine; merged.NewVersion = nextVersion.NewVersion; merged.CaptureImpl(); return merged; } else { throw new NotSupportedException(String.Format( "Cannot merge '{0}' with '{1}': incompatible revisions.")); } }