Irmen de Jong
7dd7e562bc
pipes also as expressions, cleanup codegen, fix various typecasting issues
2022-01-08 13:45:19 +01:00
Irmen de Jong
17694c1d01
better error handling of invalid number casts
2022-01-07 22:12:13 +01:00
Irmen de Jong
749ad700d8
naming consistency for some expression classes
2022-01-07 21:02:55 +01:00
Irmen de Jong
8f3df3039a
added pipe operator `|>
`
2022-01-06 22:54:18 +01:00
Irmen de Jong
02c315c194
add missing unit tests and type checking for 'in' expression
2022-01-06 00:01:49 +01:00
Irmen de Jong
96225efd96
library doc tweaks
2022-01-03 23:15:34 +01:00
Irmen de Jong
74257163b1
fix that memory("name", ...) also allocates a STR variable for the name
2022-01-02 17:07:04 +01:00
Irmen de Jong
7bc75fd220
fix that memory("a b c", ...) produces invalid symbol
2022-01-02 16:11:53 +01:00
Irmen de Jong
a23281afab
added experimental -noreinit option
2022-01-01 16:35:36 +01:00
Irmen de Jong
c15a75556d
Merge branch 'master' into c128target
...
# Conflicts:
# compiler/src/prog8/CompilerMain.kt
# examples/test.p8
2021-12-30 18:22:05 +01:00
Irmen de Jong
5267e06969
added -asmlist cli option to produce assembler listing output
2021-12-30 14:42:09 +01:00
Irmen de Jong
05a1ddad05
Merge branch 'master' into c128target
...
# Conflicts:
# examples/test.p8
2021-12-29 18:14:24 +01:00
Irmen de Jong
de6ce4a46e
add "X in [1,2,3]" expression (efficient containment check)
2021-12-29 17:26:00 +01:00
Irmen de Jong
7a9e5afb93
fix: for loop over array literal no longer crashes the compiler
2021-12-28 17:51:38 +01:00
Irmen de Jong
b2876b0a03
add a suggestion to use when statement if it seems appropriate
2021-12-28 16:38:12 +01:00
Irmen de Jong
30f04962d4
Merge branch 'master' into c128target
...
# Conflicts:
# codeGeneration/src/prog8/codegen/target/C128Target.kt
# codeGeneration/src/prog8/codegen/target/c128/C128MachineDefinition.kt
# codeGeneration/src/prog8/codegen/target/c128/C128Zeropage.kt
# compiler/src/prog8/CompilerMain.kt
# compiler/src/prog8/compiler/Compiler.kt
2021-12-28 14:30:11 +01:00
Irmen de Jong
0feeb88024
codegen package rename 2
2021-12-28 14:23:36 +01:00
Irmen de Jong
56d21de001
Merge branch 'master' into c128target
...
# Conflicts:
# examples/test.p8
2021-12-28 13:57:27 +01:00
Irmen de Jong
7b54aa0c7d
more consistent naming of the statement classes
2021-12-28 13:56:47 +01:00
Irmen de Jong
6e11b8ada1
GoSub no longer inherits from Jump node, fixes subtle ast/codegen bugs related to jsrs
2021-12-28 01:55:13 +01:00
Irmen de Jong
67b0890a6e
remove unneeded var inits when an assignment is already present
2021-12-25 23:31:25 +01:00
Irmen de Jong
6da83e2bd7
first steps to add C128 compiler target
2021-12-21 19:08:33 +01:00
Irmen de Jong
77c2b2b326
fix position of @shared in array var declarations so that the order is now type[] @shared
2021-12-16 20:36:05 +01:00
Irmen de Jong
629117e594
code size optimization: subroutine calls with 1 int arg will pass it via register instead of separate param assignment at every call site
2021-12-16 00:56:59 +01:00
Irmen de Jong
1ff13723fe
implicit int to float conversion is now an error if floats are not enabled.
2021-12-15 01:52:28 +01:00
Irmen de Jong
510bda1b28
fix compiler crash when using floats in a comparison expression
2021-12-15 01:24:25 +01:00
Irmen de Jong
3d743a1ba1
added more constfolding
2021-12-09 23:32:48 +01:00
Irmen de Jong
abca618008
added more constfolding
2021-12-09 23:12:12 +01:00
Irmen de Jong
0d2c3901a3
added more constfolding
2021-12-09 22:12:31 +01:00
Irmen de Jong
d8d56b195f
comments
2021-12-09 21:13:13 +01:00
Irmen de Jong
98315de723
allow using ubyte[] as subroutine parameter type (because it is equivalent to uword pointer var)
2021-12-07 23:28:45 +01:00
Irmen de Jong
dcf487bdc1
fix: correctly insert return statement if needed to prevent 'fall through' into following subroutine
...
this wasn't working correctly anymore when the last statement before the subroutine was a jump/goto
2021-12-07 21:34:50 +01:00
Irmen de Jong
837804b231
test for string x and u escape sequences
2021-12-05 18:39:34 +01:00
Irmen de Jong
0018dc6ce7
refactor machinedefinition
2021-12-04 19:07:19 +01:00
Irmen de Jong
0498444ef2
moved all unit tests into single project to avoid dependency issues
2021-12-04 18:20:22 +01:00
Irmen de Jong
ce3c34e458
tweak in error output for file links, corrected column number off-by-one
2021-12-04 16:52:03 +01:00
Irmen de Jong
b867d8f731
cleanups
2021-12-04 01:03:51 +01:00
Irmen de Jong
b7fffbb6df
release 7.4.1 - oops, funcion call arg count validation was broken
2021-12-01 21:44:03 +01:00
Irmen de Jong
3d1d0696b9
refactor compiler arguments passing
2021-11-30 01:40:21 +01:00
Irmen de Jong
9ecf95b075
fix syntaxerror in const processing of ranges if it contained variables
2021-11-29 23:36:41 +01:00
Irmen de Jong
a2db44f80c
also consider Y register for clobber check for functioncall arguments
2021-11-29 22:09:05 +01:00
Irmen de Jong
c838821615
refactor fuction arguments codegen a bit
2021-11-27 21:14:21 +01:00
Irmen de Jong
110e047681
replace subroutine calls (statement) by GoSub
2021-11-26 19:47:01 +01:00
Irmen de Jong
17d403d812
Merge branch 'ref-subroutine-param' into v7.4-dev
...
# Conflicts:
# compilerAst/src/prog8/ast/AstToplevel.kt
2021-11-26 01:12:14 +01:00
Irmen de Jong
e52d05c7db
fix some scoping related symbol lookup issues, clarified scoping rules in docs
2021-11-23 23:43:23 +01:00
Irmen de Jong
b00db4f8a2
no longer report unknown type errors as well for unknown symbols,
...
added a bunch more unit tests for symbol scoping rules
2021-11-23 22:45:57 +01:00
Irmen de Jong
ff715881bc
allow scoped identifiers to reference a subroutine parameter directly.
...
also for asmsubroutines, but the asm generation for that is not yet done.
2021-11-21 23:21:39 +01:00
Irmen de Jong
8887e6af91
fix substituting 0 only if its actually the same variable that's substituted
2021-11-21 12:34:57 +01:00
Irmen de Jong
b292124f3c
replaced many short/int values by unsigned types if appropriate
2021-11-21 00:55:56 +01:00
Irmen de Jong
c0035ba1a2
char encodings now use UByte type instead of short
2021-11-21 00:07:17 +01:00
Irmen de Jong
adfaddbcf4
give a nicer error when given a wrong compilation target.
2021-11-20 18:30:55 +01:00
Irmen de Jong
74db5c6be7
fix referencesIdentifier() and better removal of unnecessary assignments
2021-11-20 17:41:41 +01:00
Irmen de Jong
f9399bcce7
r=(q+r)-c and r=q+(r-c) are now both also 'augmentable', and BinExprSplitter doesn't check for associativeOperator anymore
2021-11-20 02:03:32 +01:00
Irmen de Jong
87600b23db
fix constvalue parent linkage for prefix and typecast
2021-11-20 00:20:35 +01:00
Irmen de Jong
cedfb17b18
fix too aggressive removal of vars that weren't completely unused
2021-11-19 22:49:35 +01:00
Irmen de Jong
fa4c83df6b
added 3 tests for discovered problems
2021-11-18 23:55:20 +01:00
Irmen de Jong
42c8720e8b
fix float rounding tests
2021-11-18 22:54:49 +01:00
Irmen de Jong
b334d89715
refactor and fix the way memory addresses are checked to be in IO space or regular ram
2021-11-18 22:47:58 +01:00
Irmen de Jong
4c82af36e6
fix improperly changed behavior about =0 initializer
2021-11-18 00:17:22 +01:00
Irmen de Jong
dafa0d9138
fix compiler crash bug due to reused ast expression nodes. Now all (relevant) Nodes have a copy() function to make a clone.
2021-11-17 23:05:59 +01:00
Irmen de Jong
f48d6ca9f8
simplified NumericLiteral to always just contain a Double instead of a Number for the value
2021-11-16 23:52:54 +01:00
Irmen de Jong
c858ceeb58
compiler shouldn't use cx16.r15 as temp var
2021-11-14 02:38:59 +01:00
Irmen de Jong
f0f52b9166
optimize typecasted binary expression to avoid even more estack use. also fix wrong parent crash in removal of unused variable's assignments.
2021-11-13 14:22:37 +01:00
Irmen de Jong
3483515346
preparing for more optimizations
2021-11-12 23:23:51 +01:00
Irmen de Jong
75a06d2a40
preparing for more optimizations
2021-11-12 02:17:37 +01:00
Irmen de Jong
53ac11983b
better unused variable removal
2021-11-11 03:03:21 +01:00
Irmen de Jong
8df3da11e3
add cosr8, sinr8, cosr16 and sinr16 builtin functions that take a degree 0..179 (= 0..358 in 2 degree steps)
...
to more easily scale halves/quarters etc of a circle than possible with the ones that take 0..255 'degrees'.
2021-11-09 23:39:26 +01:00
Irmen de Jong
b909facfe5
fix compiler stackoverflow crash on certain typecasted expressions containing floats.
2021-11-09 19:31:19 +01:00
Irmen de Jong
7780d94de1
discovered crash related to float typecasting in asm assignment codegen
2021-11-09 03:45:07 +01:00
Irmen de Jong
4937e004b5
fix compiler crash where it used wrong datatype in split assignment
...
fixes crash for "ubyte bb ;; uword ww ;; bb = not bb or not ww"
2021-11-09 01:13:23 +01:00
Irmen de Jong
2d1e5bbc7e
remove unimportant empty tests
2021-11-08 17:00:10 +01:00
Irmen de Jong
7961a09d16
converting compiler module's testcases to kotest assertions
2021-11-08 16:14:22 +01:00
Irmen de Jong
613efcacc7
converting compiler module's testcases to kotest (ongoing)
2021-11-08 15:08:48 +01:00
Irmen de Jong
eea3fb48a8
add command line option 'optfloatx' to explicitly re-enable float expr optimization as this can increase code size significantly.
...
The output size of the various example programs using floating point, when not using this optimization, has been reduced significantly.
The resulting code runs a (tiny) bit slower though.
2021-11-03 22:52:08 +01:00
Irmen de Jong
b4fa72c058
fix parent node linkage for reading array parameter
2021-11-03 21:57:31 +01:00
Irmen de Jong
7e287a5359
proper parent node linkage in generated const values out of typecast expressions. Fixes crash mentioned in #72
2021-11-02 00:47:01 +01:00
Irmen de Jong
1110bd0851
fix vardecl initialization value to not use stack eval anymore but separate assignment
...
(this causes the optimized assignment code gen to be used instead)
but some programs now end up larger in output size
2021-11-01 00:24:15 +01:00
Irmen de Jong
dfbef8495d
got rid of ParsingFailedError
2021-10-30 17:05:23 +02:00
Irmen de Jong
7b17c49d8f
update petscii tables with improvements to box drawing chars. fixes #68
2021-10-30 16:45:23 +02:00
Irmen de Jong
4b3f31c2ee
added option to suppress assembler output (and enabled this in unit tests)
2021-10-30 15:26:40 +02:00
Irmen de Jong
9ccc65bf8f
more petscii tests
2021-10-30 15:15:11 +02:00
Irmen de Jong
3767b4bbe7
'Program' is not an ast Node
2021-10-30 00:25:34 +02:00
Irmen de Jong
d7d2eefa4f
implemented CharLiteral.constValue()
2021-10-30 00:05:55 +02:00
Irmen de Jong
6737f28d1e
moved unittests of compilerInterfaces into compiler module itself
2021-10-29 23:46:51 +02:00
Irmen de Jong
3da9404c2d
removed memsizer arg from all builtin functions
2021-10-29 23:38:31 +02:00
Irmen de Jong
1137da37c3
reshuffle ErrorReporter
2021-10-29 17:02:03 +02:00
Irmen de Jong
495a18805c
move asmgen test to codeGeneration module
2021-10-29 16:20:53 +02:00
Irmen de Jong
a226b82d0b
cleanup imports
2021-10-29 05:30:12 +02:00
Irmen de Jong
0b5ddcdc9b
split out the code generator into own project submodule
2021-10-29 05:00:30 +02:00
Irmen de Jong
f21dcaa6fb
split out the code optimizers into own project submodule
2021-10-29 02:42:10 +02:00
Irmen de Jong
7d22b9b9f9
simplified name conflict check for sub params
2021-10-29 00:20:33 +02:00
Irmen de Jong
2bf4017f2b
fix nested label lookups in anon scopes
...
fixed non-global qualified names lookup
2021-10-28 23:48:01 +02:00
Irmen de Jong
08d2f8568b
refactoring symbol lookups
2021-10-27 23:48:12 +02:00
Irmen de Jong
ac5f45d2d4
fix nested label lookups in anon scopes (partly)
2021-10-27 02:41:24 +02:00
Irmen de Jong
9684f4e42a
add unit tests for AnonScope refactoring, cleaned up imports
2021-10-27 00:05:46 +02:00
Irmen de Jong
5e1459564a
no longer take AddressOf a str-variable that is a subroutine's parameter with str type (it's just an address/uword already)
2021-10-25 23:49:01 +02:00
Irmen de Jong
69a8813a3d
first steps to add support for str parameter type
2021-10-24 20:57:10 +02:00
Irmen de Jong
17175df835
more precise error messages checks
2021-10-24 19:14:46 +02:00
Irmen de Jong
6b32535cb6
don't complain about uninitialized str var if it's not a var
2021-10-24 15:13:38 +02:00
Irmen de Jong
2815a14bb5
(7.2) can now test for specific error messages, and specify to omit invoking assembler in tests
2021-10-22 01:25:26 +02:00
Irmen de Jong
f4dfa60790
(7.2) tests for pass by ref parameters
2021-10-22 00:41:34 +02:00
Irmen de Jong
4d5094a517
(7.2) cleanup Petscii converter errorhandling, add unit tests for error scenarios
2021-10-20 23:48:20 +02:00
Irmen de Jong
dd5abae721
move testcase to proper location
2021-10-20 23:08:40 +02:00
Irmen de Jong
440abf4998
fix test to recognise inserted return statements
2021-10-20 22:50:18 +02:00
Irmen de Jong
df2d5c6585
tests for callgraph and unused subroutine removal in optimizer
2021-10-20 22:24:10 +02:00
Irmen de Jong
82d20dea39
a few comment and TODO cleanups.
...
remove remark about chars UBYTE type, kotlin's closest native type that can contain 0-255 is a short.
2021-10-19 23:20:34 +02:00
Irmen de Jong
804bb06859
clarified isInRegularRAM() by making it an extension method on AssignTarget
2021-10-19 22:36:05 +02:00
Irmen de Jong
5afa7e53f8
got rid of program arg for isInRegularRAM
2021-10-19 22:30:30 +02:00
Irmen de Jong
552e0c2248
rename mainModule to toplevelModule.
...
failed module no longer retains in the Ast.
improved some tests on that.
2021-10-19 21:49:05 +02:00
Irmen de Jong
502bf90007
comments
2021-10-19 01:12:28 +02:00
Irmen de Jong
aea364e43d
paths are now always relative to the current directory. Fixes #64
2021-10-16 14:26:33 +02:00
Irmen de Jong
06defd0cb0
paths are now always relative
2021-10-16 02:43:22 +02:00
Irmen de Jong
16ed68c1ec
Module.name is now derived back from the source's origin string
2021-10-14 23:58:14 +02:00
Irmen de Jong
e63cf660c6
petscii now use Result instead of Either
2021-10-13 23:22:46 +02:00
Irmen de Jong
aaff484306
refactor executeImportDirective
2021-10-13 23:14:27 +02:00
Irmen de Jong
0447b3e4cc
remove testcase that attempted to check invalid %import syntax.
...
we only allow unquoted names, without filename suffix, in %import.
2021-10-13 22:10:35 +02:00
Irmen de Jong
d790878af6
enabled test
2021-10-13 20:28:42 +02:00
Irmen de Jong
6070afa6b6
cleanup SourceCode class
2021-10-13 19:16:01 +02:00
Irmen de Jong
6b8c3ef614
renamed command line option -libdirs to -srcdirs
...
this more clearly separates this meaning from the internal library modules
2021-10-13 18:16:51 +02:00
Irmen de Jong
66574d058a
renamed InferredType.typeOrElse to getOr()
...
this is closer to the convention of most functional return types
2021-10-13 00:21:38 +02:00
Irmen de Jong
1c7c67060d
better result and error handling for importModule()
2021-10-12 23:54:48 +02:00
Irmen de Jong
9827ee97ad
better returnvalue/errorhandling for Petscii encoding
2021-10-12 23:26:45 +02:00
Irmen de Jong
e5a1b37981
simplify
2021-10-12 01:22:17 +02:00
Irmen de Jong
30aa72dc8e
fix unittest and use kotlin.test method to test for exceptions
2021-10-11 21:22:06 +02:00
Irmen de Jong
2c2d474059
fix crash when attempting to import non-existing module
2021-10-11 20:37:55 +02:00
Irmen de Jong
2d26b9c994
fixed module parent linking mistakes in unit tests: module's parent should always be the GlobalNamespace
2021-10-11 01:34:55 +02:00
Irmen de Jong
f38fe092ee
optimized imports
2021-10-11 00:22:04 +02:00
Irmen de Jong
5db0408b9f
syntactic sugar: turned some functions into read only properties
2021-10-11 00:05:51 +02:00
Irmen de Jong
73838ccb8b
ref github issue
2021-10-10 23:00:31 +02:00
Irmen de Jong
371d4768e6
fix filename case issue
2021-10-09 17:59:40 +02:00
Irmen de Jong
7241cef7a5
fix char range in float-range test and exclude test.p8 example from tests
2021-09-12 18:59:53 +02:00
Irmen de Jong
5145296486
fix test assertion for float ranges (and re-enable test)
2021-09-12 18:53:12 +02:00
Irmen de Jong
2cbf2d2226
fix regression in imported module order (reversed)
...
this caused an error in determining the main module and correct compilation options
2021-09-12 18:16:24 +02:00
meisl
ac02a99934
* move ModuleImporter to prog8.compiler (package & module), together with its tests
2021-08-02 10:07:19 +02:00
meisl
fb67d1155f
* structure TestCompilerOnImportsAndIncludes, add (@Disabled for now) test re %import with string arg
2021-08-02 08:57:09 +02:00
meisl
eb46852bb9
* restrict access to Program.modules, add tests
2021-08-02 08:15:20 +02:00
meisl
c914f7bbcf
+ TestCompilerOptionLibdirs.kt: libdirs option doesn't seem to work
2021-08-01 10:16:37 +02:00
meisl
1b451180c1
* test helpers assumeXyz (helpers/paths.kt) return the resulting path (unless they fail, of course); test directories are checked automatically at init, so no sanityCheckDirectories is needed anymore
2021-07-31 14:44:02 +02:00
meisl
e1026584c8
* split up test helpers into separate files, move mapCombinations(..) down to compilerAst/test/helpers since they're generic and don't depend on compiler
2021-07-30 18:37:12 +02:00
meisl
4c615e4fac
* solve problem re shared test helpers: a) don't use the same file name (results in same JVM class name) & b) tell gradle about it (put them in extra dir(s) test/helpers/ and add this to test source set)
2021-07-30 17:19:44 +02:00
meisl
db76c8d7f4
-/* remove IStringEncoding as param in compilerAst, and all other uses that were only because of that.
...
For good measure we also turn on *all* compiler tests with examples (they do take some time).
Note that the total *mentions* of IStringEncoding in the entire project went down from ~50 to 6, only 3 of which are *actual uses* (the others are 2 imports and 1 supertype ref in ICompilationTarget : IStringEncoding)!
2021-07-17 22:08:17 +02:00
meisl
522bf91c30
* refactor RangeExpr, step 2: make toConstantIntegerRange and size *extension methods* and move them to compiler/astprocessing/AstExtensions.kt (along with the simple helper makeRange). They are in fact *only* used from the compiler module - strong indication that they actually belong there.
2021-07-17 21:13:34 +02:00
meisl
48d3abc1fe
* refactor RangeExpr, step 1: remove IStringEncoding as ctor arg and instead put it as arg to the two methods that actually depend on it: toConstantIntegerRange and size (as *it* calls the former)
2021-07-17 20:45:17 +02:00
meisl
3f6f25e06f
* @Disable tests re unsolved #55 , "float[] initializer with range and no explicit array size"
2021-07-17 17:12:16 +02:00
meisl
34ba07ee3b
+ expose #55 : float[] initializer as range where no array size is stated
2021-07-17 16:30:16 +02:00
meisl
ac37319d20
Merge branch 'bug_asmbinary' into testability_steps_1_2_3_again
2021-07-17 15:08:32 +02:00
meisl
b2c6274f74
* fix #54 / step 3: avoid some (= not all) complaints re the .binary filename 64tass still had/has.
...
Actually, I don't quite understand why it still says "not the real name of the file". The 64tass docs say:
> -Wno-portable
> Don't warn about source portability problems.
> These cross platform development annoyances are checked for:
> * Case insensitive use of file names or use of short names.
> * Use of backslashes for path separation instead of forward slashes.
> * Use of reserved characters in file names.
> * Absolute paths
2021-07-17 13:03:05 +02:00
meisl
ee115b3337
+ expose #54 , %asmbinary when outputDir != workingDir; also: refactor compiler tests on examples and add test helpers
2021-07-17 13:02:20 +02:00
meisl
82f5a141ed
* reintroduce the conversion of CharLiteral to UBYTE literals, but now *during AST preprocessing*, not in the parser
2021-07-11 22:03:32 +02:00
meisl
0567168ea9
+ add AST node CharLiteral, *without* turning them into ubyte s. This breaks tests, particularly 3 in TestCompilerOnCharLit. I'm comitting this separately since the failure modes might be of interest (compiler says "internal error").
2021-07-11 21:32:18 +02:00