46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Smali
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Smali
		
	
	
	
| .class public LB22411633_2;
 | |
| .super Ljava/lang/Object;
 | |
| 
 | |
| 
 | |
| .method public static run(Z)V
 | |
| .registers 6
 | |
|        # Make v3 & v4 defined, just use null.
 | |
|        const v3, 0
 | |
|        const v4, 0
 | |
| 
 | |
|        # Allocate a java.lang.Object (do not initialize).
 | |
|        new-instance v4, Ljava/lang/Object;
 | |
| 
 | |
|        # Branch forward.
 | |
|        if-eqz v5, :LabelMerge
 | |
| 
 | |
|        # Create a non-precise object reference. We can do this by merging to objects together
 | |
|        # that only have Object as a common ancestor.
 | |
| 
 | |
|        # Allocate a java.lang.Object and initialize it.
 | |
|        new-instance v4, Ljava/lang/Object;
 | |
|        invoke-direct {v4}, Ljava/lang/Object;-><init>()V
 | |
| 
 | |
|        if-nez v5, :LabelMergeObject
 | |
| 
 | |
|        new-instance v4, Ljava/lang/Integer;
 | |
|        invoke-direct {v4}, Ljava/lang/Integer;-><init>()V
 | |
| 
 | |
| :LabelMergeObject
 | |
| 
 | |
|        # Arbitrary work to separate blocks. At this point, v4 is of type Reference<Object>.
 | |
|        add-int/lit16 v3, v3, 1
 | |
| 
 | |
| :LabelMerge
 | |
|        # Merge the uninitialized Object from line 12 with the reference to Object from 31. Older
 | |
|        # rules set any reference merged with Object to Object. This is wrong in the case of the
 | |
|        # other reference being an uninitialized reference, as we'd suddenly allow calling on it.
 | |
| 
 | |
|        # Test whether it's some initialized reference by calling hashCode. This should fail, as we
 | |
|        # merged initialized and uninitialized.
 | |
|        invoke-virtual {v4}, Ljava/lang/Object;->hashCode()I
 | |
| 
 | |
|        return-void
 | |
| 
 | |
| .end method
 |