/**
* Copyright (c) 2012-2016 André Bargull
* Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms.
*
* <https://github.com/anba/es6draft>
*/
package com.github.anba.es6draft.runtime;
import java.util.HashMap;
import com.github.anba.es6draft.runtime.types.Symbol;
/**
* <h1>19 Fundamental Objects</h1><br>
* <h2>19.4 Symbol Objects</h2>
* <ul>
* <li>GlobalSymbolRegistry Record
* </ul>
*/
public final class GlobalSymbolRegistry {
private final HashMap<String, Symbol> elements = new HashMap<>();
@Override
public String toString() {
return String.format("GlobalSymbolRegistry=%s", elements);
}
/**
* Returns the symbol which is mapped to {@code key}, or creates a new mapping.
*
* @param key
* the symbol string key
* @return the mapped symbol
*/
public Symbol getSymbol(String key) {
assert key != null : "key must not be null";
Symbol symbol = elements.get(key);
if (symbol != null) {
return symbol;
}
Symbol newSymbol = new Symbol(key);
elements.put(key, newSymbol);
return newSymbol;
}
/**
* Returns the key which is mapped to {@code symbol}, or returns <code>null</code> if there is
* no mapping.
*
* @param symbol
* the global symbol
* @return the symbol string key or {@code null} if the symbol is not in the registry
*/
public String getKey(Symbol symbol) {
assert symbol != null : "symbol must not be null";
String key = symbol.getDescription();
Symbol existingSymbol = elements.get(key);
if (existingSymbol == symbol) {
return key;
}
return null;
}
}