Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .paige/library_test_progress.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"timestamp": "2025-12-11T19:45:12.720800",
"timestamp": "2025-12-13T12:12:24.703466",
"results": {
"library/$project_atts.pl": {
"success": true,
Expand Down Expand Up @@ -149,12 +149,12 @@
"library/numerics/special_functions.pl": {
"success": false,
"short_msg": "\u274c Prolog error",
"detailed_msg": "PrologThrow: error(syntax_error(No terminal matches '\u03b4' in the current parser context, at line 11 col 16\n\n ,\u03b4_inverses_t/5\n ^\nExpected one of: \n\t* PREFIX_FY_200_3\n\t* _LBRA\n\t* SPECIAL_ATOM\n\t* COMPARISON_OP_FUNCTOR\n\t* OPERATOR_ATOM\n\t* INFIX_YFX_500_16\n\t* SPECIAL_ATOM_OPS\n\t* CONTROL_OP_FUNCTOR\n\t* PREFIX_FX_1200_54\n\t* PREFIX_FY_200_4\n\t* PREFIX_FX_1200_53\n\t* VARIABLE\n\t* PREFIX_FX_1150_50\n\t* ARITH_OP_FUNCTOR\n\t* CHAR_CODE\n\t* _LBRACE\n\t* OP_SYMBOL\n\t* PREFIX_FY_900_45\n\t* ATOM\n\t* PREFIX_FX_700_44\n\t* INFIX_OP_FUNCTOR\n\t* STRING\n\t* BANG\n\t* _LPAR\n\t* NUMBER\n), context(consult/1))"
"detailed_msg": "PrologThrow: error(syntax_error(No terminal matches 'P' in the current parser context, at line 10 col 22\n\n ,gamma_P_Q/4\n ^\nExpected one of: \n\t* INFIX_XFY_1105_49\n\t* INFIX_XFY_1000_46\n\t* INFIX_XFX_700_27\n\t* INFIX_XFX_700_31\n\t* INFIX_YFX_400_13\n\t* _RBRA\n\t* INFIX_YFX_500_15\n\t* INFIX_XFX_700_20\n\t* INFIX_XFX_700_39\n\t* INFIX_YFX_400_12\n\t* INFIX_XFX_700_30\n\t* INFIX_XFX_700_34\n\t* INFIX_XFX_700_23\n\t* INFIX_XFX_700_32\n\t* INFIX_XFX_700_33\n\t* INFIX_XFX_700_25\n\t* INFIX_XFX_700_42\n\t* INFIX_YFX_400_9\n\t* INFIX_XFX_700_21\n\t* INFIX_XFX_700_22\n\t* INFIX_XFX_700_26\n\t* INFIX_XFY_200_1\n\t* INFIX_XFX_1200_51\n\t* INFIX_XFX_700_35\n\t* INFIX_YFX_400_11\n\t* INFIX_XFX_700_43\n\t* INFIX_YFX_400_6\n\t* INFIX_XFX_700_36\n\t* INFIX_XFY_1100_48\n\t* INFIX_XFX_1200_52\n\t* INFIX_XFX_700_38\n\t* INFIX_XFX_700_24\n\t* INFIX_XFY_200_2\n\t* INFIX_XFY_600_19\n\t* INFIX_YFX_500_17\n\t* INFIX_XFX_700_37\n\t* INFIX_XFX_700_28\n\t* INFIX_YFX_400_8\n\t* _LPAR\n\t* INFIX_YFX_400_10\n\t* INFIX_YFX_500_18\n\t* INFIX_XFX_700_40\n\t* INFIX_YFX_400_7\n\t* INFIX_YFX_400_5\n\t* INFIX_YFX_500_16\n\t* INFIX_XFX_700_41\n\t* INFIX_XFX_450_14\n\t* INFIX_XFY_1050_47\n\t* INFIX_XFX_700_29\n), context(consult/1))"
},
"library/numerics/testutils.pl": {
"success": false,
"short_msg": "\u274c Prolog error",
"detailed_msg": "PrologThrow: error(syntax_error(No terminal matches '\u03b4' in the current parser context, at line 11 col 16\n\n ,\u03b4_inverses_t/5\n ^\nExpected one of: \n\t* PREFIX_FY_200_3\n\t* _LBRA\n\t* SPECIAL_ATOM\n\t* COMPARISON_OP_FUNCTOR\n\t* OPERATOR_ATOM\n\t* INFIX_YFX_500_16\n\t* SPECIAL_ATOM_OPS\n\t* CONTROL_OP_FUNCTOR\n\t* PREFIX_FX_1200_54\n\t* PREFIX_FY_200_4\n\t* PREFIX_FX_1200_53\n\t* VARIABLE\n\t* PREFIX_FX_1150_50\n\t* ARITH_OP_FUNCTOR\n\t* CHAR_CODE\n\t* _LBRACE\n\t* OP_SYMBOL\n\t* PREFIX_FY_900_45\n\t* ATOM\n\t* PREFIX_FX_700_44\n\t* INFIX_OP_FUNCTOR\n\t* STRING\n\t* BANG\n\t* _LPAR\n\t* NUMBER\n), context(consult/1))"
"short_msg": "\u274c Timeout",
"detailed_msg": "File loading exceeded 30 seconds"
},
"library/ops_and_meta_predicates.pl": {
"success": false,
Expand All @@ -164,7 +164,7 @@
"library/ordsets.pl": {
"success": false,
"short_msg": "\u274c Prolog error",
"detailed_msg": "PrologThrow: error(syntax_error(No terminal matches 't' in the current parser context, at line 22 col 39\n\n ;/* R2 = (=), Item == X2 */ true\n ^\nExpected one of: \n\t* INFIX_YFX_400_9\n\t* INFIX_XFY_600_19\n\t* INFIX_XFY_1050_47\n\t* _RPAR\n\t* INFIX_YFX_500_17\n\t* INFIX_YFX_500_16\n\t* INFIX_XFY_1100_48\n\t* INFIX_YFX_400_6\n\t* INFIX_YFX_500_15\n\t* INFIX_XFX_450_14\n\t* INFIX_YFX_400_12\n\t* INFIX_XFX_1200_50\n\t* INFIX_XFY_200_1\n\t* INFIX_XFY_200_2\n\t* INFIX_XFY_1000_46\n\t* INFIX_YFX_400_5\n\t* INFIX_YFX_500_18\n\t* INFIX_YFX_400_11\n\t* INFIX_YFX_400_13\n\t* INFIX_YFX_400_10\n\t* INFIX_XFX_1200_51\n\t* INFIX_YFX_400_8\n\t* INFIX_YFX_400_7\n\t* _LPAR\n), context(consult/1))"
"detailed_msg": "PrologThrow: error(syntax_error(No terminal matches 'R' in the current parser context, at line 22 col 13\n\n ;/* R2 = (=), Item == X2 */ true\n ^\nExpected one of: \n\t* INFIX_XFY_1000_46\n\t* INFIX_XFX_700_27\n\t* INFIX_XFX_700_31\n\t* INFIX_XFX_1200_50\n\t* INFIX_YFX_400_13\n\t* INFIX_YFX_500_15\n\t* INFIX_XFX_700_20\n\t* INFIX_XFX_700_39\n\t* INFIX_YFX_400_12\n\t* INFIX_XFX_700_30\n\t* INFIX_XFX_700_34\n\t* INFIX_XFX_700_23\n\t* INFIX_XFX_700_32\n\t* INFIX_XFX_700_33\n\t* INFIX_XFX_700_25\n\t* INFIX_XFX_700_42\n\t* INFIX_YFX_400_9\n\t* INFIX_XFX_700_21\n\t* INFIX_XFX_700_22\n\t* INFIX_XFX_700_26\n\t* INFIX_XFY_200_1\n\t* INFIX_XFX_1200_51\n\t* INFIX_XFX_700_35\n\t* INFIX_YFX_400_11\n\t* INFIX_XFX_700_43\n\t* INFIX_YFX_400_6\n\t* INFIX_XFX_700_36\n\t* INFIX_XFY_1100_48\n\t* INFIX_XFX_700_38\n\t* INFIX_XFX_700_24\n\t* INFIX_XFY_200_2\n\t* INFIX_XFY_600_19\n\t* INFIX_YFX_500_17\n\t* INFIX_XFX_700_37\n\t* INFIX_XFX_700_28\n\t* INFIX_YFX_400_8\n\t* _LPAR\n\t* INFIX_YFX_400_10\n\t* INFIX_YFX_500_18\n\t* INFIX_XFX_700_40\n\t* INFIX_YFX_400_7\n\t* INFIX_YFX_400_5\n\t* INFIX_YFX_500_16\n\t* INFIX_XFX_700_41\n\t* INFIX_XFX_450_14\n\t* INFIX_XFY_1050_47\n\t* INFIX_XFX_700_29\n\t* _RPAR\n), context(consult/1))"
},
"library/os.pl": {
"success": true,
Expand Down Expand Up @@ -294,7 +294,7 @@
"library/ugraphs.pl": {
"success": false,
"short_msg": "\u274c Prolog error",
"detailed_msg": "PrologThrow: error(syntax_error(No terminal matches 't' in the current parser context, at line 22 col 39\n\n ;/* R2 = (=), Item == X2 */ true\n ^\nExpected one of: \n\t* INFIX_YFX_400_9\n\t* INFIX_XFY_600_19\n\t* INFIX_XFY_1050_47\n\t* _RPAR\n\t* INFIX_YFX_500_17\n\t* INFIX_YFX_500_16\n\t* INFIX_XFY_1100_48\n\t* INFIX_YFX_400_6\n\t* INFIX_YFX_500_15\n\t* INFIX_XFX_450_14\n\t* INFIX_YFX_400_12\n\t* INFIX_XFX_1200_50\n\t* INFIX_XFY_200_1\n\t* INFIX_XFY_200_2\n\t* INFIX_XFY_1000_46\n\t* INFIX_YFX_400_5\n\t* INFIX_YFX_500_18\n\t* INFIX_YFX_400_11\n\t* INFIX_YFX_400_13\n\t* INFIX_YFX_400_10\n\t* INFIX_XFX_1200_51\n\t* INFIX_YFX_400_8\n\t* INFIX_YFX_400_7\n\t* _LPAR\n), context(consult/1))"
"detailed_msg": "PrologThrow: error(syntax_error(No terminal matches 'R' in the current parser context, at line 22 col 13\n\n ;/* R2 = (=), Item == X2 */ true\n ^\nExpected one of: \n\t* INFIX_XFY_1000_46\n\t* INFIX_XFX_700_27\n\t* INFIX_XFX_700_31\n\t* INFIX_XFX_1200_50\n\t* INFIX_YFX_400_13\n\t* INFIX_YFX_500_15\n\t* INFIX_XFX_700_20\n\t* INFIX_XFX_700_39\n\t* INFIX_YFX_400_12\n\t* INFIX_XFX_700_30\n\t* INFIX_XFX_700_34\n\t* INFIX_XFX_700_23\n\t* INFIX_XFX_700_32\n\t* INFIX_XFX_700_33\n\t* INFIX_XFX_700_25\n\t* INFIX_XFX_700_42\n\t* INFIX_YFX_400_9\n\t* INFIX_XFX_700_21\n\t* INFIX_XFX_700_22\n\t* INFIX_XFX_700_26\n\t* INFIX_XFY_200_1\n\t* INFIX_XFX_1200_51\n\t* INFIX_XFX_700_35\n\t* INFIX_YFX_400_11\n\t* INFIX_XFX_700_43\n\t* INFIX_YFX_400_6\n\t* INFIX_XFX_700_36\n\t* INFIX_XFY_1100_48\n\t* INFIX_XFX_700_38\n\t* INFIX_XFX_700_24\n\t* INFIX_XFY_200_2\n\t* INFIX_XFY_600_19\n\t* INFIX_YFX_500_17\n\t* INFIX_XFX_700_37\n\t* INFIX_XFX_700_28\n\t* INFIX_YFX_400_8\n\t* _LPAR\n\t* INFIX_YFX_400_10\n\t* INFIX_YFX_500_18\n\t* INFIX_XFX_700_40\n\t* INFIX_YFX_400_7\n\t* INFIX_YFX_400_5\n\t* INFIX_YFX_500_16\n\t* INFIX_XFX_700_41\n\t* INFIX_XFX_450_14\n\t* INFIX_XFY_1050_47\n\t* INFIX_XFX_700_29\n\t* _RPAR\n), context(consult/1))"
},
"library/uuid.pl": {
"success": false,
Expand All @@ -312,9 +312,9 @@
"detailed_msg": "File loading exceeded 30 seconds"
},
"library/xpath.pl": {
"success": false,
"short_msg": "\u274c Timeout",
"detailed_msg": "File loading exceeded 30 seconds"
"success": true,
"short_msg": "\u2705 Loaded successfully",
"detailed_msg": ""
}
}
}
1 change: 1 addition & 0 deletions docs/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,7 @@ Basic variant tabling is available via the `:- table` directive.
| Clause body module resolution | ✅ | Unqualified goals resolve via imports → defining module → user |
| `use_module/1,2` | ✅ | Supports full and selective imports, including `library(Name)`; library/ preferred over examples/modules/ for module resolution |
| `consult/1` with `library(Name)` | ✅ | `consult("library(dcgs)")` resolves via library search paths just like `use_module/1` |
| Parsed module cache | ✅📘 | Parsed directives/clauses cached per interpreter using resolved path, operator table version, char conversions, conditional stack, and file mtime to avoid redundant parsing |
| **Operator exports in module/2** | ✅ | **SWI-Prolog compatible - operators can be exported** |
| Imported operator discovery | ✅ | Two-pass parsing: operators from `use_module` targets are pre-scanned and registered before parsing dependent code. Handles block comments, line comments, and recursive imports |
| **Module-scoped predicate namespaces** | ✅ | Each module can define predicates with the same name/arity without conflict. `library(a):foo/1` and `library(b):foo/1` are distinct |
Expand Down
Loading