diff --git a/Makefile b/Makefile
index 5da8e6e..fb14ba8 100644
--- a/Makefile
+++ b/Makefile
@@ -4,6 +4,10 @@ all: clean-container build-builders build-linux-debug-container
build-container:
./flutterw --build-container
+clean:
+ flutter clean
+ rm ~/.local/share/com.example.d4rt_formulas/d4rt_formulas/formulas.sqlite
+
clean-container: build-container
./flutterw clean
diff --git a/android/d4rt_formulas_android.iml b/android/d4rt_formulas_android.iml
index 1899969..3e44773 100644
--- a/android/d4rt_formulas_android.iml
+++ b/android/d4rt_formulas_android.iml
@@ -26,4 +26,4 @@
-
+
\ No newline at end of file
diff --git a/lib/database/formulas_database_native.dart b/lib/database/formulas_database_native.dart
index 31c0ea6..427647a 100644
--- a/lib/database/formulas_database_native.dart
+++ b/lib/database/formulas_database_native.dart
@@ -22,6 +22,7 @@ LazyDatabase openConnection() {
// Create the database file in the platform-specific directory
final file = File(p.join(dbDirectory.path, 'formulas.sqlite'));
+ print( "Database file path: ${file.path}");
return NativeDatabase.createInBackground(file);
});
}
diff --git a/lib/defaults/default_corpus.dart b/lib/defaults/default_corpus.dart
index b678c75..62d0a10 100644
--- a/lib/defaults/default_corpus.dart
+++ b/lib/defaults/default_corpus.dart
@@ -53,7 +53,9 @@ Future createDefaultCorpus() async{
final formulaResources = ["assets/formulas/formulas.d4rt"];
for (final formRes in formulaResources) {
+ print( "Loading formulas from $formRes ...");
final literal = await loadResourceAsString(formRes);
+ print( "Loaded $formRes");
final formulas = Formula.fromArrayStringLiteral(literal);
final formulaElements = formulas.cast();
corpus.loadFormulaElements(formulaElements);
diff --git a/lib/formula_evaluator.dart b/lib/formula_evaluator.dart
index 3aaf68a..8666304 100644
--- a/lib/formula_evaluator.dart
+++ b/lib/formula_evaluator.dart
@@ -106,7 +106,16 @@ class FormulaEvaluator {
return result;
}
catch (e, stack) {
- errorHandler.notify(e.toString() + "\n" + completeSource, stack);
+ // SPECIAL CASE: If the error message starts with signalMagicString, treat it as a signal message and return it instead of throwing an exception
+ // SEE signal() function in the generated d4rt code above for how this is used
+ print( "#######################");
+ if(e.toString().contains(signalMagicString)){
+ print( "***********************");
+ final signalMessage = e.toString().split(signalMagicString).last.trim();
+ return signalMessage;
+ }
+
+ errorHandler.notify("$e\n$completeSource", stack);
throw FormulaEvaluationException(
'Error evaluating formula "${formula.name}": $e',
e,
@@ -162,8 +171,10 @@ class FormulaEvaluator {
import "package:d4rt_formulas.dart";
""";
+ static final String signalMagicString = "###";
+
static final String signal = """
- void signal( String msg ) => throw Exception(msg);
+ void signal( String msg ) => throw Exception("$signalMagicString\$msg");
""";
static const reservedVariableNames = { "variableValues", "indexOf", "variableAllowedValues"} ;
diff --git a/pubspec.lock b/pubspec.lock
index 5fea360..f187fdd 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -468,26 +468,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
- sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
url: "https://pub.dev"
source: hosted
- version: "10.0.9"
+ version: "11.0.2"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
- sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.dev"
source: hosted
- version: "3.0.9"
+ version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
- sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "3.0.2"
linked_scroll_controller:
dependency: transitive
description:
@@ -540,10 +540,10 @@ packages:
dependency: transitive
description:
name: meta
- sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
url: "https://pub.dev"
source: hosted
- version: "1.16.0"
+ version: "1.17.0"
mime:
dependency: transitive
description:
@@ -881,26 +881,26 @@ packages:
dependency: "direct dev"
description:
name: test
- sha256: "301b213cd241ca982e9ba50266bd3f5bd1ea33f1455554c5abb85d1be0e2d87e"
+ sha256: "75906bf273541b676716d1ca7627a17e4c4070a3a16272b7a3dc7da3b9f3f6b7"
url: "https://pub.dev"
source: hosted
- version: "1.25.15"
+ version: "1.26.3"
test_api:
dependency: transitive
description:
name: test_api
- sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
+ sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55
url: "https://pub.dev"
source: hosted
- version: "0.7.4"
+ version: "0.7.7"
test_core:
dependency: transitive
description:
name: test_core
- sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa"
+ sha256: "0cc24b5ff94b38d2ae73e1eb43cc302b77964fbf67abad1e296025b78deb53d0"
url: "https://pub.dev"
source: hosted
- version: "0.6.8"
+ version: "0.6.12"
timing:
dependency: transitive
description:
@@ -1025,10 +1025,10 @@ packages:
dependency: transitive
description:
name: vector_math
- sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.2.0"
vm_service:
dependency: transitive
description:
diff --git a/test/formula_models_test.dart b/test/formula_models_test.dart
index 7263502..01a9953 100644
--- a/test/formula_models_test.dart
+++ b/test/formula_models_test.dart
@@ -116,7 +116,8 @@ void main() {
test('Formula.toStringLiteral creates reversible string', () {
final originalFormula = Formula(
name: "Test Formula",
- description: "A test formula for toStringLiteral",
+ description: r"""A test formula for toStringLiteral, with some latex $x^2$ and special
+ characters like "quotes" and \backslashes\ and some strange combinations \"'~()\\].""",
input: [
VariableSpec(name: 'x', unit: 'meter'),
VariableSpec(name: 'y', unit: 'second', values: ['1', '2', '3']) // Using strings to match D4RT parsing behavior