mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-06-29 12:35:39 +00:00
Fixed: AS3 difference between namespace keyword and const of type Namespace
This commit is contained in:
@@ -1980,7 +1980,7 @@ public class AVM2SourceGenerator implements SourceGenerator {
|
||||
cai.pkg.resolveCustomNs(abcIndex, importedClasses, localData.pkg, openedNamespaces, localData);
|
||||
}
|
||||
namespace = cai.pkg == null ? 0 : cai.pkg.getCpoolIndex(abcIndex);
|
||||
isNamespace = type.toString().equals("Namespace");
|
||||
isNamespace = cai.ns;
|
||||
isStatic = cai.isStatic();
|
||||
}
|
||||
tsc.type_index = isNamespace ? 0 : (type == null ? 0 : typeName(localData, type));
|
||||
|
||||
@@ -40,7 +40,6 @@ import com.jpexs.decompiler.flash.abc.avm2.model.InitVectorAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.IntegerValueAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.NameValuePair;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.NanAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.NewActivationAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.NewArrayAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.NewObjectAVM2Item;
|
||||
@@ -149,7 +148,7 @@ import macromedia.asc.util.Decimal128;
|
||||
* @author JPEXS
|
||||
*/
|
||||
public class ActionScript3Parser {
|
||||
|
||||
|
||||
private static final GraphTargetDialect DIALECT = AVM2GraphTargetDialect.INSTANCE;
|
||||
|
||||
private long uniqLast = 0;
|
||||
@@ -919,7 +918,7 @@ public class ActionScript3Parser {
|
||||
lexer.pushback(s);
|
||||
}
|
||||
|
||||
ConstAVM2Item ns = new ConstAVM2Item(metadata, namespace, customNs, true, nname, new TypeItem(DottedChain.NAMESPACE), new StringAVM2Item(null, null, nval), lexer.yyline(), generatedNs);
|
||||
ConstAVM2Item ns = new ConstAVM2Item(metadata, namespace, customNs, true, nname, new TypeItem(DottedChain.NAMESPACE), new StringAVM2Item(null, null, nval), lexer.yyline(), true, generatedNs);
|
||||
traits.add(ns);
|
||||
break;
|
||||
case CONST:
|
||||
@@ -961,7 +960,7 @@ public class ActionScript3Parser {
|
||||
}
|
||||
GraphTargetItem tar;
|
||||
if (isConst) {
|
||||
tar = new ConstAVM2Item(metadata, namespace, customNs, isStatic, vcname, type, value, lexer.yyline(), false);
|
||||
tar = new ConstAVM2Item(metadata, namespace, customNs, isStatic, vcname, type, value, lexer.yyline(), false, false);
|
||||
} else {
|
||||
tar = new SlotAVM2Item(metadata, namespace, customNs, isStatic, vcname, type, value, lexer.yyline());
|
||||
}
|
||||
@@ -1275,7 +1274,7 @@ public class ActionScript3Parser {
|
||||
}
|
||||
GraphTargetItem tar;
|
||||
if (isConst) {
|
||||
tar = new ConstAVM2Item(metadata, ns, null, true, vcname, type, value, lexer.yyline(), false);
|
||||
tar = new ConstAVM2Item(metadata, ns, null, true, vcname, type, value, lexer.yyline(), false, false);
|
||||
} else {
|
||||
tar = new SlotAVM2Item(metadata, ns, null, true, vcname, type, value, lexer.yyline());
|
||||
}
|
||||
@@ -1309,7 +1308,7 @@ public class ActionScript3Parser {
|
||||
lexer.pushback(s);
|
||||
}
|
||||
|
||||
traits.add(new ConstAVM2Item(metadata, ns, null, true, nname, new TypeItem(DottedChain.NAMESPACE), new StringAVM2Item(null, null, nval), lexer.yyline(), generatedNs));
|
||||
traits.add(new ConstAVM2Item(metadata, ns, null, true, nname, new TypeItem(DottedChain.NAMESPACE), new StringAVM2Item(null, null, nval), lexer.yyline(), true, generatedNs));
|
||||
break;
|
||||
default:
|
||||
lexer.pushback(s);
|
||||
|
||||
@@ -70,6 +70,11 @@ public class ConstAVM2Item extends AVM2Item {
|
||||
* Package
|
||||
*/
|
||||
public NamespaceItem pkg;
|
||||
|
||||
/**
|
||||
* Is namespace?
|
||||
*/
|
||||
public boolean ns;
|
||||
|
||||
/**
|
||||
* Generated namespace
|
||||
@@ -96,9 +101,10 @@ public class ConstAVM2Item extends AVM2Item {
|
||||
* @param type Type
|
||||
* @param value Value
|
||||
* @param line Line
|
||||
* @param ns Is namespace?
|
||||
* @param generatedNs Generated namespace
|
||||
*/
|
||||
public ConstAVM2Item(List<Map.Entry<String, Map<String, String>>> metadata, NamespaceItem pkg, String customNamespace, boolean isStatic, String var, GraphTargetItem type, GraphTargetItem value, int line, boolean generatedNs) {
|
||||
public ConstAVM2Item(List<Map.Entry<String, Map<String, String>>> metadata, NamespaceItem pkg, String customNamespace, boolean isStatic, String var, GraphTargetItem type, GraphTargetItem value, int line, boolean ns, boolean generatedNs) {
|
||||
|
||||
super(null, null, NOPRECEDENCE, value);
|
||||
this.metadata = metadata;
|
||||
@@ -108,6 +114,7 @@ public class ConstAVM2Item extends AVM2Item {
|
||||
this.var = var;
|
||||
this.type = type;
|
||||
this.customNamespace = customNamespace;
|
||||
this.ns = ns;
|
||||
this.generatedNs = generatedNs;
|
||||
}
|
||||
|
||||
@@ -134,12 +141,12 @@ public class ConstAVM2Item extends AVM2Item {
|
||||
}
|
||||
|
||||
AVM2SourceGenerator agen = (AVM2SourceGenerator) generator;
|
||||
int ns = agen.genNs(localData.importedClasses, pkg.name, pkg, localData.openedNamespaces, localData, line);
|
||||
if (type.toString().equals("Namespace")) {
|
||||
if (this.ns) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
|
||||
int ns = agen.genNs(localData.importedClasses, pkg.name, pkg, localData.openedNamespaces, localData, line);
|
||||
|
||||
List<GraphSourceItem> ret = new ArrayList<>();
|
||||
if (value != null) {
|
||||
GraphTargetItem value2 = AVM2SourceGenerator.handleAndOrCoerce(value, type);
|
||||
|
||||
@@ -132,7 +132,7 @@ public class TraitSlotConst extends Trait implements TraitWithSlot {
|
||||
if (kindType == TRAIT_CONST) {
|
||||
slotconst = "const";
|
||||
}
|
||||
if (val != null && val.isNamespace()) {
|
||||
if (val != null && type_index == 0 && val.isNamespace()) {
|
||||
slotconst = "namespace";
|
||||
typeStr = "";
|
||||
}
|
||||
|
||||
@@ -127,12 +127,12 @@ public interface SimpleParser {
|
||||
if (vs instanceof TraitVarConstValueScope) {
|
||||
subStatic = ((TraitVarConstValueScope) vs).isStatic();
|
||||
}
|
||||
|
||||
|
||||
//if its inner function (not a method), remove all this variables
|
||||
Map<String, Integer> subPrivateVarFullNameToDefinitionPosition = privateVarFullNameToDefinitionPosition;
|
||||
Map<String, Integer> subPrivateVarNameToDefinitionPosition = privateVarNameToDefinitionPosition;
|
||||
if ((vs instanceof FunctionScope) &&(!(vs instanceof MethodScope))) {
|
||||
subPrivateVarFullNameToDefinitionPosition = new LinkedHashMap<>(subPrivateVarFullNameToDefinitionPosition);
|
||||
if ((vs instanceof FunctionScope) && (!(vs instanceof MethodScope))) {
|
||||
subPrivateVarFullNameToDefinitionPosition = new LinkedHashMap<>(subPrivateVarFullNameToDefinitionPosition);
|
||||
subPrivateVarNameToDefinitionPosition = new LinkedHashMap<>(subPrivateVarNameToDefinitionPosition);
|
||||
Set<String> keys = new HashSet<>(subPrivateVarFullNameToDefinitionPosition.keySet());
|
||||
for (String vName : keys) {
|
||||
@@ -145,10 +145,10 @@ public interface SimpleParser {
|
||||
String lastName = vName.contains(".") ? vName.substring(vName.lastIndexOf(".") + 1) : vName;
|
||||
subPrivateVarNameToDefinitionPosition.remove(lastName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
parseVariablesList(vs.getPrivateItems(), vs.getSharedItems(), definitionPosToReferences, referenceToDefinition, subPrivateVarFullNameToDefinitionPosition, subPrivateVarNameToDefinitionPosition, positionToStatic, subStatic, errors, vs, innerFunctionCanUseTraits);
|
||||
}
|
||||
}
|
||||
@@ -203,28 +203,28 @@ public interface SimpleParser {
|
||||
if (vs instanceof TraitVarConstValueScope) {
|
||||
subStatic = ((TraitVarConstValueScope) vs).isStatic();
|
||||
}
|
||||
|
||||
|
||||
//if its inner function (not a method), remove all this variables
|
||||
Map<String, Integer> subPrivateVarFullNameToDefinitionPosition = privateVarFullNameToDefinitionPosition;
|
||||
Map<String, Integer> subPrivateVarNameToDefinitionPosition = privateVarNameToDefinitionPosition;
|
||||
if ((vs instanceof FunctionScope) &&(!(vs instanceof MethodScope))) {
|
||||
subPrivateVarFullNameToDefinitionPosition = new LinkedHashMap<>(subPrivateVarFullNameToDefinitionPosition);
|
||||
if ((vs instanceof FunctionScope) && (!(vs instanceof MethodScope))) {
|
||||
subPrivateVarFullNameToDefinitionPosition = new LinkedHashMap<>(subPrivateVarFullNameToDefinitionPosition);
|
||||
subPrivateVarNameToDefinitionPosition = new LinkedHashMap<>(subPrivateVarNameToDefinitionPosition);
|
||||
Set<String> keys = new HashSet<>(subPrivateVarFullNameToDefinitionPosition.keySet());
|
||||
for (String vName : keys) {
|
||||
if (vName.equals("this") || vName.startsWith("this.")) {
|
||||
subPrivateVarFullNameToDefinitionPosition.remove(vName);
|
||||
if (vName.equals("this")) {
|
||||
if (vName.equals("this")) {
|
||||
subPrivateVarNameToDefinitionPosition.remove("this");
|
||||
}
|
||||
if (!innerFunctionCanUseTraits) {
|
||||
String lastName = vName.contains(".") ? vName.substring(vName.lastIndexOf(".") + 1) : vName;
|
||||
subPrivateVarNameToDefinitionPosition.remove(lastName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
parseVariablesList(vs.getPrivateItems(), vs.getSharedItems(), definitionPosToReferences, referenceToDefinition, privateVarFullNameToDefinitionPosition, privateVarNameToDefinitionPosition, positionToStatic, subStatic, errors, vs, innerFunctionCanUseTraits);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user