Compare commits
	
		
			1 Commits
		
	
	
		
			master
			...
			or-skip-ri
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					73e1113764 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -3,4 +3,3 @@ out/
 | 
			
		||||
*.zip
 | 
			
		||||
prg/**/*.ast
 | 
			
		||||
prg/**/*.out
 | 
			
		||||
prg/**/*.pins25
 | 
			
		||||
							
								
								
									
										12
									
								
								prg/test.pins25
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								prg/test.pins25
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
fun putstr(s)
 | 
			
		||||
 | 
			
		||||
fun f1() =
 | 
			
		||||
	putstr("funkcija 1\n\00"),
 | 
			
		||||
	0
 | 
			
		||||
 | 
			
		||||
fun f2() =
 | 
			
		||||
	putstr("funkcija 2\n\00"),
 | 
			
		||||
	0
 | 
			
		||||
 | 
			
		||||
fun main() =
 | 
			
		||||
	f1() || f2()
 | 
			
		||||
@ -227,13 +227,10 @@ public class CodeGen {
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public List<PDM.CodeInstr> visit(AST.BinExpr binExpr, Mem.Frame frame) {
 | 
			
		||||
                Report.Locatable loc = attrAST.attrLoc.get(binExpr);
 | 
			
		||||
                Report.Location loc = attrAST.attrLoc.get(binExpr).location();
 | 
			
		||||
 | 
			
		||||
                List<PDM.CodeInstr> code = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
                code.addAll(binExpr.fstExpr.accept(this, frame));
 | 
			
		||||
                code.addAll(binExpr.sndExpr.accept(this, frame));
 | 
			
		||||
 | 
			
		||||
                PDM.OPER.Oper oper = switch (binExpr.oper) {
 | 
			
		||||
                    case OR -> PDM.OPER.Oper.OR;
 | 
			
		||||
                    case AND -> PDM.OPER.Oper.AND;
 | 
			
		||||
@ -250,8 +247,35 @@ public class CodeGen {
 | 
			
		||||
                    case MOD -> PDM.OPER.Oper.MOD;
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
                code.add(new PDM.OPER(oper, loc));
 | 
			
		||||
                if (oper == PDM.OPER.Oper.OR) {
 | 
			
		||||
                    String locStr = loc.begLine() + ":" + loc.begColumn();
 | 
			
		||||
                    String rightLabel = "$or:right" + locStr;
 | 
			
		||||
                    String skipLabel = "$or:skip@" + locStr;
 | 
			
		||||
                    String endLabel = "$or:end@" + locStr;
 | 
			
		||||
 | 
			
		||||
                    code.addAll(binExpr.fstExpr.accept(this, frame));
 | 
			
		||||
                    code.add(new PDM.NAME(skipLabel, loc));
 | 
			
		||||
                    code.add(new PDM.NAME(rightLabel, loc));
 | 
			
		||||
                    code.add(new PDM.CJMP(loc));
 | 
			
		||||
 | 
			
		||||
                    code.add(new PDM.LABEL(rightLabel, loc));
 | 
			
		||||
                    code.add(new PDM.PUSH(0, loc));
 | 
			
		||||
                    code.addAll(binExpr.sndExpr.accept(this, frame));
 | 
			
		||||
                    code.add(new PDM.OPER(oper, loc));
 | 
			
		||||
                    code.add(new PDM.NAME(endLabel, loc));
 | 
			
		||||
                    code.add(new PDM.UJMP(loc));
 | 
			
		||||
 | 
			
		||||
                    code.add(new PDM.LABEL(skipLabel, loc));
 | 
			
		||||
                    code.add(new PDM.PUSH(1, loc));
 | 
			
		||||
 | 
			
		||||
                    code.add(new PDM.LABEL(endLabel, loc));
 | 
			
		||||
                } else {
 | 
			
		||||
                    code.addAll(binExpr.fstExpr.accept(this, frame));
 | 
			
		||||
                    code.addAll(binExpr.sndExpr.accept(this, frame));
 | 
			
		||||
 | 
			
		||||
                    code.add(new PDM.OPER(oper, loc));
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                attrAST.attrCode.put(binExpr, code);
 | 
			
		||||
                return code;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user