1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
  
30
  
31
  
32
  
33
  
34
  
35
  
36
  
37
  
38
  
39
  
40
  
41
  
42
  
43
  
44
  
45
  
46
  
47
  
48
  
49
  
50
  
51
  
52
  
53
  
54
  
55
  
56
  
57
  
58
  
59
  
60
  
61
  
62
  
63
  
64
  
65
  
66
  
67
  
68
  
69
  
70
  
71
  
72
  
73
  
74
  
75
  
76
  
77
  
#include "global.h" 
#include "interpret.h" 
#include "svalue.h" 
#include "opcodes.h" 
#include "pike_macros.h" 
#include "object.h" 
#include "program.h" 
#include "array.h" 
#include "error.h" 
#include "constants.h" 
#include "mapping.h" 
#include "stralloc.h" 
#include "multiset.h" 
#include "pike_types.h" 
#include "pike_memory.h" 
#include "threads.h" 
#include <math.h> 
#include <ctype.h> 
#include "module_support.h" 
#include "cyclic.h" 
#include "bignum.h" 
 
 
PIKEFUN array column(array tmp, mixed val) 
  efun; 
  optflags OPT_TRY_OPTIMIZE; 
{ 
  INT32 e; 
  struct array *a; 
 
  DECLARE_CYCLIC(); 
 
  /* Optimization */ 
  if(tmp->refs == 1) 
  { 
    /* An array with one ref cannot possibly be cyclic */ 
    struct svalue sval; 
    tmp->type_field = BIT_MIXED | BIT_UNFINISHED; 
    for(e=0;e<tmp->size;e++) 
    { 
      index_no_free(&sval, ITEM(tmp)+e, val); 
      free_svalue(ITEM(tmp)+e); 
      ITEM(tmp)[e]=sval; 
    } 
    pop_stack(); 
    return; 
  } 
 
  if((a=(struct array *)BEGIN_CYCLIC(tmp,0))) 
  { 
    add_ref(a); 
  }else{ 
    push_array(a=allocate_array(tmp->size)); 
    SET_CYCLIC_RET(a); 
 
    for(e=0;e<a->size;e++) 
      index_no_free(ITEM(a)+e, ITEM(tmp)+e, val); 
 
    sp--; 
  } 
  END_CYCLIC(); 
  RETURN a; 
} 
 
PIKEFUN multiset(1) mkmultiset(array(1=mixed) a) 
  efun; 
  optflags OPT_TRY_OPTIMIZE; 
{ 
  RETURN mkmultiset(a); 
} 
 
 
void init_builtin(void) 
{ 
  INIT; 
}