mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| (module
 | |
|   (memory 256 256)
 | |
|   (data (i32.const 10) "waka waka waka waka waka")
 | |
|   ;; stack imports are special
 | |
|   (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32))
 | |
|   (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32))
 | |
|   ;; other imports must not be touched!
 | |
|   (import "env" "tempDoublePtr" (global $tempDoublePtr i32))
 | |
|   (export "test1" $test1)
 | |
|   (export "test2" $test2)
 | |
|   (export "test3" $test3)
 | |
|   ;; ok to modify a global, if we keep it the same value
 | |
|   (global $mine (mut i32) (i32.const 1))
 | |
|   ;; stack imports are ok to use. their uses are the same as other
 | |
|   ;; globals - must keep the same value (which means, unwind the stack)
 | |
|   ;; here the global names are "minified"
 | |
|   (global $global0 (mut i32) (get_global $STACKTOP$asm2wasm$import))
 | |
|   (global $global1 (mut i32) (get_global $STACK_MAX$asm2wasm$import))
 | |
|   ;; a global initialized by an import, so bad, but ok if not used
 | |
|   (global $do-not-use (mut i32) (get_global $tempDoublePtr))
 | |
|   (func $test1
 | |
|     (local $temp i32)
 | |
|     (set_global $mine (i32.const 1))
 | |
|     (set_local $temp (get_global $global0))
 | |
|     (set_global $global0 (i32.const 1337)) ;; bad
 | |
|     (set_global $global0 (get_local $temp)) ;; save us
 | |
|     (set_global $global1 (i32.const 913370)) ;; bad
 | |
|     (set_global $global1 (get_local $temp)) ;; save us
 | |
|     ;; use the stack memory
 | |
|     (i32.store (get_local $temp) (i32.const 1337))
 | |
|     (if
 | |
|       (i32.ne
 | |
|         (i32.load (get_local $temp))
 | |
|         (i32.const 1337)
 | |
|       )
 | |
|       (unreachable) ;; they should be equal, never get here
 | |
|     )
 | |
|     ;; finally, do a valid store
 | |
|     (i32.store8 (i32.const 12) (i32.const 115))
 | |
|   )
 | |
|   (func $test2
 | |
|     (set_global $tempDoublePtr (i32.const 1)) ;; bad!
 | |
|     (i32.store8 (i32.const 13) (i32.const 115))
 | |
|   )
 | |
|   (func $test3
 | |
|     (i32.store8 (i32.const 14) (i32.const 115))
 | |
|   )
 | |
| )
 |