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