Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
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
416 changes: 416 additions & 0 deletions BUGS-TO-REPORT.md

Large diffs are not rendered by default.

9 changes: 6 additions & 3 deletions WIP.ExamplesBuild.md
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,10 @@ unpacks it beside, and copies it into every batch staged from the template. The
the repository's to commit: four of the nine ship no licence file, and WinReg embeds WinDevLib,
14 MB.

- **A control package's template also declares the control its samples name.**
`contributed-xCalendar` has `Sources/tbxStageXCalendar.twin` beside its `Settings`, with
`Public xCalendar1 As xCalendar.xCalendar`, as `tbxStage.twin` declares `Text1` for the
built-in controls.
- **One template per package, because a reader's project references one.** With the nine in
one project, VBA_JSON's `Dictionary` class hid the `Scripting.Dictionary` that WinReg's
samples name.
Expand All @@ -330,13 +334,12 @@ the repository's to commit: four of the nine ship no licence file, and WinReg em
until `contributed-WinReg` referenced WinDevLib (at the version WinReg embeds, 8.8.0.507)
and the Scripting Runtime itself. The WinReg landing page tells the reader the same.
- **An error inside an embedded package is the package's, and fails nothing**
(`splitPackageFaults`). BigNumberLib 0.0.0.0 and WinReg 0.0.0.0 do not compile on BETA
(`splitPackageFaults`). BigNumberLib 0.0.0.0, WinReg 0.0.0.0 and ArrayListLib 1.4.0.134 do not compile on BETA
1005: each passes a pointer to a `ByRef` structure parameter without `ByVal` (TB5001). The
template-alone build finds those rows; the run prints them as a note naming the package
rather than as a template FAIL, every other template row still fails, and the samples are
judged by their own rows as before. Their landing pages say so in a NOTE, and both sections
are excluded from the site until the packages compile; `examples.bat` still compiles their
samples, since it reads every page under `docs/` whatever `exclude:` says.
are listed under Experimental Packages until the packages compile.
- **When a section's `indexed_from` moves to a new version, change the version fields in its
`test/example-projects/contributed-<Package>/Settings` with it**, or its samples compile
against the old package. A new contributed section needs a template of its own: a copy of
Expand Down
4 changes: 2 additions & 2 deletions WIP.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ sibling. History goes nowhere: git keeps it.

Reference documentation is **complete** for all thirteen packages: VBA, VBRUN, VB, WebView2, Assert, CustomControls, CEF, WinEventLogLib, WinNamedPipesLib, WinServicesLib, tbIDE, WinNativeCommonCtls and AppGlobalClassObject. It is adapted from primary sources: Microsoft VBA-Docs (CC-BY-4.0) for the runtime library, `.twin` source for the twinBASIC-specific packages. The CEF and WebView2 packages also carry a tutorial set.

Fourteen **contributed** packages from TWINSERV have sections under `docs/Reference/Contributed/`: FileProps, Fmt, OLEGuids, WinReg, TwinTimerPackage, TBMANLIB_Dialog, TBMANLIB_ListBoxHScroll, TBMANLIB_RES, tbProjPacker, tbRegExp and VBA_JSON complete; AutoCompleteLib, BigNumberLib and VBComDlg their main class only. Fmt documents its test code (`HelloWorldClass`, `HelloWorldModule`, `Pootle`) in one paragraph of its landing page, which `exclude_from_docs` names. tbRegExp's `exclude_from_docs` names its private engine module, `StaticRegex`, and tbProjPacker's its helper modules, `modPackUnpack` and `modWin32`: the indexer counts a Public Enum as public even inside a Private Module, because a built-in package's are reached through its library symbol written with an asterisk (`*WinNativeCommonCtls`, as `ImlDrawConstants` says). By its bare name no such enum is reachable, in a built-in or a contributed package (TB5079 on BETA 1005). OLEGuids documents each interface's methods on the interface's page. What TBMANLIB_Dialog's pages say its dialogs do comes from `test/package-probes/TBMANLIB_Dialog/`, which operates them in a built exe on a private desktop; run it again when the package's version changes. tbRegExp is the first section drafted by the doc-draft workflow ([WIP.Indexer.md](WIP.Indexer.md#draft-and-the-doc-draft-workflow)), then reviewed against the sources, the package's README and VBScript's own **RegExp** under `cscript`. Each published one has a chapter in the book's Packages part. **BigNumberLib and WinReg are not published**: their packages do not compile on BETA 1005, so their pages are kept but excluded in `_config.yml`'s `exclude:` (owner, 2026-10-11), whose comment says how to bring one back.
Twenty-six **contributed** packages from TWINSERV have sections under `docs/Reference/Contributed/`: ArrayListLib, FileProps, Fmt, Generics, OLEGuids, WinReg, TwinTimerPackage, tbFileSysTools, TBMANLIB, TBMANLIB_Aes, TBMANLIB_ConsoleComponents, TBMANLIB_ConsoleCore, TBMANLIB_Diagnostic, TBMANLIB_Dialog, TBMANLIB_ListBoxHScroll, TBMANLIB_RES, TBMANLIB_Xml, tbProjPacker, tbRegExp, tsJson, tsPwGen, VBA_JSON and xCalendar complete; AutoCompleteLib, BigNumberLib and VBComDlg their main class only. The two console packages carry a NOTE (owner, 2026-10-12) that the samples harness cannot yet capture a console, so their console claims follow the source. Generics (seven tuple classes) and xCalendar (one control) are each one page (owner, 2026-10-11 and 10-12), so `analyze` in audit mode lists their classes and members as undocumented. What xCalendar's page says it does at run time comes from `test/package-probes/xCalendar/`, which runs the control on a form in a built exe. Fmt documents its test code (`HelloWorldClass`, `HelloWorldModule`, `Pootle`) in one paragraph of its landing page, which `exclude_from_docs` names; Generics' `exclude_from_docs` names its test code, `HelloWorldModule`, which the page does not mention. tbRegExp's `exclude_from_docs` names its private engine module, `StaticRegex`, and tbProjPacker's its helper modules, `modPackUnpack` and `modWin32`: the indexer counts a Public Enum as public even inside a Private Module, because a built-in package's are reached through its library symbol written with an asterisk (`*WinNativeCommonCtls`, as `ImlDrawConstants` says). By its bare name no such enum is reachable, in a built-in or a contributed package (TB5079 on BETA 1005). OLEGuids documents each interface's methods on the interface's page. What TBMANLIB_Dialog's pages say its dialogs do comes from `test/package-probes/TBMANLIB_Dialog/`, which operates them in a built exe on a private desktop; run it again when the package's version changes. tbRegExp is the first section drafted by the doc-draft workflow ([WIP.Indexer.md](WIP.Indexer.md#draft-and-the-doc-draft-workflow)), then reviewed against the sources, the package's README and VBScript's own **RegExp** under `cscript`. Each one has a chapter in the book's Packages part. **ArrayListLib, BigNumberLib, TBMANLIB, TBMANLIB_Aes, TBMANLIB_ConsoleComponents, TBMANLIB_ConsoleCore, TBMANLIB_Diagnostic, TBMANLIB_Xml, WinReg and xCalendar are listed under Experimental Packages** (`docs/Reference/Experimental.md`, owner 2026-10-12): ArrayListLib, BigNumberLib and WinReg do not compile on BETA 1005 (each documented from its source alone, its samples compile-only), xCalendar has defects that can hang a program, TBMANLIB crashes the compiler in a 64-bit build and has many members that fail or give wrong results, TBMANLIB_ConsoleComponents cannot take a cConsole of the published TBMANLIB_ConsoleCore (it embeds a private copy of it), TBMANLIB_ConsoleCore reads keys wrongly, TBMANLIB_Diagnostic cannot create its Dictionary or make a text report and misplaces List items, TBMANLIB_Aes runs other cipher modes than the ones named (its default CBC is ECB) and fails the NIST test vectors, and TBMANLIB_Xml's parser misreads self-closing elements and entities and does not return for some malformed text. TBMANLIB_Xml's `exclude_from_docs` names its test module, `mXmlTests`, which its landing page describes in a paragraph; tsPwGen's names its five test modules and its six internal modules, and tsJson's its test and internal modules likewise, which their landing pages describe in a paragraph each. See *Where things live* for how a package moves between the two lists.

The rest of this file is the maintenance guide for updating existing pages or adding new ones: package surface notes, page conventions, and the integrity check.

Expand Down Expand Up @@ -79,7 +79,7 @@ The rest of this file is the maintenance guide for updating existing pages or ad
> would file the page as a *static file* and serve the raw markdown. Editors on
> Windows add a BOM unasked. `lib/frontmatter.mjs` strips a leading BOM before parsing.
- `docs/Reference/Built-In/tbIDE/` — IDE Extensibility package (this is the **addin SDK**). The package is type-only — it ships **public interfaces + CoClasses** that an addin DLL binds to; every implementation behind them lives in the twinBASIC IDE itself. The user-facing surface is one entry-point factory (`tbCreateCompilerAddin`) plus 23 CoClasses grouped by role: the addin contract (`AddIn`), the root API (`Host`), the loaded `Project`, the editors collection (`Editor` / `CodeEditor` / `Editors`), the virtual file system (`FileSystem` / `FileSystemItem` / `Folder` / `File`), the in-IDE UI surface (`Toolbar` / `Toolbars` / `Button` / `ToolWindow` / `ToolWindows`), the HTML DOM inside a tool window (`HtmlElement` / `HtmlElements` / `HtmlElementProperty` / `HtmlElementProperties` / `HtmlEventProperty` / `HtmlEventProperties`), the `DebugConsole`, `KeyboardShortcuts`, `Themes`, and the single concrete user-instantiable helper class `AddinTimer`. Flat layout — one page per CoClass / Class plus the index landing.
- `docs/Reference/Contributed/` — the contributed packages, one folder each, landing page `Contributed.md` beside it. **A package's landing page opens, under its H1, with `**Author:**`** (owner, 2026-10-11): the publisher TWINSERV lists (`publisher` in `indexer/.packages/manifests/contributed.json`), or the author the package's own sources name when that is someone else (VBA_JSON: Tim Hall, published by WaynePhillipsEA). Then `**On GitHub:**` with a link, when a repository holds the package, or the library the package says it is made from; search GitHub for the package's name and the author's account, and check that the repository holds the package's code (its history too: `TBMANLIB_*` were never in woeoio's `tbman`). A landing page with one or two sections has no `* TOC` list. A class with member pages is a folder, `<Class>/index.md` at `/tB/Packages/Contributed/<Package>/<Class>/` with its members beside it, so a member links to its class as `(.)`; a class documented on one page is `<Class>.md`. Each package is a chapter of the book's Packages part in `_book.yml`. A section's `indexed_from` is the four-part TWINSERV version, and its snapshot is under `indexer/snapshots/contributed/`. Its samples compile in the `contributed-<Package>` sample template, whose `Settings` names the package's version: **change that version with `indexed_from`** ([WIP.ExamplesBuild.md](WIP.ExamplesBuild.md#template-projects)). **A contributed package is documented and its samples compiled against the newest twinBASIC BETA installed, never an older one** (owner, 2026-10-11): the version that matters is the package's, and a statement about the compiler (such as "does not compile on BETA 1005") names that newest build.
- `docs/Reference/Contributed/` — the contributed packages, one folder each, landing page `Contributed.md` beside it. **A package's landing page opens, under its H1, with `**Author:**`** (owner, 2026-10-11): the publisher TWINSERV lists (`publisher` in `indexer/.packages/manifests/contributed.json`), or the author the package's own sources name when that is someone else (VBA_JSON: Tim Hall, published by WaynePhillipsEA). Then `**On GitHub:**` with a link, when a repository holds the package, or the library the package says it is made from; search GitHub for the package's name and the author's account, and check that the repository holds the package's code (its history too: `TBMANLIB_*` were never in woeoio's `tbman`). A landing page with one or two sections has no `* TOC` list. A class with member pages is a folder, `<Class>/index.md` at `/tB/Packages/Contributed/<Package>/<Class>/` with its members beside it, so a member links to its class as `(.)`; a class documented on one page is `<Class>.md`. Each package is a chapter of the book's Packages part in `_book.yml`. A section's `indexed_from` is the four-part TWINSERV version, and its snapshot is under `indexer/snapshots/contributed/`. Its samples compile in the `contributed-<Package>` sample template, whose `Settings` names the package's version: **change that version with `indexed_from`** ([WIP.ExamplesBuild.md](WIP.ExamplesBuild.md#template-projects)). **A contributed package is documented and its samples compiled against the newest twinBASIC BETA installed, never an older one** (owner, 2026-10-11): the version that matters is the package's, and a statement about the compiler (such as "does not compile on BETA 1005") names that newest build. **A contributed package that does not compile on that build, or has defects that a program would meet, is listed under Experimental Packages** (owner, 2026-10-12): `docs/Reference/Experimental.md`, at `/tB/Packages/Experimental/`, after Contributed Packages. Its landing page's `parent:` is `Experimental Packages`, its line is in `Experimental.md` and not in `Contributed.md`, and its book chapter follows the Experimental Packages chapter. Its folder and URLs stay under `Contributed/`, so a package that is fixed moves back by changing only those three, and its pages keep their addresses.
- `docs/Reference/Statements.md` — alphabetical index of language statements.
- `docs/Reference/Procedures and Functions.md` — alphabetical index of procedures/functions.
- `docs/LLVM/` — the LLVM section: compiling with the LLVM back end. A top-level section between Features and Reference Section in the nav, at `nav_order: 6` (Features is 5). `index.md` is the landing page and `Getting-Started.md` the only page so far, with its screenshots under `Images/`. Everything it describes arrived in **BETA 984**. Its language claims are measured on BETA 995 with `tbrun --llvm` and `--exe`: the comma, space and comma-space spellings of `[CompilerOptions]` all turn LLVM and `+optimize` on, `[CompilerOptions("")]` turns it off under project-wide LLVM, the long CPU-flag sample runs, and an error is lost between procedures when either the callee or the caller is LLVM-compiled. Its samples are marked `check_build`, which compiles them; `examples.bat --llvm` also builds them with LLVM.
Expand Down
Binary file not shown.
25 changes: 25 additions & 0 deletions bugs/activex-control-class-variable/repro.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"mode": "run",
"expect": {
"exit": 0,
"output": [
"^Dim sc As New ScriptControl: sc\\.Language = \"JScript\"\\s+91\\s+Object variable or With block variable not set$",
"^Dim sc As New ScriptControl: sc\\.Eval\\(\"1 \\+ 2\"\\) =\\s+91\\s+Object variable or With block variable not set$",
"^Private ModuleSc As New ScriptControl \\(module level\\): ModuleSc\\.Language\\s+91\\s+Object variable or With block variable not set$",
"^Public Sc As New ScriptControl \\(class field\\): h\\.Sc\\.Language\\s+91\\s+Object variable or With block variable not set$",
"^Dim sc As ScriptControl: Set sc = New ScriptControl\\s+-2147467262\\s+No such interface supported$",
"^Dim sc As ScriptControl: Set sc = CreateObject\\(\"MSScriptControl\\.ScriptControl\"\\)\\s+-2147467262\\s+No such interface supported$",
"^Dim o As Object: Set o = New ScriptControl\\s+0\\s*$",
"^Dim sc As ScriptControl: Set sc = o\\s+-2147467262\\s+No such interface supported$",
"^Object variable: o\\.Eval\\(\"1 \\+ 2\"\\) = 3\\s+0\\s*$",
"^IScriptControl variable: i\\.Eval\\(\"1 \\+ 2\"\\) = 3\\s+0\\s*$",
"^Dim w As Winsock: Set w = New Winsock\\s+-2147467262\\s+No such interface supported$",
"^Dim wa As New Winsock: wa\\.LocalPort\\s+91\\s+Object variable or With block variable not set$",
"^Dim wo As Object: Set wo = New Winsock\\s+0\\s*$",
"^Dim cd As CommonDialog: Set cd = New CommonDialog\\s+-2147467262\\s+No such interface supported$",
"^Dim cdo As Object: Set cdo = New CommonDialog\\s+0\\s*$",
"^Dim d As New Scripting\\.Dictionary: d\\.Add, d\\.Count = 1\\s+0\\s*$",
"^Dim c As New ADODB\\.Connection: ConnectionString = x\\s+0\\s*$"
]
}
}
111 changes: 111 additions & 0 deletions bugs/activex-control-class-variable/src/Settings
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
{
"configuration.inherits": "Defaults",
"project.appTitle": "ActivexControlClassVariable",
"project.buildPath": "${SourcePath}\\Build\\${ProjectName}_${Architecture}.${FileExtension}",
"project.buildType": "Standard EXE",
"project.description": "Reproduces: A variable declared as the class of an ActiveX control cannot hold the control: Set raises No such interface supported, and Dim As New leaves an unusable object",
"project.exportPathIsV2": true,
"project.id": "{D2EA1E0C-5243-4B29-8D64-BC07DA4C8ADD}",
"project.name": "ActivexControlClassVariable",
"project.optionExplicit": true,
"project.references": [
{
"id": "{00020430-0000-0000-C000-000000000046}",
"lcid": 0,
"name": "OLE Automation",
"path32": "C:\\Windows\\SysWOW64\\stdole2.tlb",
"path64": "C:\\Windows\\System32\\stdole2.tlb",
"symbolId": "stdole",
"versionMajor": 2,
"versionMinor": 0
},
{
"id": "{F50B82D0-DCAB-43FE-9631-11959D4A4728}",
"isCompilerPackage": true,
"licence": "MIT",
"name": "[COMPILER PACKAGE] twinBASIC - VB Compatibility Package (Forms)",
"path32": "",
"path64": "",
"publisher": "TWINBASIC-COMPILER",
"symbolId": "VB",
"versionBuild": 0,
"versionMajor": 0,
"versionMinor": 0,
"versionRevision": 31
},
{
"id": "{C192FB39-64CA-4D9B-B477-A5502F48EFCC}",
"isCompilerPackage": true,
"licence": "MIT",
"name": "[COMPILER PACKAGE] twinBASIC - App global class object",
"path32": "",
"path64": "",
"publisher": "TWINBASIC-COMPILER",
"symbolId": "AppGlobalClassProject",
"versionBuild": 0,
"versionMajor": 1,
"versionMinor": 0,
"versionRevision": 0
},
{
"id": "{0E59F1D2-1FBE-11D0-8FF2-00A0D10038BC}",
"lcid": 0,
"name": "Microsoft Script Control 1.0",
"path32": "C:\\Windows\\SysWOW64\\msscript.ocx",
"path64": "",
"symbolId": "MSScriptControl",
"versionMajor": 1,
"versionMinor": 0
},
{
"id": "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}",
"lcid": 0,
"name": "Microsoft Winsock Control 6.0 (SP6)",
"path32": "C:\\Windows\\SysWOW64\\mswinsck.ocx",
"path64": "",
"symbolId": "MSWinsockLib",
"versionMajor": 1,
"versionMinor": 0
},
{
"id": "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}",
"lcid": 0,
"name": "Microsoft Common Dialog Control 6.0 (SP6)",
"path32": "C:\\Windows\\SysWOW64\\comdlg32.ocx",
"path64": "",
"symbolId": "MSComDlg",
"versionMajor": 1,
"versionMinor": 2
},
{
"id": "{420B2830-E718-11CF-893D-00A0C9054228}",
"lcid": 0,
"name": "Microsoft Scripting Runtime",
"path32": "C:\\Windows\\SysWOW64\\scrrun.dll",
"path64": "C:\\Windows\\System32\\scrrun.dll",
"symbolId": "Scripting",
"versionMajor": 1,
"versionMinor": 0
},
{
"id": "{2A75196C-D9EB-4129-B803-931327F72D5C}",
"lcid": 0,
"name": "Microsoft ActiveX Data Objects 2.8 Library",
"path32": "C:\\Program Files (x86)\\Common Files\\System\\ado\\msado28.tlb",
"path64": "C:\\Program Files\\Common Files\\System\\ado\\msado28.tlb",
"symbolId": "ADODB",
"versionMajor": 2,
"versionMinor": 8
}
],
"project.settingsVersion": 1,
"project.startupObject": "Sub Main",
"project.warnings": {
"errors": [],
"hints": [],
"ignored": [],
"info": [],
"warnings": []
},
"runtime.useUnicodeStandardLibrary": true
}
Loading
Loading