mirror of
				https://github.com/irmen/prog8.git
				synced 2025-10-31 00:16:08 +00:00 
			
		
		
		
	comments
This commit is contained in:
		| @@ -10,6 +10,9 @@ import java.io.CharConversionException | ||||
| import java.io.File | ||||
| import kotlin.io.path.Path | ||||
|  | ||||
| /** | ||||
|  * Semantic analysis. | ||||
|  */ | ||||
| internal class AstChecker(private val program: Program, | ||||
|                           private val errors: IErrorReporter, | ||||
|                           private val compilerOptions: CompilationOptions | ||||
|   | ||||
| @@ -16,6 +16,7 @@ import prog8.compilerinterface.IStringEncoding | ||||
|  | ||||
|  | ||||
| internal fun Program.checkValid(errors: IErrorReporter, compilerOptions: CompilationOptions) { | ||||
|     // semantic analysis to see if the program is valid. | ||||
|     val parentChecker = ParentNodeChecker() | ||||
|     parentChecker.visit(this) | ||||
|     val checker = AstChecker(this, errors, compilerOptions) | ||||
|   | ||||
| @@ -35,7 +35,6 @@ Ast modifications done in AsmGen, that should be done BEFORE calling asmgen (so | ||||
|   and pass that via a new datastructure to asmgen?  So that asmgen is no longer tasked with doing the allocations. | ||||
|   This could perhaps make it easer for the codegen as well to deal with sections, if any, in the future. | ||||
|  | ||||
|  | ||||
| - remove support for old @"screencodes" string encoding syntax (parser+code+docs) | ||||
| - allow "xxx" * constexpr  (where constexpr is not a number literal), now gives expression error not same type | ||||
| - unify FunctioncallExpression + FunctioncallStatement and PipeExpression + Pipe statement classes, may require moving Expression/Statement into interfaces instead of abstract base classes | ||||
| @@ -73,6 +72,7 @@ More optimization ideas | ||||
| - when a for loop's loopvariable isn't referenced in the body, and the iterations are known, replace the loop by a repeatloop | ||||
| - automatically convert if statements that test for multiple values (if X==1 or X==2..) to if X in [1,2,..] statements, instead of just a warning. | ||||
| - rewrite expression tree evaluation such that it doesn't use an eval stack but flatten the tree into linear code that uses a fixed number of predetermined value 'variables'? | ||||
|   "Three address code" was mentioned.  https://en.wikipedia.org/wiki/Three-address_code | ||||
|   these variables have to be unique for each subroutine because they could otherwise be interfered with from irq routines etc. | ||||
| - this removes the need for the BinExprSplitter? (which is problematic and very limited now) | ||||
|   and perhaps as well the assignment splitting in  BeforeAsmAstChanger too | ||||
|   | ||||
| @@ -2,9 +2,9 @@ | ||||
|  | ||||
| main { | ||||
|     sub start() { | ||||
|         word w1 = 10 | ||||
|         byte bb = -2 | ||||
|         w1 *= bb | ||||
|         word w1 = -10 | ||||
|         byte bb = 2 | ||||
|         w1 -= bb-1 | ||||
|         txt.print_w(w1) | ||||
|         txt.nl() | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user