Subversion Repositories tendra.SVN

Rev

Rev 5 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5 Rev 6
Line -... Line 1...
-
 
1
/*
-
 
2
 * Copyright (c) 2002-2006 The TenDRA Project <http://www.tendra.org/>.
-
 
3
 * All rights reserved.
-
 
4
 *
-
 
5
 * Redistribution and use in source and binary forms, with or without
-
 
6
 * modification, are permitted provided that the following conditions are met:
-
 
7
 *
-
 
8
 * 1. Redistributions of source code must retain the above copyright notice,
-
 
9
 *    this list of conditions and the following disclaimer.
-
 
10
 * 2. Redistributions in binary form must reproduce the above copyright notice,
-
 
11
 *    this list of conditions and the following disclaimer in the documentation
-
 
12
 *    and/or other materials provided with the distribution.
-
 
13
 * 3. Neither the name of The TenDRA Project nor the names of its contributors
-
 
14
 *    may be used to endorse or promote products derived from this software
-
 
15
 *    without specific, prior written permission.
-
 
16
 *
-
 
17
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
-
 
18
 * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-
 
19
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-
 
20
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
-
 
21
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-
 
22
 * EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-
 
23
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-
 
24
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-
 
25
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-
 
26
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-
 
27
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 
28
 *
-
 
29
 * $Id$
-
 
30
 */
1
/*
31
/*
2
    		 Crown Copyright (c) 1996
32
    		 Crown Copyright (c) 1996
3
 
33
 
4
    This TenDRA(r) Computer Program is subject to Copyright
34
    This TenDRA(r) Computer Program is subject to Copyright
5
    owned by the United Kingdom Secretary of State for Defence
35
    owned by the United Kingdom Secretary of State for Defence
Line 30... Line 60...
30
			    VERSION INFORMATION
60
			    VERSION INFORMATION
31
			    ===================
61
			    ===================
32
 
62
 
33
--------------------------------------------------------------------------
63
--------------------------------------------------------------------------
34
$Header: /u/g/release/CVSROOT/Source/src/installers/680x0/common/spec_tok.c,v 1.1.1.1 1998/01/17 15:55:50 release Exp $
64
$Header: /u/g/release/CVSROOT/Source/src/installers/680x0/common/spec_tok.c,v 1.1.1.1 1998/01/17 15:55:50 release Exp $
35
--------------------------------------------------------------------------
65
--------------------------------------------------------------------------
36
$Log: spec_tok.c,v $
66
$Log: spec_tok.c,v $
37
 * Revision 1.1.1.1  1998/01/17  15:55:50  release
67
 * Revision 1.1.1.1  1998/01/17  15:55:50  release
38
 * First version to be checked into rolling release.
68
 * First version to be checked into rolling release.
39
 *
69
 *
40
Revision 1.1.1.1  1997/10/13 12:42:58  ma
70
Revision 1.1.1.1  1997/10/13 12:42:58  ma
Line 75... Line 105...
75
 
105
 
76
 
106
 
77
/*
107
/*
78
    INTERCEPT SPECIAL TOKENS
108
    INTERCEPT SPECIAL TOKENS
79
*/
109
*/
80
 
110
 
81
tokval special_token
111
tokval
82
    PROTO_N ( ( t, pars, sortcode, done ) )
-
 
83
    PROTO_T ( token t X bitstream pars X int sortcode X int *done )
112
special_token(token t, bitstream pars, int sortcode, int *done)
84
{
113
{
85
    tokval tkv ;
114
	tokval tkv;
86
    UNUSED ( sortcode ) ;
115
	UNUSED(sortcode);
87
 
116
 
88
    if ( t->tok_name == NULL ) {
117
	if (t->tok_name == NULL) {
89
	/* call looks at done to see if result is meaningful */
118
		/* call looks at done to see if result is meaningful */
90
	SET ( tkv ) ;
119
		SET(tkv);
91
	return ( tkv ) ;
120
		return (tkv);
92
    }
121
	}
93
 
122
 
94
    /* alloca */
123
	/* alloca */
95
    if ( !strcmp ( t->tok_name, "~alloca" ) ) {
124
	if (!strcmp(t->tok_name, "~alloca")) {
96
	exp arg1 ;
125
		exp arg1;
97
	place old_place ;
126
		place old_place;
98
	old_place = keep_place () ;
127
		old_place = keep_place();
99
	set_place ( pars ) ;
128
		set_place(pars);
100
	arg1 = hold_check ( d_exp () ) ;
129
		arg1 = hold_check(d_exp());
101
	set_place ( old_place ) ;
130
		set_place(old_place);
102
	tkv.tk_exp = hold_check ( me_u3 ( f_pointer ( long_to_al ( 8 ) ),
131
		tkv.tk_exp = hold_check(me_u3(f_pointer(long_to_al(8)),
103
				  arg1, alloca_tag ) ) ;
132
					      arg1, alloca_tag));
104
	*done = 1 ;
133
		*done = 1;
105
	has_alloca = 1 ;
134
		has_alloca = 1;
106
	return ( tkv ) ;
135
		return (tkv);
107
    }
136
	}
108
 
137
 
109
    /* diagnostic tokens */
138
	/* diagnostic tokens */
110
    if ( !strcmp ( t->tok_name, "~exp_to_source" ) ||
139
	if (!strcmp(t->tok_name, "~exp_to_source") ||
111
	 !strcmp ( t->tok_name, "~diag_id_scope" ) ||
140
	    !strcmp(t->tok_name, "~diag_id_scope") ||
112
	 !strcmp ( t->tok_name, "~diag_type_scope" ) ||
141
	    !strcmp(t->tok_name, "~diag_type_scope") ||
113
	 !strcmp ( t->tok_name, "~diag_tag_scope" ) ) {
142
	    !strcmp(t->tok_name, "~diag_tag_scope")) {
114
	place old_place ;
143
		place old_place;
115
	old_place = keep_place () ;
144
		old_place = keep_place();
116
	set_place ( pars ) ;
145
		set_place(pars);
117
	tkv.tk_exp = hold_check ( d_exp () ) ;
146
		tkv.tk_exp = hold_check(d_exp());
118
	*done = 1 ;
147
		*done = 1;
119
	if ( !diagnose ) {
148
		if (!diagnose) {
-
 
149
			set_place(old_place);
-
 
150
			return (tkv);
-
 
151
		}
-
 
152
		if (!strcmp(t->tok_name, "~exp_to_source")) {
-
 
153
			exp r;
-
 
154
			diag_info *di = read_exp_to_source();
-
 
155
			crt_lno = natint(di->data.source.end.line_no);
-
 
156
			crt_charno = natint(di->data.source.end.char_off);
-
 
157
			crt_flnm = di->data.source.beg.file->file.ints.chars;
-
 
158
			r = getexp(sh(tkv.tk_exp), nilexp, 0, tkv.tk_exp,
-
 
159
				   nilexp, 1, 0, diagnose_tag);
-
 
160
			setfather(r, tkv.tk_exp);
-
 
161
			dno(r) = di;
-
 
162
			tkv.tk_exp = r;
-
 
163
			set_place(old_place);
-
 
164
			return (tkv);
-
 
165
		}
-
 
166
		if (!strcmp(t->tok_name, "~diag_id_scope")) {
-
 
167
			exp r;
-
 
168
			diag_info *di = read_diag_id_scope();
-
 
169
			r = getexp(sh(tkv.tk_exp), nilexp, 0, tkv.tk_exp,
-
 
170
				   nilexp, 2, 0, diagnose_tag);
-
 
171
			setfather(r, tkv.tk_exp);
-
 
172
			dno(r) = di;
-
 
173
			tkv.tk_exp = r;
-
 
174
			set_place(old_place);
-
 
175
			return (tkv);
-
 
176
		}
-
 
177
		if (!strcmp(t->tok_name, "~diag_type_scope")) {
-
 
178
			exp r;
-
 
179
			diag_info *di = read_diag_type_scope();
-
 
180
			r = getexp(sh(tkv.tk_exp), nilexp, 0, tkv.tk_exp,
-
 
181
				   nilexp, 3, 0, diagnose_tag);
-
 
182
			setfather(r, tkv.tk_exp);
-
 
183
			dno(r) = di;
-
 
184
			tkv.tk_exp = r;
120
	    set_place ( old_place ) ;
185
			set_place(old_place);
121
	    return ( tkv ) ;
186
			return (tkv);
-
 
187
		}
-
 
188
		if (!strcmp(t->tok_name, "~diag_tag_scope")) {
-
 
189
			exp r;
-
 
190
			diag_info *di = read_diag_tag_scope();
-
 
191
			r = getexp(sh(tkv.tk_exp), nilexp, 0, tkv.tk_exp,
-
 
192
				   nilexp, 4, 0, diagnose_tag);
-
 
193
			setfather(r, tkv.tk_exp);
-
 
194
			dno(r) = di;
-
 
195
			tkv.tk_exp = r;
-
 
196
			set_place(old_place);
-
 
197
			return (tkv);
-
 
198
		}
122
	}
199
	}
123
	if ( !strcmp ( t->tok_name, "~exp_to_source" ) ) {
-
 
124
	    exp r ;
-
 
125
	    diag_info *di = read_exp_to_source () ;
-
 
126
	    crt_lno = natint ( di->data.source.end.line_no ) ;
-
 
127
	    crt_charno = natint ( di->data.source.end.char_off ) ;
-
 
128
	    crt_flnm = di->data.source.beg.file->file.ints.chars ;
-
 
129
	    r = getexp ( sh ( tkv.tk_exp ), nilexp, 0, tkv.tk_exp, nilexp,
-
 
130
			 1, 0, diagnose_tag ) ;
-
 
131
	    setfather ( r, tkv.tk_exp ) ;
-
 
132
	    dno ( r ) = di ;
-
 
133
	    tkv.tk_exp = r ;
-
 
134
	    set_place ( old_place ) ;
-
 
135
	    return ( tkv ) ;
-
 
136
	}
-
 
137
	if ( !strcmp ( t->tok_name, "~diag_id_scope" ) ) {
-
 
138
	    exp r ;
-
 
139
	    diag_info *di = read_diag_id_scope () ;
-
 
140
	    r = getexp ( sh ( tkv.tk_exp ), nilexp, 0, tkv.tk_exp, nilexp,
-
 
141
			 2, 0, diagnose_tag ) ;
-
 
142
	    setfather ( r, tkv.tk_exp ) ;
-
 
143
	    dno ( r ) = di ;
-
 
144
	    tkv.tk_exp = r ;
-
 
145
	    set_place ( old_place ) ;
-
 
146
	    return ( tkv ) ;
-
 
147
	}
-
 
148
	if ( !strcmp ( t->tok_name, "~diag_type_scope" ) ) {
-
 
149
	    exp r ;
-
 
150
	    diag_info *di = read_diag_type_scope () ;
-
 
151
	    r = getexp ( sh ( tkv.tk_exp ), nilexp, 0, tkv.tk_exp, nilexp,
-
 
152
			 3, 0, diagnose_tag ) ;
-
 
153
	    setfather ( r, tkv.tk_exp ) ;
-
 
154
	    dno ( r ) = di ;
-
 
155
	    tkv.tk_exp = r ;
-
 
156
	    set_place ( old_place ) ;
-
 
157
	    return ( tkv ) ;
-
 
158
	}
-
 
159
	if ( !strcmp ( t->tok_name, "~diag_tag_scope" ) ) {
-
 
160
	    exp r ;
-
 
161
	    diag_info *di = read_diag_tag_scope () ;
-
 
162
	    r = getexp ( sh ( tkv.tk_exp ), nilexp, 0, tkv.tk_exp, nilexp,
-
 
163
			 4, 0, diagnose_tag ) ;
-
 
164
	    setfather ( r, tkv.tk_exp ) ;
-
 
165
	    dno ( r ) = di ;
-
 
166
	    tkv.tk_exp = r ;
-
 
167
	    set_place ( old_place ) ;
-
 
168
	    return ( tkv ) ;
-
 
169
	}
-
 
170
    }
-
 
171
 
200
 
172
    /* call looks at done to see if result is meaningful */
201
	/* call looks at done to see if result is meaningful */
173
    SET ( tkv ) ;
202
	SET(tkv);
174
    return ( tkv ) ;
203
	return (tkv);
175
}
204
}
176
 
205
 
177
 
206
 
178
/*
207
/*
179
    CHECK FOR MACHINE DEPENDENT TOKENS
208
    CHECK FOR MACHINE DEPENDENT TOKENS
180
*/
209
*/
181
 
210
 
182
int machine_toks
211
int
183
    PROTO_N ( ( s ) )
-
 
184
    PROTO_T ( char *s )
212
machine_toks(char *s)
185
{
213
{
186
    return ( 0 ) ;
214
	return (0);
187
}
215
}