date and time created 90/06/25 15:37:01 by bostic
[unix-history] / usr / src / old / dbx / languages.c
CommitLineData
2a24676e 1/*
8a90f3aa
KB
2 * Copyright (c) 1983 The Regents of the University of California.
3 * All rights reserved.
4 *
6ecf3d85 5 * %sccs.include.redist.c%
2a24676e 6 */
86d66dd9 7
2a24676e 8#ifndef lint
6ecf3d85 9static char sccsid[] = "@(#)languages.c 5.3 (Berkeley) %G%";
8a90f3aa 10#endif /* not lint */
86d66dd9
ML
11
12/*
13 * Language management.
14 */
15
16#include "defs.h"
17#include "languages.h"
18#include "c.h"
19#include "pascal.h"
2fd0f574 20#include "modula-2.h"
86d66dd9
ML
21#include "asm.h"
22
23#ifndef public
2fd0f574 24
86d66dd9
ML
25typedef struct Language *Language;
26
27typedef enum {
2fd0f574
SL
28 L_PRINTDECL, L_PRINTVAL, L_TYPEMATCH, L_BUILDAREF, L_EVALAREF,
29 L_MODINIT, L_HASMODULES, L_PASSADDR,
30 L_ENDOP
86d66dd9
ML
31} LanguageOp;
32
33typedef LanguageOperation();
2fd0f574
SL
34
35Language primlang;
36
86d66dd9
ML
37#endif
38
39struct Language {
40 String name;
41 String suffix;
2fd0f574 42 LanguageOperation *op[20];
86d66dd9
ML
43 Language next;
44};
45
46private Language head;
47
48/*
49 * Initialize language information.
50 *
51 * The last language initialized will be the default one
52 * for otherwise indistinguised symbols.
53 */
54
55public language_init()
56{
2fd0f574 57 primlang = language_define("$builtin symbols", ".?");
86d66dd9 58 c_init();
1c6133da 59 fortran_init();
86d66dd9 60 pascal_init();
2fd0f574 61 modula2_init();
86d66dd9
ML
62 asm_init();
63}
64
65public Language findlanguage(suffix)
66String suffix;
67{
68 Language lang;
69
70 lang = head;
71 if (suffix != nil) {
72 while (lang != nil and not streq(lang->suffix, suffix)) {
73 lang = lang->next;
74 }
75 if (lang == nil) {
76 lang = head;
77 }
78 }
79 return lang;
80}
81
82public String language_name(lang)
83Language lang;
84{
85 return (lang == nil) ? "(nil)" : lang->name;
86}
87
88public Language language_define(name, suffix)
89String name;
90String suffix;
91{
92 Language p;
93
94 p = new(Language);
95 p->name = name;
96 p->suffix = suffix;
97 p->next = head;
98 head = p;
99 return p;
100}
101
102public language_setop(lang, op, operation)
103Language lang;
104LanguageOp op;
105LanguageOperation *operation;
106{
107 checkref(lang);
2fd0f574 108 assert(ord(op) < ord(L_ENDOP));
86d66dd9
ML
109 lang->op[ord(op)] = operation;
110}
111
112public LanguageOperation *language_op(lang, op)
113Language lang;
114LanguageOp op;
115{
116 LanguageOperation *o;
117
118 checkref(lang);
119 o = lang->op[ord(op)];
120 checkref(o);
121 return o;
122}