mirror of
				https://github.com/ton-blockchain/ton
				synced 2025-03-09 15:40:10 +00:00 
			
		
		
		
	* Asm.fif improvements (#631) Add missing opcodes, CUSTOMOP, disallow 256 PUSHPOW256, recursive PROGRAM, require-asm-fif-version * Fix nested PROGRAM, add test * Simplify require-asm-fif-version --------- Co-authored-by: EmelyanenkoK <emelyanenko.kirill@gmail.com>
		
			
				
	
	
		
			93 lines
		
	
	
		
			No EOL
		
	
	
		
			2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			No EOL
		
	
	
		
			2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| "Asm.fif" include
 | |
| 
 | |
| // Four programs:
 | |
| // 4 contains 2 and 3, 2 contains 1
 | |
| 
 | |
| // Program #1
 | |
| PROGRAM{
 | |
|   DECLPROC foo1
 | |
|   DECLPROC foo2
 | |
|   DECLPROC foo3
 | |
|   DECLPROC main
 | |
|   foo1 PROC:<{ MUL INC }>
 | |
|   foo2 PROCINLINE:<{ PLDREF }>
 | |
|   foo3 PROC:<{ CTOS foo2 INLINECALLDICT CTOS 32 PLDU }>
 | |
|   main PROC:<{ 0 PUSHINT }>
 | |
| }END>c constant code-1
 | |
| 
 | |
| // Program #2
 | |
| PROGRAM{
 | |
|   DECLPROC foo3
 | |
|   DECLPROC foo4
 | |
|   DECLPROC main
 | |
|   foo3 PROC:<{ code-1 PUSHREF }>
 | |
|   foo4 PROC:<{ CTOS 8 PLDU }>
 | |
|   main PROC:<{ foo3 CALLDICT foo4 CALLDICT NEWC ROT STUX }>
 | |
| }END>c constant code-2
 | |
| 
 | |
| // Program #3
 | |
| PROGRAM{
 | |
|   DECLPROC foo1
 | |
|   DECLPROC foo4
 | |
|   DECLPROC main
 | |
|   foo1 PROC:<{ DUP 137 PUSHINT MUL PAIR }>
 | |
|   foo4 PROC:<{ UNPAIR SWAP DIV }>
 | |
|   main PROC:<{ 70 PUSHINT DIV }>
 | |
| }END>c constant code-3
 | |
| 
 | |
| // Program #4
 | |
| PROGRAM{
 | |
|   DECLPROC foo2
 | |
|   DECLPROC foo3
 | |
|   DECLPROC foo5
 | |
|   DECLPROC main
 | |
|   foo2 PROC:<{ code-2 PUSHREF }>
 | |
|   foo3 PROC:<{ code-3 PUSHREF }>
 | |
|   foo5 PROC:<{ foo2 CALLDICT CTOS 8 PLDU 1 RSHIFT# }>
 | |
|   main PROC:<{ foo5 CALLDICT 5 MULCONST }>
 | |
| }END>c
 | |
| 
 | |
| .dump cr
 | |
| 
 | |
| // Program #4, nested
 | |
| PROGRAM{
 | |
|   DECLPROC foo2
 | |
|   DECLPROC foo3
 | |
|   DECLPROC foo5
 | |
|   DECLPROC main
 | |
|   foo2 PROC:<{
 | |
|     PROGRAM{
 | |
|       DECLPROC foo3
 | |
|       DECLPROC foo4
 | |
|       DECLPROC main
 | |
|       foo3 PROC:<{
 | |
|         PROGRAM{
 | |
|           DECLPROC foo1
 | |
|           DECLPROC foo2
 | |
|           DECLPROC foo3
 | |
|           DECLPROC main
 | |
|           foo1 PROC:<{ MUL INC }>
 | |
|           foo2 PROCINLINE:<{ PLDREF }>
 | |
|           foo3 PROC:<{ CTOS foo2 INLINECALLDICT CTOS 32 PLDU }>
 | |
|           main PROC:<{ 0 PUSHINT }>
 | |
|         }END>c PUSHREF
 | |
|       }>
 | |
|       foo4 PROC:<{ CTOS 8 PLDU }>
 | |
|       main PROC:<{ foo3 CALLDICT foo4 CALLDICT NEWC ROT STUX }>
 | |
|     }END>c PUSHREF
 | |
|   }>
 | |
|   foo3 PROC:<{
 | |
|     PROGRAM{
 | |
|       DECLPROC foo1
 | |
|       DECLPROC foo4
 | |
|       DECLPROC main
 | |
|       foo1 PROC:<{ DUP 137 PUSHINT MUL PAIR }>
 | |
|       foo4 PROC:<{ UNPAIR SWAP DIV }>
 | |
|       main PROC:<{ 70 PUSHINT DIV }>
 | |
|     }END>c PUSHREF
 | |
|   }>
 | |
|   foo5 PROC:<{ foo2 CALLDICT CTOS 8 PLDU 1 RSHIFT# }>
 | |
|   main PROC:<{ foo5 CALLDICT 5 MULCONST }>
 | |
| }END>c
 | |
| 
 | |
| .dump cr |