Skip to content

Commit 0bc9b53

Browse files
committed
Modify the compiler to return multiple class files with their file names.
1 parent 1ca1198 commit 0bc9b53

File tree

4 files changed

+16
-8
lines changed

4 files changed

+16
-8
lines changed

package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
"version": "1.0.13",
44
"main": "dist/index.js",
55
"types": "dist/index.d.ts",
6-
"files": ["dist"],
6+
"files": [
7+
"dist"
8+
],
79
"repository": {
810
"type": "git",
911
"url": "git+https://github.com/source-academy/java-slang.git"
@@ -40,5 +42,6 @@
4042
"java-parser": "^2.0.5",
4143
"lodash": "^4.17.21",
4244
"peggy": "^4.0.2"
43-
}
45+
},
46+
"packageManager": "[email protected]+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610"
4447
}

src/ClassFile/types/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ import { ConstantInfo } from './constants'
33
import { FieldInfo } from './fields'
44
import { MethodInfo } from './methods'
55

6+
export interface Class {
7+
classFile: ClassFile
8+
className: string
9+
}
10+
611
export interface ClassFile {
712
magic: number
813
minorVersion: number

src/compiler/compiler.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ClassFile } from '../ClassFile/types'
1+
import { Class, ClassFile } from '../ClassFile/types'
22
import { AST } from '../ast/types/packages-and-modules'
33
import {
44
ClassBodyDeclaration,
@@ -52,7 +52,7 @@ export class Compiler {
5252
compile(ast: AST) {
5353
this.setup()
5454
this.symbolTable.handleImports(ast.importDeclarations)
55-
const classFiles: Array<ClassFile> = []
55+
const classFiles: Array<Class> = []
5656

5757
ast.topLevelClassOrInterfaceDeclarations.forEach(decl => {
5858
const className = decl.typeIdentifier
@@ -66,7 +66,7 @@ export class Compiler {
6666
ast.topLevelClassOrInterfaceDeclarations.forEach(decl => {
6767
this.resetClassFileState()
6868
const classFile = this.compileClass(decl)
69-
classFiles.push(classFile)
69+
classFiles.push({classFile: classFile, className: this.className})
7070
})
7171

7272
return classFiles

src/compiler/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import * as peggy from 'peggy'
22
import { AST } from '../ast/types/packages-and-modules'
3-
import { ClassFile } from '../ClassFile/types'
3+
import { Class } from '../ClassFile/types'
44
import { Compiler } from './compiler'
55
import { javaPegGrammar } from './grammar'
66
import { peggyFunctions } from './peggy-functions'
77

8-
export const compile = (ast: AST): Array<ClassFile> => {
8+
export const compile = (ast: AST): Array<Class> => {
99
const compiler = new Compiler()
1010
return compiler.compile(ast)
1111
}
1212

13-
export const compileFromSource = (javaProgram: string): Array<ClassFile> => {
13+
export const compileFromSource = (javaProgram: string): Array<Class> => {
1414
const parser = peggy.generate(peggyFunctions + javaPegGrammar, {
1515
allowedStartRules: ['CompilationUnit'],
1616
cache: true

0 commit comments

Comments
 (0)