Files
harbour-core/harbour/tests/varparam.prg
Ryszard Glab 4aeac1e509 2006-09-20 14:15 UTC+0100 Ryszard Glab <rglab//imid.med.pl>
* include/hbpcode.h
      + added new pcode HB_P_VFRAME

   * include/hbapi.h
      + added USHORT paramdeclcnt to asSymbol structure

   * include/hbstack.h
   * source/vm/estack.c
      + added hb_stackLocalVariable() to acces local variables

   * source/compiler/genc.c
   * source/compiler/gencc.c
   * source/compiler/harbour.c
   * source/compiler/harbour.l
   * source/compiler/harbour.y
   * source/compiler/hbdead.c
   * source/compiler/hbfix.c
   * source/compiler/hblbl.c
   * source/compiler/hbpcode.c
   * source/compiler/hbstripl.c
   * source/vm/hvm.c
      + added support for variable number of parameters in
      functions/procedures

   + tests/varparam.prg
      * example usage of new syntax for variable number of
      parameters

   * source/vm/arrayshb.c
      * changed HB_APARAMS() to use current stack frame if no
      arguments are passed ( HB_APARAMS() == HB_APARAMS(0) )

  SYNTAX for variable number of parameters
   1) [FUNCTION|PROCEDURE] name( ... )
   or
   2) [FUNCTION|PROCEDURE] name( var1, var2, varN, ... )

   To access passed parameters use the following:
   PCOUNT() - returns number of passed parameters
   HB_PVALUE( iParamNum ) - returns <iParamNum> parameter
   HB_APARAMS() - returns array with all passed parameters
   or usual name of parameter variable in case of syntax 2)
2006-09-20 12:28:58 +00:00

325 lines
7.3 KiB
Plaintext

//
// $Id$
//
/* TEST FOR USING VARIABLE NUMBER OF PARAMETERS */
MEMVAR iLoop
PROCEDURE MAIN(p1, p2)
LOCAL l1:=11,l2:=22,l3:=33,l4:=44,l5:=55,l6:=66
PRIVATE iLoop
? 'passed 0: '; TEST_0_0( )
? 'passed 1: '; TEST_0_0( 1 )
? 'passed 2: '; TEST_0_0( 1, 2 )
? 'passed 3: '; TEST_0_0( 1, 2, 3 )
? '---------------------------------------'
? 'passed 0: '; TEST_0_0v( )
? 'passed 1: '; TEST_0_0v( 1 )
? 'passed 2: '; TEST_0_0v( 1, 2 )
? 'passed 3: '; TEST_0_0v( 1, 2, 3 )
? '---------------------------------------'
? 'passed 0: '; TEST_1_0( )
? 'passed 1: '; TEST_1_0( 1 )
? 'passed 2: '; TEST_1_0( 1, 2 )
? 'passed 3: '; TEST_1_0( 1, 2, 3 )
? '---------------------------------------'
? 'passed 0: '; TEST_1_0v( )
? 'passed 1: '; TEST_1_0v( 1 )
? 'passed 2: '; TEST_1_0v( 1, 2 )
? 'passed 3: '; TEST_1_0v( 1, 2, 3 )
? '---------------------------------------'
? 'passed 0: '; TEST_1_1( )
? 'passed 1: '; TEST_1_1( 1 )
? 'passed 2: '; TEST_1_1( 1, 2 )
? 'passed 3: '; TEST_1_1( 1, 2, 3 )
? '---------------------------------------'
? 'passed 0: '; TEST_1_1v( )
? 'passed 1: '; TEST_1_1v( 1 )
? 'passed 2: '; TEST_1_1v( 1, 2 )
? 'passed 3: '; TEST_1_1v( 1, 2, 3 )
? '---------------------------------------'
? 'passed 0: '; TEST_1_3( )
? 'passed 1: '; TEST_1_3( 1 )
? 'passed 2: '; TEST_1_3( 1, 2 )
? 'passed 3: '; TEST_1_3( 1, 2, 3 )
? 'passed 4: '; TEST_1_3( 1, 2, 3, 4 )
? 'passed 5: '; TEST_1_3( 1, 2, 3, 4, 5 )
? 'passed 6: '; TEST_1_3( 1, 2, 3, 4, 5, 6 )
? '---------------------------------------'
? 'passed 0: '; TEST_1_3v( )
? 'passed 1: '; TEST_1_3v( 1 )
? 'passed 2: '; TEST_1_3v( 1, 2 )
? 'passed 3: '; TEST_1_3v( 1, 2, 3 )
? 'passed 4: '; TEST_1_3v( 1, 2, 3, 4 )
? 'passed 5: '; TEST_1_3v( 1, 2, 3, 4, 5 )
? 'passed 6: '; TEST_1_3v( 1, 2, 3, 4, 5, 6 )
? '---------------------------------------'
? 'passed 0: '; TEST_3_0( )
? 'passed 1: '; TEST_3_0( 1 )
? 'passed 2: '; TEST_3_0( 1, 2 )
? 'passed 3: '; TEST_3_0( 1, 2, 3 )
? 'passed 4: '; TEST_3_0( 1, 2, 3, 4 )
? 'passed 5: '; TEST_3_0( 1, 2, 3, 4, 5 )
? 'passed 6: '; TEST_3_0( 1, 2, 3, 4, 5, 6 )
? '---------------------------------------'
? 'passed 0: '; TEST_3_0v( )
? 'passed 1: '; TEST_3_0v( 1 )
? 'passed 2: '; TEST_3_0v( 1, 2 )
? 'passed 3: '; TEST_3_0v( 1, 2, 3 )
? 'passed 4: '; TEST_3_0v( 1, 2, 3, 4 )
? 'passed 5: '; TEST_3_0v( 1, 2, 3, 4, 5 )
? 'passed 6: '; TEST_3_0v( 1, 2, 3, 4, 5, 6 )
? '---------------------------------------'
? 'passed 0: '; TEST_3_3( )
? 'passed 1: '; TEST_3_3( 1 )
? 'passed 2: '; TEST_3_3( 1, 2 )
? 'passed 3: '; TEST_3_3( 1, 2, 3 )
? 'passed 4: '; TEST_3_3( 1, 2, 3, 4 )
? 'passed 5: '; TEST_3_3( 1, 2, 3, 4, 5 )
? 'passed 6: '; TEST_3_3( 1, 2, 3, 4, 5, 6 )
? '---------------------------------------'
? 'passed 0: '; TEST_3_3v( )
? 'passed 1: '; TEST_3_3v( 1 )
? 'passed 2: '; TEST_3_3v( 1, 2 )
? 'passed 3: '; TEST_3_3v( 1, 2, 3 )
? 'passed 4: '; TEST_3_3v( 1, 2, 3, 4 )
? 'passed 5: '; TEST_3_3v( 1, 2, 3, 4, 5 )
? 'passed 6: '; TEST_3_3v( 1, 2, 3, 4, 5, 6 )
? '---------------------------------------'
? 'Passed 6 by ref: '; TEST_0_0( @l1, @l2, @l3, @l4, @l5, @l6 )
? 'Passed 6 by ref: '; TEST_0_0v( @l1, @l2, @l3, @l4, @l5, @l6 )
? '---------------------------------------'
? 'Passed 6 by ref: '; TEST_1_0( @l1, @l2, @l3, @l4, @l5, @l6 )
? 'Passed 6 by ref: '; TEST_1_0v( @l1, @l2, @l3, @l4, @l5, @l6 )
? '---------------------------------------'
? 'Passed 6 by ref: '; TEST_1_1( @l1, @l2, @l3, @l4, @l5, @l6 )
? 'Passed 6 by ref: '; TEST_1_1v( @l1, @l2, @l3, @l4, @l5, @l6 )
? '---------------------------------------'
? 'Passed 6 by ref: '; TEST_1_3( @l1, @l2, @l3, @l4, @l5, @l6 )
? 'Passed 6 by ref: '; TEST_1_3v( @l1, @l2, @l3, @l4, @l5, @l6 )
? '---------------------------------------'
? 'Passed 6 by ref: '; TEST_3_0( @l1, @l2, @l3, @l4, @l5, @l6 )
? 'Passed 6 by ref: '; TEST_3_0v( @l1, @l2, @l3, @l4, @l5, @l6 )
? '---------------------------------------'
? 'Passed 6 by ref: '; TEST_3_3( @l1, @l2, @l3, @l4, @l5, @l6 )
? 'Passed 6 by ref: '; TEST_3_3v( @l1, @l2, @l3, @l4, @l5, @l6 )
RETURN
PROCEDURE TEST_0_0v( ... )
?? PROCNAME(0), ' received: ', PCOUNT()
FOR m->iLoop:=1 TO PCOUNT()
? m->iLoop, "=", HB_PVALUE( m->iLoop )
NEXT
inkey(0)
RETURN
PROCEDURE TEST_0_0( )
?? PROCNAME(0), ' received: ', PCOUNT()
FOR m->iLoop:=1 TO PCOUNT()
? m->iLoop, "=", HB_PVALUE( m->iLoop )
NEXT
inkey(0)
RETURN
PROCEDURE TEST_1_0v( ... )
LOCAL i:='i'
?? PROCNAME(0), ' received: ', PCOUNT()
? 'i=',i
FOR i:=1 TO PCOUNT()
? i, "=", HB_PVALUE( i )
NEXT
inkey(0)
RETURN
PROCEDURE TEST_1_0( )
LOCAL i:='i'
?? PROCNAME(0), ' received: ', PCOUNT()
? 'i=',i
FOR i:=1 TO PCOUNT()
? i, "=", HB_PVALUE( i )
NEXT
inkey(0)
RETURN
PROCEDURE TEST_1_3v( a,b,c, ... )
LOCAL i:='i'
?? PROCNAME(0), ' received: ', PCOUNT()
? 'i=',i
? 'a=',a
? 'b=',b
? 'c=',c
FOR i:=1 TO PCOUNT()
? i, "=", HB_PVALUE( i )
NEXT
FOR EACH i IN HB_APARAMS()
? i:__enumindex, "-", i
NEXT
inkey(0)
RETURN
PROCEDURE TEST_1_3( a,b,c )
LOCAL i:='i'
?? PROCNAME(0), ' received: ', PCOUNT()
? 'i=',i
? 'a=',a
? 'b=',b
? 'c=',c
FOR i:=1 TO PCOUNT()
? i, "=", HB_PVALUE( i )
NEXT
FOR EACH i IN HB_APARAMS()
? i:__enumindex, "-", i
NEXT
inkey(0)
RETURN
PROCEDURE TEST_1_1( a )
LOCAL i:='i'
?? PROCNAME(0), ' received: ', PCOUNT()
? 'i=',i
? 'a=',a
FOR i:=1 TO PCOUNT()
? i, "=", HB_PVALUE( i )
NEXT
inkey(0)
RETURN
PROCEDURE TEST_1_1v( a, ... )
LOCAL i:='i'
?? PROCNAME(0), ' received: ', PCOUNT()
? 'i=',i
? 'a=',a
FOR i:=1 TO PCOUNT()
? i, "=", HB_PVALUE( i )
NEXT
inkey(0)
RETURN
PROCEDURE TEST_3_3v( a,b,c, ... )
LOCAL x:='x', y:='y', z:='z'
?? PROCNAME(0), ' received: ', PCOUNT()
? 'x=',x
? 'y=',y
? 'z=',z
? 'a=',a
? 'b=',b
? 'c=',c
FOR m->iLoop:=1 TO PCOUNT()
? m->iLoop, "=", HB_PVALUE( m->iLoop )
NEXT
test_ref( @a, @b, @c, @x, @y, @z )
inkey(0)
RETURN
PROCEDURE TEST_3_3( a,b,c )
LOCAL x:='x', y:='y', z:='z'
?? PROCNAME(0), ' received: ', PCOUNT()
? 'x=',x
? 'y=',y
? 'z=',z
? 'a=',a
? 'b=',b
? 'c=',c
FOR m->iLoop:=1 TO PCOUNT()
? m->iLoop, "=", HB_PVALUE( m->iLoop )
NEXT
test_ref( @a, @b, @c, @x, @y, @z )
inkey(0)
RETURN
PROCEDURE TEST_3_0( )
LOCAL x:='x', y:='y', z:='z'
?? PROCNAME(0), ' received: ', PCOUNT()
? 'x=',x
? 'y=',y
? 'z=',z
FOR m->iLoop:=1 TO PCOUNT()
? m->iLoop, "=", HB_PVALUE( m->iLoop )
NEXT
inkey(0)
RETURN
PROCEDURE TEST_3_0v( ... )
LOCAL x:='x', y:='y', z:='z'
?? PROCNAME(0), ' received: ', PCOUNT()
? 'x=',x
? 'y=',y
? 'z=',z
FOR m->iLoop:=1 TO PCOUNT()
? m->iLoop, "=", HB_PVALUE( m->iLoop )
NEXT
inkey(0)
RETURN
PROCEDURE TEST_REF( a, ... )
LOCAL b
? '@@@'
? PROCNAME(0), ' received: ', PCOUNT()
? 'a= ', a
? 'b= ', b
FOR EACH b IN HB_APARAMS(0)
? b:__enumindex, "-", b
NEXT
RETURN