src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java

changeset 2734
ba758e1ffa69
parent 2733
7974f6da2d76
child 2893
ca5783d9a597
child 2905
f166261986cc
child 3113
0d7fcabf56ed
equal deleted inserted replaced
2733:7974f6da2d76 2734:ba758e1ffa69
1881 1881
1882 /** 1882 /**
1883 * Translate a symbol of a given kind into something suitable for the 1883 * Translate a symbol of a given kind into something suitable for the
1884 * synthetic lambda body 1884 * synthetic lambda body
1885 */ 1885 */
1886 Symbol translate(Name name, final Symbol sym, LambdaSymbolKind skind) { 1886 Symbol translate(final Symbol sym, LambdaSymbolKind skind) {
1887 Symbol ret; 1887 Symbol ret;
1888 switch (skind) { 1888 switch (skind) {
1889 case CAPTURED_THIS: 1889 case CAPTURED_THIS:
1890 ret = sym; // self represented 1890 ret = sym; // self represented
1891 break; 1891 break;
1892 case TYPE_VAR: 1892 case TYPE_VAR:
1893 // Just erase the type var 1893 // Just erase the type var
1894 ret = new VarSymbol(sym.flags(), name, 1894 ret = new VarSymbol(sym.flags(), sym.name,
1895 types.erasure(sym.type), sym.owner); 1895 types.erasure(sym.type), sym.owner);
1896 1896
1897 /* this information should also be kept for LVT generation at Gen 1897 /* this information should also be kept for LVT generation at Gen
1898 * a Symbol with pos < startPos won't be tracked. 1898 * a Symbol with pos < startPos won't be tracked.
1899 */ 1899 */
1900 ((VarSymbol)ret).pos = ((VarSymbol)sym).pos; 1900 ((VarSymbol)ret).pos = ((VarSymbol)sym).pos;
1901 break; 1901 break;
1902 case CAPTURED_VAR: 1902 case CAPTURED_VAR:
1903 ret = new VarSymbol(SYNTHETIC | FINAL | PARAMETER, name, types.erasure(sym.type), translatedSym) { 1903 ret = new VarSymbol(SYNTHETIC | FINAL | PARAMETER, sym.name, types.erasure(sym.type), translatedSym) {
1904 @Override 1904 @Override
1905 public Symbol baseSymbol() { 1905 public Symbol baseSymbol() {
1906 //keep mapping with original captured symbol 1906 //keep mapping with original captured symbol
1907 return sym; 1907 return sym;
1908 } 1908 }
1909 }; 1909 };
1910 break; 1910 break;
1911 case LOCAL_VAR: 1911 case LOCAL_VAR:
1912 ret = new VarSymbol(sym.flags() & FINAL, name, sym.type, translatedSym); 1912 ret = new VarSymbol(sym.flags() & FINAL, sym.name, sym.type, translatedSym);
1913 ((VarSymbol) ret).pos = ((VarSymbol) sym).pos; 1913 ((VarSymbol) ret).pos = ((VarSymbol) sym).pos;
1914 break; 1914 break;
1915 case PARAM: 1915 case PARAM:
1916 ret = new VarSymbol((sym.flags() & FINAL) | PARAMETER, name, types.erasure(sym.type), translatedSym); 1916 ret = new VarSymbol((sym.flags() & FINAL) | PARAMETER, sym.name, types.erasure(sym.type), translatedSym);
1917 ((VarSymbol) ret).pos = ((VarSymbol) sym).pos; 1917 ((VarSymbol) ret).pos = ((VarSymbol) sym).pos;
1918 break; 1918 break;
1919 default: 1919 default:
1920 ret = makeSyntheticVar(FINAL, name, types.erasure(sym.type), translatedSym); 1920 Assert.error(skind.name());
1921 ((VarSymbol) ret).pos = ((VarSymbol) sym).pos; 1921 throw new AssertionError();
1922 } 1922 }
1923 if (ret != sym) { 1923 if (ret != sym) {
1924 ret.setDeclarationAttributes(sym.getRawAttributes()); 1924 ret.setDeclarationAttributes(sym.getRawAttributes());
1925 ret.setTypeAttributes(sym.getRawTypeAttributes()); 1925 ret.setTypeAttributes(sym.getRawTypeAttributes());
1926 } 1926 }
1927 return ret; 1927 return ret;
1928 } 1928 }
1929 1929
1930 void addSymbol(Symbol sym, LambdaSymbolKind skind) { 1930 void addSymbol(Symbol sym, LambdaSymbolKind skind) {
1931 Map<Symbol, Symbol> transMap = getSymbolMap(skind); 1931 Map<Symbol, Symbol> transMap = getSymbolMap(skind);
1932 Name preferredName;
1933 switch (skind) {
1934 case CAPTURED_THIS:
1935 preferredName = names.fromString("encl$" + transMap.size());
1936 break;
1937 case CAPTURED_VAR:
1938 preferredName = names.fromString("cap$" + transMap.size());
1939 break;
1940 case LOCAL_VAR:
1941 preferredName = sym.name;
1942 break;
1943 case PARAM:
1944 preferredName = sym.name;
1945 break;
1946 case TYPE_VAR:
1947 preferredName = sym.name;
1948 break;
1949 default: throw new AssertionError();
1950 }
1951 if (!transMap.containsKey(sym)) { 1932 if (!transMap.containsKey(sym)) {
1952 transMap.put(sym, translate(preferredName, sym, skind)); 1933 transMap.put(sym, translate(sym, skind));
1953 } 1934 }
1954 } 1935 }
1955 1936
1956 Map<Symbol, Symbol> getSymbolMap(LambdaSymbolKind skind) { 1937 Map<Symbol, Symbol> getSymbolMap(LambdaSymbolKind skind) {
1957 Map<Symbol, Symbol> m = translatedSymbols.get(skind); 1938 Map<Symbol, Symbol> m = translatedSymbols.get(skind);

mercurial