The builtin {cargo|rail|road|tram}type functions do not work if the corresponding tables are defined by the user
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 58
- Forks
- 46
- Avg merge
- 11d 15h
- Merged PRs (30d)
- 3
Description
There is a topic on the forum that the cargotype function does not work:
https://www.tt-forums.net/viewtopic.php?t=90428
I did some test and looks like that in functioncall.py the global constant tables are empty if the tables defined by the nml file:
https://github.com/OpenTTD/nml/blob/bbe945ed348dfe19d284908983c8bb55e0d840ad/nml/expression/functioncall.py#L480C1-L485
I put the following commands after line 494:
generic.print_dbg(6, global_constants.cargo_numbers)
generic.print_dbg(6, global_constants.railtype_table)
If I define the cargotable and the railtypetable, then that is the output:
{}
{}
So looks like the tables are empty.
If I do not define the railtypetable, the second table is not empty:
{}
{'RAIL': 0, 'MONO': 1, 'MGLV': 2}
Version
$ nmlc --version
0.7.4
Expected result:
The attached nml file can be compiled
Actual result:
nmlc ERROR: "test.nml", line 16: Parameter for railtype() must be a string literal that is also in your railtype table
Steps to reproduce:
-
nmlc test.nml
Output:
nmlc ERROR: "test.nml", line 16: Parameter for railtype() must be a string literal that is also in your railtype table -
Edit the test.nml: comment out the railtypetable:
// railtypetable { RAIL, ELRL, MONO, MGLV }
nmlc test.nml
Output:
nmlc ERROR: "test.nml", line 24: Parameter for cargotype() must be a string literal that is also in your cargo table -
Comment out the cargotable and the cargotype_available if statements too:
// cargotable { PASS, MAIL, LVST }
// if (cargotype_available("LVST"))
// {
// item(FEAT_CARGOS, cargo_lvst, cargotype("LVST"))
// {
// property { weight: 12.0/16; }
// }
// }
nmlc test.nml
Output:
nmlc info: 0 sprites, 0 cached, 0 orphaned, 0 duplicates, 0 newly encoded (native)
nmlc info: Railtype items: 1/64
nmlc info: Concurrent ActionD registers: 1/64 ("test.nml", line 14)
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the failure with the attached test.nml from cargo_type_test.zip using nmlc, then inspect functioncall.py around lines 480-494 and the global constant tables. Done means user-defined cargo and railtype tables are available to cargotype() and railtype() so the example compiles successfully.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 45/100