Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/planix-v0/sys/src/cmd/gs/src/zvmem2.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* Copyright (C) 1992, 1993, 1994, 1997, 1998, 1999 Aladdin Enterprises.  All rights reserved.
2
 
3
  This software is provided AS-IS with no warranty, either express or
4
  implied.
5
 
6
  This software is distributed under license and may not be copied,
7
  modified or distributed except as expressly authorized under the terms
8
  of the license contained in the file LICENSE in this distribution.
9
 
10
  For more information about licensing, please refer to
11
  http://www.ghostscript.com/licensing/. For information on
12
  commercial licensing, go to http://www.artifex.com/licensing/ or
13
  contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14
  San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15
*/
16
 
17
/* $Id: zvmem2.c,v 1.7 2002/11/20 18:56:56 igor Exp $ */
18
/* Level 2 "Virtual memory" operators */
19
#include "ghost.h"
20
#include "oper.h"
21
#include "estack.h"
22
#include "ialloc.h"		/* for ivmspace.h */
23
#include "ivmspace.h"
24
#include "ivmem2.h"
25
#include "store.h"
26
 
27
/* Garbage collector control parameters. */
28
#define DEFAULT_VM_THRESHOLD_SMALL 100000
29
#define DEFAULT_VM_THRESHOLD_LARGE 1000000
30
#define MIN_VM_THRESHOLD 1
31
#define MAX_VM_THRESHOLD max_long
32
 
33
/* ------ Local/global VM control ------ */
34
 
35
/* <bool> .setglobal - */
36
private int
37
zsetglobal(i_ctx_t *i_ctx_p)
38
{
39
    os_ptr op = osp;
40
    check_type(*op, t_boolean);
41
    ialloc_set_space(idmemory,
42
		     (op->value.boolval ? avm_global : avm_local));
43
    pop(1);
44
    return 0;
45
}
46
 
47
/* <bool> .currentglobal - */
48
private int
49
zcurrentglobal(i_ctx_t *i_ctx_p)
50
{
51
    os_ptr op = osp;
52
 
53
    push(1);
54
    make_bool(op, ialloc_space(idmemory) != avm_local);
55
    return 0;
56
}
57
 
58
/* <any> gcheck/scheck <bool> */
59
private int
60
zgcheck(i_ctx_t *i_ctx_p)
61
{
62
    os_ptr op = osp;
63
 
64
    check_op(1);
65
    make_bool(op, (r_is_local(op) ? false : true));
66
    return 0;
67
}
68
 
69
/* ------ Garbage collector control ------ */
70
 
71
/* These routines are exported for setuserparams. */
72
 
73
/*
74
 * <int> setvmthreshold -
75
 *
76
 * This is implemented as a PostScript procedure that calls setuserparams.
77
 */
78
int
79
set_vm_threshold(i_ctx_t *i_ctx_p, long val)
80
{
81
    if (val < -1)
82
	return_error(e_rangecheck);
83
    else if (val == -1)
84
	val = (gs_debug_c('.') ? DEFAULT_VM_THRESHOLD_SMALL :
85
	       DEFAULT_VM_THRESHOLD_LARGE);
86
    else if (val < MIN_VM_THRESHOLD)
87
	val = MIN_VM_THRESHOLD;
88
    else if (val > MAX_VM_THRESHOLD)
89
	val = MAX_VM_THRESHOLD;
90
    gs_memory_set_vm_threshold(idmemory->space_global, val);
91
    gs_memory_set_vm_threshold(idmemory->space_local, val);
92
    return 0;
93
}
94
 
95
int
96
set_vm_reclaim(i_ctx_t *i_ctx_p, long val)
97
{
98
    if (val >= -2 && val <= 0) {
99
	gs_memory_set_vm_reclaim(idmemory->space_system, (val >= -1));
100
	gs_memory_set_vm_reclaim(idmemory->space_global, (val >= -1));
101
	gs_memory_set_vm_reclaim(idmemory->space_local, (val == 0));
102
	return 0;
103
    } else
104
	return_error(e_rangecheck);
105
}
106
 
107
/*
108
 * <int> .vmreclaim -
109
 *
110
 * This implements only immediate garbage collection: enabling and
111
 * disabling GC is implemented by calling setuserparams.
112
 */
113
private int
114
zvmreclaim(i_ctx_t *i_ctx_p)
115
{
116
    os_ptr op = osp;
117
 
118
    check_type(*op, t_integer);
119
    if (op->value.intval == 1 || op->value.intval == 2) {
120
	/* Force the interpreter to store its state and exit. */
121
	/* The interpreter's caller will do the actual GC. */
122
	return_error(e_VMreclaim);
123
    }
124
    return_error(e_rangecheck);
125
}
126
 
127
/* ------ Initialization procedure ------ */
128
 
129
/* The VM operators are defined even if the initial language level is 1, */
130
/* because we need them during initialization. */
131
const op_def zvmem2_op_defs[] =
132
{
133
    {"0.currentglobal", zcurrentglobal},
134
    {"1.gcheck", zgcheck},
135
    {"1.setglobal", zsetglobal},
136
		/* The rest of the operators are defined only in Level 2. */
137
    op_def_begin_level2(),
138
    {"1.vmreclaim", zvmreclaim},
139
    op_def_end(0)
140
};