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 |