Skip to content

Commit f45e188

Browse files
committed
Misc. cleanup & refactoring
1 parent 2c1e21b commit f45e188

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+300
-303
lines changed

CLI/src/main/java/chipmunk/cli/commands/Run.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import chipmunk.modules.math.MathModule;
3434
import chipmunk.modules.system.SystemModule;
3535
import chipmunk.pkg.Entrypoint;
36+
import chipmunk.runtime.CModule;
3637
import chipmunk.vm.ChipmunkScript;
3738
import chipmunk.vm.ChipmunkVM;
3839
import chipmunk.vm.ModuleLoader;
@@ -148,9 +149,9 @@ public Integer call(){
148149

149150
ChipmunkCompiler compiler = new ChipmunkCompiler(loader);
150151
compiler.setModuleLoader(loader);
151-
BinaryModule[] modules = compiler.compile(compilation);
152+
CModule[] modules = compiler.compile(compilation);
152153

153-
loader.addToLoaded(Arrays.asList(modules));
154+
//loader.addToLoaded(Arrays.asList(modules));
154155

155156
CompilationUnit unit = new CompilationUnit();
156157
unit.setModuleLoader(loader);
@@ -164,15 +165,15 @@ public Integer call(){
164165
}else{
165166
// Verify default entrypoint is findable, search compiled modules for
166167
// main module if not
167-
BinaryModule mainModule = loader.loadBinary(unit.getEntryModule());
168+
/*CModule mainModule = loader.loadBinary(unit.getEntryModule());
168169
if(mainModule == null || !(mainModule.getNamespace().has("main") && mainModule.getNamespace().getEntry("main").getType() == FieldType.METHOD)){
169-
for(BinaryModule module : modules){
170+
for(CModule module : modules){
170171
BinaryNamespace.Entry entry = module.getNamespace().getEntry("main");
171172
if(entry != null && entry.getType() == FieldType.METHOD){
172173
unit.setEntryModule(module.getName());
173174
}
174175
}
175-
}
176+
}*/
176177
}
177178

178179
ChipmunkScript script = vm.compileScript(unit);

Lang/src/main/java/chipmunk/ChipmunkUtil.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import chipmunk.binary.BinaryModule;
2424
import chipmunk.compiler.ChipmunkCompiler;
25+
import chipmunk.runtime.CModule;
2526

2627
import java.io.InputStream;
2728
import java.nio.file.Paths;
@@ -32,13 +33,13 @@
3233

3334
public class ChipmunkUtil {
3435

35-
public static List<BinaryModule> compileResources(String... resourcePaths) {
36-
List<BinaryModule> modules = new ArrayList<>();
36+
public static List<CModule> compileResources(String... resourcePaths) {
37+
List<CModule> modules = new ArrayList<>();
3738

3839
ChipmunkCompiler compiler = new ChipmunkCompiler();
3940
for(String path : resourcePaths){
4041
InputStream is = ChipmunkUtil.class.getResourceAsStream(path);
41-
BinaryModule[] compiled = compiler.compile(is, Paths.get(path).getFileName().toString());
42+
CModule[] compiled = compiler.compile(is, Paths.get(path).getFileName().toString());
4243
modules.addAll(Arrays.asList(compiled));
4344
}
4445

Lang/src/main/java/chipmunk/compiler/ChipmunkCompiler.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,13 +120,13 @@ public void visitAst(AstNode node, List<AstVisitor> visitors){
120120
visitors.forEach(v -> v.visit(node));
121121
}
122122

123-
public BinaryModule[] compile(InputStream src, String fileName) throws CompileChipmunk {
123+
public CModule[] compile(InputStream src, String fileName) throws CompileChipmunk {
124124
Compilation compilation = new Compilation();
125125
compilation.addSource(new ChipmunkSource(src, fileName));
126126
return compile(compilation);
127127
}
128128

129-
public BinaryModule[] compile(Compilation compilation) throws CompileChipmunk {
129+
public CModule[] compile(Compilation compilation) throws CompileChipmunk {
130130
var asts = new ArrayList<ParsedModule>();
131131

132132
for(ChipmunkSource source : compilation.getSources()){
@@ -137,31 +137,31 @@ public BinaryModule[] compile(Compilation compilation) throws CompileChipmunk {
137137
return compile(asts);
138138
}
139139

140-
public BinaryModule[] compile(AstNode... asts) throws CompileChipmunk {
140+
public CModule[] compile(AstNode... asts) throws CompileChipmunk {
141141
return compile(Arrays.stream(asts).map(a -> new ParsedModule("<memory>", a)).toList());
142142
}
143143

144-
public BinaryModule[] compile(ParsedModule... modules) throws CompileChipmunk {
144+
public CModule[] compile(ParsedModule... modules) throws CompileChipmunk {
145145
return compile(Arrays.asList(modules));
146146
}
147147

148-
public BinaryModule[] compile(List<ParsedModule> parsedModules) throws CompileChipmunk {
148+
public CModule[] compile(List<ParsedModule> parsedModules) throws CompileChipmunk {
149149
astResolver.setModules(parsedModules.stream().map(ParsedModule::ast).toList());
150150

151151
parsedModules.forEach(p -> visitAst(p.ast(), passes.get(Pass.POST_PARSE)));
152152
parsedModules.forEach(p -> visitAst(p.ast(), passes.get(Pass.SYMBOL_RESOLUTION)));
153153
parsedModules.forEach(p -> visitAst(p.ast(), passes.get(Pass.IMPORT_RESOLUTION)));
154154
parsedModules.forEach(p -> visitAst(p.ast(), passes.get(Pass.PRE_ASSEMBLY)));
155155

156-
BinaryModule[] modules = new BinaryModule[parsedModules.size()];
156+
CModule[] modules = new CModule[parsedModules.size()];
157157
for(int i = 0; i < parsedModules.size(); i++){
158158
var parsed = parsedModules.get(i);
159159
var ast = parsed.ast();
160160

161-
ModuleVisitor visitor = new ModuleVisitor(parsed.fileName());
161+
var visitor = new CModuleVisitor(parsed.fileName());
162162
ast.visit(visitor);
163163

164-
BinaryModule module = visitor.getModule();
164+
CModule module = visitor.getModule();
165165
module.setFileName(parsed.fileName());
166166
modules[i] = module;
167167
}
@@ -215,7 +215,7 @@ public CModule compileExpression(String exp) throws CompileChipmunk {
215215
return compileNodes(new ParsedModule("runtimeExpression", module))[0];
216216
}
217217

218-
public BinaryModule compileMethod(String methodDef) throws CompileChipmunk {
218+
public CModule compileMethod(String methodDef) throws CompileChipmunk {
219219
AstNode module = Modules.make("exp");
220220

221221
TokenStream tokens = lex(methodDef);

Lang/src/main/java/chipmunk/compiler/codegen/CMethodVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public void visit(AstNode node) {
9595
codegen.setVisitorForNode(ID, new NoOpVisitor()); // Handle id nodes that are on their own lines
9696
codegen.setVisitorForNode(METHOD, CMethodVisitor.innerMethodVisitor(codegen, module));
9797
//codegen.setVisitorForNode(ClassNode.class, new ClassVisitor(assembler.getConstantPool(), module, assembler));
98-
codegen.setVisitorForNode(VAR_DEC, new VarDecVisitor(codegen));
98+
//codegen.setVisitorForNode(VAR_DEC, new VarDecVisitor(codegen));
9999
codegen.setVisitorForNode(IF_ELSE, new IfElseVisitor(codegen));
100100
codegen.setVisitorForNode(WHILE, new WhileVisitor(codegen));
101101
codegen.setVisitorForNode(FOR, new ForVisitor(codegen));

Lang/src/main/java/chipmunk/compiler/codegen/ExpressionStatementVisitor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ public ExpressionStatementVisitor(Codegen codegen){
3838
public void visit(AstNode node) {
3939
//node.visit(new ExpressionVisitor(codegen));
4040
// evaluate expression and ignore result
41-
assembler.pop();
42-
assembler.closeLine();
41+
//assembler.pop();
42+
//assembler.closeLine();
4343
}
4444

4545
}

Lang/src/main/java/chipmunk/compiler/codegen/FlowControlVisitor.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,33 +43,33 @@ public void visit(AstNode node) {
4343
if(node.is(NodeType.FLOW_CONTROL)){
4444

4545
Token token = node.getToken();
46-
assembler.onLine(token.line());
46+
//assembler.onLine(token.line());
4747

4848
if(token.type() == TokenType.RETURN){
4949
if(node.hasChildren()){
5050
//node.visitChildren(new ExpressionVisitor(codegen));
5151
}else{
52-
assembler.pushNull();
52+
//assembler.pushNull();
5353
}
54-
assembler._return();
54+
//assembler._return();
5555
}else if(token.type() == TokenType.THROW){
5656
//node.visitChildren(new ExpressionVisitor(codegen));
57-
assembler._throw();
57+
//assembler._throw();
5858
}else if(token.type() == TokenType.BREAK){
5959
if(!codegen.inLoop()){
6060
//throw new CompileChipmunk(String.format("Invalid break at %s: %d: Can only break when inside a loop", token.getFile(), token.getLine()));
6161
throw new CompileChipmunk(String.format("Invalid break at %d: Can only break when inside a loop", token.line()));
6262

6363
}
64-
assembler._goto(codegen.peekClosestLoop().getEndLabel());
64+
//assembler._goto(codegen.peekClosestLoop().getEndLabel());
6565
}else if(token.type() == TokenType.CONTINUE){
6666
if(!codegen.inLoop()){
6767
//throw new CompileChipmunk(String.format("Invalid continue at %s: %d: Can only continue when inside a loop", token.getFile(), token.getLine()));
6868
throw new CompileChipmunk(String.format("Invalid continue at %d: Can only continue when inside a loop", token.line()));
6969
}
70-
assembler._goto(codegen.peekClosestLoop().getGuardLabel());
70+
//assembler._goto(codegen.peekClosestLoop().getGuardLabel());
7171
}
72-
assembler.closeLine();
72+
//assembler.closeLine();
7373
return;
7474
}
7575
}

Lang/src/main/java/chipmunk/compiler/codegen/MethodVisitor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public class MethodVisitor implements AstVisitor {
5151

5252
public MethodVisitor(ChipmunkAssembler assembler, BinaryModule module){
5353
this.assembler = assembler;
54+
codegen = new Codegen(null);
5455
defaultReturn = true;
5556
isInner = false;
5657
this.module = module;

Lang/src/main/java/chipmunk/compiler/codegen/VarDecVisitor.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@
2424
import chipmunk.compiler.symbols.Symbol;
2525
import chipmunk.compiler.ast.AstNode;
2626
import chipmunk.compiler.ast.AstVisitor;
27+
import chipmunk.vm.tree.Node;
28+
import chipmunk.vm.tree.nodes.Value;
2729

28-
public class VarDecVisitor implements AstVisitor {
30+
public class VarDecVisitor implements CodegenVisitor {
2931

3032
protected Codegen codegen;
3133

@@ -34,21 +36,22 @@ public VarDecVisitor(Codegen codegen){
3436
}
3537

3638
@Override
37-
public void visit(AstNode node) {
38-
39-
ChipmunkAssembler assembler = codegen.getAssembler();
39+
public Node visit(AstNode node) {
40+
4041
Symbol symbol = codegen.getActiveSymbols().getSymbol(node.getChild().getToken().text());
41-
42-
if(node.childCount() > 1){
43-
//node.getChild(1).visit(new ExpressionVisitor(codegen));
44-
}else{
45-
assembler.pushNull();
46-
}
42+
4743
if(symbol == null) {
4844
throw new NullPointerException("Null symbol: " + node.getChild().getToken().text() + "\n" + codegen.getActiveSymbols().toString());
4945
}
50-
codegen.emitLocalAssignment(symbol.getName());
51-
codegen.getAssembler().pop();
46+
47+
var setNode = codegen.emitLocalAssignment(symbol.getName());
48+
if(node.childCount() > 1){
49+
var visitor = new ExpressionVisitor(codegen);
50+
setNode.value = visitor.visit(node.getChild(1));
51+
}else{
52+
setNode.value = new Value(null);
53+
}
54+
return setNode;
5255
}
5356

5457
}

Lang/src/main/java/chipmunk/compiler/imports/BinaryImportResolver.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ public void setModuleLoader(ModuleLoader loader) {
5252
@Override
5353
public Symbol resolve(String moduleName, String name) {
5454

55-
try {
56-
BinaryModule module = loader.loadBinary(moduleName);
55+
/*try {
56+
BinaryModule module = loader.loadChipmunk(moduleName);
5757
if(module == null){
5858
return null;
5959
}
@@ -64,15 +64,15 @@ public Symbol resolve(String moduleName, String name) {
6464
}
6565
} catch (IOException | BinaryFormatException e) {
6666
throw new RuntimeException(e);
67-
}
67+
}*/
6868

6969
return null;
7070
}
7171

7272
@Override
7373
public List<Symbol> resolveSymbols(String moduleName) {
74-
try {
75-
BinaryModule module = loader.loadBinary(moduleName);
74+
/*try {
75+
BinaryModule module = loader.loadChipmunk(moduleName);
7676
if(module == null){
7777
return null;
7878
}
@@ -84,7 +84,8 @@ public List<Symbol> resolveSymbols(String moduleName) {
8484
.collect(Collectors.toList());
8585
} catch (IOException | BinaryFormatException e) {
8686
throw new RuntimeException(e);
87-
}
87+
}*/
88+
return null;
8889
}
8990

9091
protected Symbol makeSymbol(BinaryNamespace.Entry e){

Lang/src/main/java/chipmunk/runtime/CClass.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,15 @@ public CMethod getInstanceMethod(int index){
7777
return instanceMethods[index];
7878
}
7979

80+
public CMethod getInstanceMethod(String name){
81+
for(var method : instanceMethods){
82+
if(method.name.equals(name)){
83+
return method;
84+
}
85+
}
86+
return null;
87+
}
88+
8089
public void defineInstanceMethod(int i, CMethod method){
8190
instanceMethods[i] = method;
8291
}

0 commit comments

Comments
 (0)