Initial commit of main compiler sources (or should I say ... SAUCES!)

This commit is contained in:
2025-06-08 23:58:21 +10:00
parent 60c566025c
commit 06f2613083
214 changed files with 22210 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
package slangc.codegraph;
public interface AbstractClassDefinition extends AbstractTypeDefinition {
public AbstractLink getSuperClass();
}

View File

@@ -0,0 +1,5 @@
package slangc.codegraph;
public interface AbstractConstructor extends AbstractInvokable {
}

View File

@@ -0,0 +1,9 @@
package slangc.codegraph;
public interface AbstractContainer extends AbstractNamedElement {
public int countNamedElements();
public AbstractNamedElement getNamedElement(int index);
public ContainerType getContainerType();
}

View File

@@ -0,0 +1,5 @@
package slangc.codegraph;
public interface AbstractEnumDefinition extends AbstractInterfaceDefinition {
}

View File

@@ -0,0 +1,5 @@
package slangc.codegraph;
public interface AbstractField extends AbstractNamedElement {
}

View File

@@ -0,0 +1,5 @@
package slangc.codegraph;
public interface AbstractInterfaceDefinition {
}

View File

@@ -0,0 +1,5 @@
package slangc.codegraph;
public interface AbstractInvokable extends AbstractMember {
}

View File

@@ -0,0 +1,7 @@
package slangc.codegraph;
public interface AbstractLink {
boolean isResolved();
String getTargetName();
AbstractNamedElement getTarget();
}

View File

@@ -0,0 +1,7 @@
package slangc.codegraph;
public interface AbstractMember extends AbstractNamedElement {
public MemberType getMemberType();
public boolean isStatic();
}

View File

@@ -0,0 +1,5 @@
package slangc.codegraph;
public interface AbstractMethod extends AbstractInvokable {
}

View File

@@ -0,0 +1,15 @@
package slangc.codegraph;
public interface AbstractNamedElement {
public AbstractContainer getEnclosingContainer();
public String getSimpleName();
public String getFullName();
public AbstractTypeDefinition getType();
public AbstractPackage getPackage();
public AbstractSet getSet();
public AbstractWorld getWorld();
public Object getCompilerObject();
}

View File

@@ -0,0 +1,5 @@
package slangc.codegraph;
public interface AbstractPackage extends AbstractContainer {
}

View File

@@ -0,0 +1,11 @@
package slangc.codegraph;
/**
* Represents a set of packages (either an already-compiled set, or a set of sourceFile packages being compiled or analysed).
*
* @author Zak
*
*/
public interface AbstractSet extends AbstractContainer {
}

View File

@@ -0,0 +1,5 @@
package slangc.codegraph;
public interface AbstractTagDefinition extends AbstractTypeDefinition {
}

View File

@@ -0,0 +1,10 @@
package slangc.codegraph;
public interface AbstractTypeDefinition extends AbstractContainer {
public TypeType getTypeType();
public int countInheritedInterfaces();
public AbstractLink getInheritedInterface(int index);
}

View File

@@ -0,0 +1,5 @@
package slangc.codegraph;
public interface AbstractWorld extends AbstractContainer {
}

View File

@@ -0,0 +1,8 @@
package slangc.codegraph;
public enum ContainerType {
WORLD,
SET,
PACKAGE,
TYPE
}

View File

@@ -0,0 +1,21 @@
package slangc.codegraph;
public class DynamicClassDefinition extends DynamicType implements AbstractClassDefinition {
private DynamicLink superClass = null;
public DynamicClassDefinition() {
// TODO Auto-generated constructor stub
}
public TypeType getTypeType() {
return TypeType.CLASS;
}
public DynamicLink getSuperClass() {
return superClass;
}
public void setSuperClass(DynamicLink superClass) {
this.superClass = superClass;
}
}

View File

@@ -0,0 +1,9 @@
package slangc.codegraph;
public class DynamicConstructor extends DynamicInvokable implements AbstractConstructor {
public DynamicConstructor() {
// TODO Auto-generated constructor stub
}
}

View File

@@ -0,0 +1,31 @@
package slangc.codegraph;
public abstract class DynamicContainer extends DynamicNamedElement implements AbstractContainer {
private DynamicNamedElement[] elements = new DynamicNamedElement[0];
public DynamicContainer() {
// TODO Auto-generated constructor stub
}
public int countNamedElements() {
return elements.length;
}
public DynamicNamedElement getNamedElement(int index) {
if (index < 0 || index > elements.length) {
return null;
} else {
return elements[index];
}
}
public void appendNamedElement(DynamicNamedElement e) {
DynamicNamedElement[] nelem = new DynamicNamedElement[elements.length + 1];
for (int i = 0; i < elements.length; i++) {
nelem[i] = elements[i];
}
nelem[nelem.length - 1] = e;
elements = nelem;
e.setEnclosingContainer(this);
}
}

View File

@@ -0,0 +1,13 @@
package slangc.codegraph;
public class DynamicEnumDefinition extends DynamicInterfaceDefinition implements AbstractEnumDefinition {
public DynamicEnumDefinition() {
// TODO Auto-generated constructor stub
}
public TypeType getTypeType() {
return TypeType.ENUM;
}
}

View File

@@ -0,0 +1,9 @@
package slangc.codegraph;
public class DynamicField extends DynamicNamedElement implements AbstractField {
public DynamicField() {
// TODO Auto-generated constructor stub
}
}

View File

@@ -0,0 +1,13 @@
package slangc.codegraph;
public class DynamicInterfaceDefinition extends DynamicType implements AbstractInterfaceDefinition {
public DynamicInterfaceDefinition() {
// TODO Auto-generated constructor stub
}
public TypeType getTypeType() {
return TypeType.INTERFACE;
}
}

View File

@@ -0,0 +1,19 @@
package slangc.codegraph;
public abstract class DynamicInvokable extends DynamicNamedElement implements AbstractInvokable {
public DynamicInvokable() {
// TODO Auto-generated constructor stub
}
public MemberType getMemberType() {
// TODO Auto-generated method stub
return null;
}
public boolean isStatic() {
// TODO Auto-generated method stub
return false;
}
}

View File

@@ -0,0 +1,10 @@
package slangc.codegraph;
public abstract class DynamicLink implements AbstractLink {
public DynamicLink() {
// TODO Auto-generated constructor stub
}
}

View File

@@ -0,0 +1,10 @@
package slangc.codegraph;
public class DynamicMethod extends DynamicInvokable implements AbstractMethod {
public DynamicMethod() {
// TODO Auto-generated constructor stub
}
}

View File

@@ -0,0 +1,87 @@
package slangc.codegraph;
public class DynamicNamedElement implements AbstractNamedElement {
private AbstractContainer container = null;
private String name = "";
private Object compilerObject = null;
public void setEnclosingContainer(AbstractContainer container) {
if (this.container != null) {
throw new Error("Container is already set.");
}
this.container = container;
}
public AbstractContainer getEnclosingContainer() {
return container;
}
public void setSimpleName(String name) {
if (!this.name.equals("")) {
throw new Error("SimpleName is already set.");
}
this.name = name;
}
public String getSimpleName() {
// TODO Auto-generated method stub
return name;
}
public String getFullName() {
if (container != null && container != getSet()) {
return container.getFullName() + "." + getSimpleName();
} else {
return getSimpleName();
}
}
public AbstractTypeDefinition getType() {
if (this instanceof AbstractTypeDefinition) {
return (AbstractTypeDefinition) this;
} else if (container != null) {
return container.getType();
} else {
return null;
}
}
public AbstractPackage getPackage() {
if (this instanceof AbstractPackage) {
return (AbstractPackage) this;
} else if (container != null) {
return container.getPackage();
} else {
return null;
}
}
public AbstractSet getSet() {
if (this instanceof AbstractSet) {
return (AbstractSet) this;
} else if (container != null) {
return container.getSet();
} else {
return null;
}
}
public AbstractWorld getWorld() {
if (this instanceof AbstractWorld) {
return (AbstractWorld) this;
} else if (container != null) {
return container.getWorld();
} else {
return null;
}
}
public Object getCompilerObject() {
return compilerObject;
}
public void setCompilerObject(Object compilerObject) {
this.compilerObject = compilerObject;
}
}

View File

@@ -0,0 +1,12 @@
package slangc.codegraph;
public class DynamicPackage extends DynamicContainer implements AbstractPackage {
public DynamicPackage() {
// TODO Auto-generated constructor stub
}
public ContainerType getContainerType() {
return ContainerType.PACKAGE;
}
}

View File

@@ -0,0 +1,12 @@
package slangc.codegraph;
public class DynamicSet extends DynamicContainer implements AbstractSet {
public DynamicSet() {
// TODO Auto-generated constructor stub
}
public ContainerType getContainerType() {
return ContainerType.SET;
}
}

View File

@@ -0,0 +1,13 @@
package slangc.codegraph;
public class DynamicTagDefinition extends DynamicInterfaceDefinition implements AbstractTagDefinition {
public DynamicTagDefinition() {
// TODO Auto-generated constructor stub
}
public TypeType getTypeType() {
return TypeType.TAG;
}
}

View File

@@ -0,0 +1,35 @@
package slangc.codegraph;
public abstract class DynamicType extends DynamicContainer implements AbstractTypeDefinition {
private DynamicLink[] interfaces = new DynamicLink[0];
public DynamicType() {
// TODO Auto-generated constructor stub
}
public ContainerType getContainerType() {
return ContainerType.TYPE;
}
public int countInheritedInterfaces() {
return interfaces.length;
}
public DynamicLink getInheritedInterface(int index) {
if (index < 0 || index > interfaces.length) {
return null;
} else {
return interfaces[index];
}
}
public void appendInheritedInterface(DynamicLink iface) {
DynamicLink[] nifcs = new DynamicLink[interfaces.length + 1];
for (int i = 0; i < interfaces.length; i++) {
nifcs[i] = interfaces[i];
}
nifcs[nifcs.length - 1] = iface;
interfaces = nifcs;
}
}

View File

@@ -0,0 +1,13 @@
package slangc.codegraph;
public class DynamicWorld extends DynamicContainer implements AbstractWorld {
public DynamicWorld() {
// TODO Auto-generated constructor stub
}
public ContainerType getContainerType() {
return ContainerType.WORLD;
}
}

View File

@@ -0,0 +1,8 @@
package slangc.codegraph;
public enum MemberType {
FIELD,
METHOD,
CONSTRUCTOR,
TYPE
}

View File

@@ -0,0 +1,9 @@
package slangc.codegraph;
public enum TypeType {
UNINITIALISED,
CLASS,
INTERFACE,
ENUM,
TAG
}