blob: 366293582ef673270ed58a9c8a52d9dcf30c8da0 [file] [log] [blame]
Jiri Simsad7616c92015-03-24 23:44:30 -07001// Copyright 2015 The Vanadium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
Todd Wang232d6492015-02-25 18:04:54 -08005package compile
6
7import (
Jiri Simsaffceefa2015-02-28 11:03:34 -08008 "v.io/x/ref/lib/vdl/vdlutil"
Todd Wang232d6492015-02-25 18:04:54 -08009)
10
Todd Wang53a4e2e2015-03-18 10:54:54 -070011// reservedMode indicates which mode to perform reserved-word checking:
12// reservedNormal - Check identifier as-is.
13// reservedFirstRuneLower - Check identifier with the first rune lowercased.
14type reservedMode int
Todd Wang232d6492015-02-25 18:04:54 -080015
16const (
Todd Wang53a4e2e2015-03-18 10:54:54 -070017 reservedNormal reservedMode = iota
18 reservedFirstRuneLower
Todd Wang232d6492015-02-25 18:04:54 -080019)
20
21// reservedWord checks if identifiers are reserved after they are converted to the native form for the language.
Todd Wang53a4e2e2015-03-18 10:54:54 -070022func reservedWord(ident string, mode reservedMode) bool {
Todd Wang232d6492015-02-25 18:04:54 -080023 return reservedWordJava(ident, mode) ||
24 reservedWordJavascript(ident, mode) ||
25 reservedWordGo(ident)
26 // TODO(bprosnitz) Other identifiers? (set, assert, raise, with, etc)
27}
28
Todd Wang53a4e2e2015-03-18 10:54:54 -070029func reservedWordJava(ident string, mode reservedMode) bool {
30 if mode == reservedFirstRuneLower {
31 ident = vdlutil.FirstRuneToLower(ident)
Todd Wang232d6492015-02-25 18:04:54 -080032 }
Jiri Simsa87d884d2015-06-18 10:25:54 -070033 return javaReservedWords[ident]
Todd Wang232d6492015-02-25 18:04:54 -080034}
35
36var javaReservedWords = map[string]bool{
37 "abstract": true,
38 "assert": true,
39 "boolean": true,
40 "break": true,
41 "byte": true,
42 "case": true,
43 "catch": true,
44 "char": true,
45 "class": true,
46 "const": true,
47 "continue": true,
48 "default": true,
49 "do": true,
50 "double": true,
51 "else": true,
52 "enum": true,
53 "extends": true,
54 "final": true,
55 "finally": true,
56 "float": true,
57 "for": true,
58 "goto": true,
59 "if": true,
60 "implements": true,
61 "import": true,
62 "instanceof": true,
63 "int": true,
64 "interface": true,
65 "long": true,
66 "native": true,
67 "new": true,
68 "package": true,
69 "private": true,
70 "protected": true,
71 "public": true,
72 "return": true,
73 "short": true,
74 "static": true,
75 "strictfp": true,
76 "super": true,
77 "switch": true,
78 "synchronized": true,
79 "this": true,
80 "throw": true,
81 "throws": true,
82 "transient": true,
83 "try": true,
84 "void": true,
85 "volatile": true,
86 "while": true,
87}
88
89func reservedWordGo(ident string) bool {
Jiri Simsa87d884d2015-06-18 10:25:54 -070090 return goReservedWords[ident]
Todd Wang232d6492015-02-25 18:04:54 -080091}
92
93var goReservedWords = map[string]bool{
94 "break": true,
95 "case": true,
96 "chan": true,
97 "const": true,
98 "continue": true,
99 "default": true,
100 "defer": true,
101 "else": true,
102 "fallthrough": true,
103 "for": true,
104 "func": true,
105 "go": true,
106 "goto": true,
107 "if": true,
108 "import": true,
109 "interface": true,
110 "map": true,
111 "package": true,
112 "range": true,
113 "return": true,
114 "select": true,
115 "struct": true,
116 "switch": true,
117 "type": true,
118 "var": true,
119}
120
Todd Wang53a4e2e2015-03-18 10:54:54 -0700121func reservedWordJavascript(ident string, mode reservedMode) bool {
122 if mode == reservedFirstRuneLower {
123 ident = vdlutil.FirstRuneToLower(ident)
Todd Wang232d6492015-02-25 18:04:54 -0800124 }
Jiri Simsa87d884d2015-06-18 10:25:54 -0700125 return javascriptReservedWords[ident]
Todd Wang232d6492015-02-25 18:04:54 -0800126}
127
128var javascriptReservedWords = map[string]bool{
129 "break": true,
130 "case": true,
131 "catch": true,
132 "continue": true,
133 "debugger": true,
134 "default": true,
135 //"delete": true, // TODO(bprosnitz) Look into adding this back. This conflicts with Delete() on Content in repository.vdlutil.
136 "do": true,
137 "else": true,
138 "finally": true,
139 "for": true,
140 "function": true,
141 "if": true,
142 //"in": true, // TODO(bprosnitz) Look into addint this back. It conflicts with In in access/service.vdlutil.
143 "instanceof": true,
144 "new": true,
145 "return": true,
146 "switch": true,
147 "this": true,
148 "throw": true,
149 "try": true,
150 "typeof": true,
151 "var": true,
152 "void": true,
153 "while": true,
154 "with": true,
155}