Weird problem with gunscript

Shooting works fine. But when I reload, currentAmmo wont set back to maxAmmo. It just stays at 0. I have no idea what I have done wrong. Here is the code :

var bulletSpawn : GameObject;
var bullet : GameObject;
var weapon : GameObject;
var soundParent = Transform;
var currentAmmo = 30;
var maxAmmo = 30;
var canFire : boolean = false;
var fireSound : GameObject;
var reloadSound : GameObject;
var tacReloadSound : GameObject;
var reloadTime : float = 1.8;
var tacReloadTime : float = 1.5;



function Update ()
{    
   if (currentAmmo > 0)
       canFire = true;
   if (currentAmmo <= 0)
       canFire = false;
   if (currentAmmo > maxAmmo)
       currentAmmo = maxAmmo;
      
   if (Input.GetButtonDown("Fire") && canFire == true)
       IsFiring ();
             
       
   if (Input.GetButtonDown("Reload") && currentAmmo < maxAmmo)
       Reload ();   
}

function IsFiring ()
{
   
   if (currentAmmo > 0 && canFire == true)
      {
       currentAmmo --;
       Instantiate(bullet, bulletSpawn.transform.position, bulletSpawn.transform.rotation);
       weapon.animation.PlayQueued("Fire", QueueMode.PlayNow);
       Instantiate(fireSound, bulletSpawn.transform.position, bulletSpawn.transform.rotation); 
      }
   
       
                       
   if (currentAmmo == 0)
       {
           canFire = false;
           Reload ();
       }

         
}

function Reload ()
{
  
  if (currentAmmo == 0)
      {
         animation.Play("Reload");
         Instantiate(reloadSound, bulletSpawn.transform.position, bulletSpawn.transform.rotation);
         yield WaitForSeconds(reloadTime);
         canFire = true;
         currentAmmo = maxAmmo;
      }
      
                
  if (currentAmmo > 0 && currentAmmo < maxAmmo)
      {
         currentAmmo = 0;
         animation.Play("TacReload");
         Instantiate(tacReloadSound, bulletSpawn.transform.position, bulletSpawn.transform.rotation);
         canFire = false;
         yield WaitForSeconds(tacReloadTime);
         canFire = true;
         currentAmmo = maxAmmo;
      }
}

Please help!

Consider making maxAmmo a constant, if that fixes the problem then an outside script or possibly inspector could have been responsible. There is also no operand at line 20.

    var bulletSpawn : GameObject;
    var bullet : GameObject;
    var weapon : GameObject;
    var soundParent = Transform;
    var currentAmmo = 30;
    var maxAmmo = 30;
    var canFire : boolean = false;
    var fireSound : GameObject;
    var reloadSound : GameObject;
    var tacReloadSound : GameObject;
    var reloadTime : float = 1.8;
    var tacReloadTime : float = 1.5;
     
     
     
    function Update ()
    {
    if (currentAmmo > 0)
    canFire = true;
    if (currentAmmo maxAmmo)//There is no operand here
    currentAmmo = maxAmmo;
     
    if (Input.GetButtonDown("Fire") && canFire == true)
    IsFiring ();
     
     
    if (Input.GetButtonDown("Reload") && currentAmmo < maxAmmo)
    Reload ();
    }
     
    function IsFiring ()
    {
     
    if (currentAmmo > 0 && canFire == true)
    {
    currentAmmo --;
    Instantiate(bullet, bulletSpawn.transform.position, bulletSpawn.transform.rotation);
    weapon.animation.PlayQueued("Fire", QueueMode.PlayNow);
    Instantiate(fireSound, bulletSpawn.transform.position, bulletSpawn.transform.rotation);
    }
     
     
     
    if (currentAmmo == 0)
    {
    canFire = false;
    Reload ();
    }
     
     
    }
     
    function Reload ()
    {
     
    if (currentAmmo == 0)
    {
    animation.Play("Reload");
    Instantiate(reloadSound, bulletSpawn.transform.position, bulletSpawn.transform.rotation);
    yield WaitForSeconds(reloadTime);
    canFire = true;
    currentAmmo = maxAmmo;
    }
     
     
    if (currentAmmo > 0 && currentAmmo < maxAmmo)
    {
    currentAmmo = 0;
    animation.Play("TacReload");
    Instantiate(tacReloadSound, bulletSpawn.transform.position, bulletSpawn.transform.rotation);
    canFire = false;
    yield WaitForSeconds(tacReloadTime);
    canFire = true;
    currentAmmo = maxAmmo;
    }
    }

I fixed the problem. The problem was caused by me not putting the reload sound game object in the inspector