|
|
1.1 root 1: /* Copyright (c) 1982 Regents of the University of California */
2:
3: static char sccsid[] = "@(#)languages.c 1.3 5/18/83";
4:
5: /*
6: * Language management.
7: */
8:
9: #include "defs.h"
10: #include "languages.h"
11: #include "c.h"
12: #include "pascal.h"
13: #include "asm.h"
14:
15: #ifndef public
16: typedef struct Language *Language;
17:
18: typedef enum {
19: L_PRINTDECL, L_PRINTVAL, L_TYPEMATCH, L_BUILDAREF, L_EVALAREF
20: } LanguageOp;
21:
22: typedef LanguageOperation();
23: #endif
24:
25: struct Language {
26: String name;
27: String suffix;
28: LanguageOperation *op[10];
29: Language next;
30: };
31:
32: private Language head;
33:
34: /*
35: * Initialize language information.
36: *
37: * The last language initialized will be the default one
38: * for otherwise indistinguised symbols.
39: */
40:
41: public language_init()
42: {
43: c_init();
44: fortran_init();
45: pascal_init();
46: asm_init();
47: }
48:
49: public Language findlanguage(suffix)
50: String suffix;
51: {
52: Language lang;
53:
54: lang = head;
55: if (suffix != nil) {
56: while (lang != nil and not streq(lang->suffix, suffix)) {
57: lang = lang->next;
58: }
59: if (lang == nil) {
60: lang = head;
61: }
62: }
63: return lang;
64: }
65:
66: public String language_name(lang)
67: Language lang;
68: {
69: return (lang == nil) ? "(nil)" : lang->name;
70: }
71:
72: public Language language_define(name, suffix)
73: String name;
74: String suffix;
75: {
76: Language p;
77:
78: p = new(Language);
79: p->name = name;
80: p->suffix = suffix;
81: p->next = head;
82: head = p;
83: return p;
84: }
85:
86: public language_setop(lang, op, operation)
87: Language lang;
88: LanguageOp op;
89: LanguageOperation *operation;
90: {
91: checkref(lang);
92: assert(ord(op) <= ord(L_EVALAREF));
93: lang->op[ord(op)] = operation;
94: }
95:
96: public LanguageOperation *language_op(lang, op)
97: Language lang;
98: LanguageOp op;
99: {
100: LanguageOperation *o;
101:
102: checkref(lang);
103: o = lang->op[ord(op)];
104: checkref(o);
105: return o;
106: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.