MCPcopy Create free account
hub / github.com/dynjs/dynjs / objectLiteral

Method objectLiteral

src/main/java/org/dynjs/parser/js/Parser.java:261–322  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

259 }
260
261 public ObjectLiteralExpression objectLiteral() {
262 Token position = consume(LEFT_BRACE);
263
264 List<PropertyAssignment> propAssignments = new ArrayList<>();
265
266 Set<String> values = new HashSet<>();
267 Set<String> getters = new HashSet<>();
268 Set<String> setters = new HashSet<>();
269
270 while (true) {
271
272 if (la() == RIGHT_BRACE) {
273 break;
274 }
275
276 PropertyAssignment assignment = null;
277 Token token = laToken();
278
279 switch (token.getText()) {
280 case "get":
281 if (la(2) != COLON) {
282 assignment = propertyGet();
283 propAssignments.add(assignment);
284 if (values.contains(assignment.getName()) || getters.contains(assignment.getName())) {
285 throw new SyntaxError(token, "duplicate property not allowed: " + assignment.getName());
286 }
287 getters.add(assignment.getName());
288 break;
289 }
290 case "set":
291 if (la(2) != COLON) {
292 assignment = propertySet();
293 propAssignments.add(assignment);
294 if (values.contains(assignment.getName()) || setters.contains(assignment.getName())) {
295 throw new SyntaxError(token, "duplicate property not allowed: " + assignment.getName());
296 }
297 setters.add(assignment.getName());
298 break;
299 }
300 default:
301 assignment = namedValue();
302 propAssignments.add(assignment);
303 if (getters.contains(assignment.getName()) || setters.contains(assignment.getName())) {
304 throw new SyntaxError(token, "duplicate property not allowed: " + assignment.getName());
305 }
306 if (currentContext().isStrict()) {
307 if (values.contains(assignment.getName())) {
308 throw new SyntaxError(token, "duplicate property not allowed: " + assignment.getName());
309 }
310 }
311 values.add(assignment.getName());
312 }
313
314 if (la() != COMMA) {
315 break;
316 }
317 consume(COMMA);
318 }

Callers 1

primaryExpressionMethod · 0.95

Calls 12

consumeMethod · 0.95
laMethod · 0.95
laTokenMethod · 0.95
getTextMethod · 0.95
propertyGetMethod · 0.95
getNameMethod · 0.95
propertySetMethod · 0.95
namedValueMethod · 0.95
currentContextMethod · 0.95
containsMethod · 0.80
isStrictMethod · 0.65
addMethod · 0.45

Tested by

no test coverage detected