Hi,
well,
say I can have
ledpin1 var PORTB.1
then when I issue
high ledpin1
it will make ledpin1 high, right?
Yes, that's correct, it'll make PortB.1 high because "all" you've done is assigned the "name" or "identifier" ledpin1 to bit 1 of the register PortB. So when you do HIGH ledpin1 it'll "translate" to HIGH PortB.1 - see, ledpin1 and PortB.1 are one and the same.

so why I can't have array member aliased as port, so when I'll issue
high array[1]
since this previously was set to as alias of portb.1
portb.1 become high?
Beacuse PortB.1 is at one location in the memory map and Array[1] is at another - they are not one and the same.
When you create an array you are actually allocating space in RAM for that array as opposed to the previous example where you simply assigned a different "name" to an already existing register. Array[1] and PortB.1 are two different locations.

If you're example would work then one should be able to do
PortB VAR PortA
PortC VAR PortB
PortD VAR PortC
PortA = 0

and expect all ports to clear - it doesn't work that way because PortA is not the same register as PortB just as Array[1] not the same PortB.1 - they are two different things. On the other hand
myPort VAR PortA
myPort = 0

Will clear PortA because all you've done is to create an alternative name or identifier for an already existing register.

You can have multiple names for a single location.
You can not have one name for multiple location.

Does that make sense?

/Henrik.